Hi Brecht,
after this commit I get an error with CUDA:

CUDA error: Unknown error in cuCtxSynchronize()
CUDA error: Unknown error in cuMemFree(cuda_device_ptr(mem.device_pointer))

I use a GTX 540, with 2GB RAM. Windows x64.

It does not matter what scene, happens even with the default cube.

Am 26.01.2012 20:07, schrieb Brecht Van Lommel:
> Revision: 43734
>            
> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43734
> Author:   blendix
> Date:     2012-01-26 19:07:01 +0000 (Thu, 26 Jan 2012)
> Log Message:
> -----------
> Cycles: render passes for CUDA cards with compute model>= 2.x.
>
> Modified Paths:
> --------------
>      trunk/blender/intern/cycles/blender/blender_session.cpp
>      trunk/blender/intern/cycles/device/device.cpp
>      trunk/blender/intern/cycles/device/device.h
>      trunk/blender/intern/cycles/device/device_cpu.cpp
>      trunk/blender/intern/cycles/device/device_cuda.cpp
>      trunk/blender/intern/cycles/device/device_multi.cpp
>      trunk/blender/intern/cycles/device/device_network.cpp
>      trunk/blender/intern/cycles/device/device_opencl.cpp
>      trunk/blender/intern/cycles/kernel/kernel_passes.h
>      trunk/blender/intern/cycles/kernel/kernel_types.h
>      trunk/blender/intern/cycles/render/buffers.cpp
>      trunk/blender/intern/cycles/render/svm.cpp
>
> Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/blender/blender_session.cpp   2012-01-26 
> 17:11:43 UTC (rev 43733)
> +++ trunk/blender/intern/cycles/blender/blender_session.cpp   2012-01-26 
> 19:07:01 UTC (rev 43734)
> @@ -206,7 +206,7 @@
>               vector<Pass>  passes;
>               Pass::add(PASS_COMBINED, passes);
>
> -             if(session_params.device.type == DEVICE_CPU) { /* todo */
> +             if(session_params.device.advanced_shading) {
>                       BL::RenderLayer::passes_iterator b_pass_iter;
>                       
>                       for(b_rlay.passes.begin(b_pass_iter); b_pass_iter != 
> b_rlay.passes.end(); ++b_pass_iter) {
>
> Modified: trunk/blender/intern/cycles/device/device.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/device/device.cpp     2012-01-26 17:11:43 UTC 
> (rev 43733)
> +++ trunk/blender/intern/cycles/device/device.cpp     2012-01-26 19:07:01 UTC 
> (rev 43734)
> @@ -183,6 +183,9 @@
>                       return NULL;
>       }
>
> +     if(device)
> +             device->info = info;
> +
>       return device;
>   }
>
>
> Modified: trunk/blender/intern/cycles/device/device.h
> ===================================================================
> --- trunk/blender/intern/cycles/device/device.h       2012-01-26 17:11:43 UTC 
> (rev 43733)
> +++ trunk/blender/intern/cycles/device/device.h       2012-01-26 19:07:01 UTC 
> (rev 43734)
> @@ -51,6 +51,7 @@
>       string id;
>       int num;
>       bool display_device;
> +     bool advanced_shading;
>       vector<DeviceInfo>  multi_devices;
>
>       DeviceInfo()
> @@ -59,6 +60,7 @@
>               id = "CPU";
>               num = 0;
>               display_device = false;
> +             advanced_shading = true;
>       }
>   };
>
> @@ -101,10 +103,8 @@
>   public:
>       virtual ~Device() {}
>
> -     virtual bool support_full_kernel() = 0;
> -
>       /* info */
> -     virtual string description() = 0;
> +     DeviceInfo info;
>       virtual const string&  error_message() { return error_msg; }
>
>       /* regular memory */
>
> Modified: trunk/blender/intern/cycles/device/device_cpu.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/device/device_cpu.cpp 2012-01-26 17:11:43 UTC 
> (rev 43733)
> +++ trunk/blender/intern/cycles/device/device_cpu.cpp 2012-01-26 19:07:01 UTC 
> (rev 43734)
> @@ -72,16 +72,11 @@
>               kernel_globals_free(kg);
>       }
>
> -     bool support_full_kernel()
> +     bool support_advanced_shading()
>       {
>               return true;
>       }
>
> -     string description()
> -     {
> -             return system_cpu_brand_string();
> -     }
> -
>       void mem_alloc(device_memory&  mem, MemoryType type)
>       {
>               mem.device_pointer = mem.data_pointer;
> @@ -271,6 +266,7 @@
>       info.description = system_cpu_brand_string();
>       info.id = "CPU";
>       info.num = 0;
> +     info.advanced_shading = true;
>
>       devices.insert(devices.begin(), info);
>   }
>
> Modified: trunk/blender/intern/cycles/device/device_cuda.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/device/device_cuda.cpp        2012-01-26 
> 17:11:43 UTC (rev 43733)
> +++ trunk/blender/intern/cycles/device/device_cuda.cpp        2012-01-26 
> 19:07:01 UTC (rev 43734)
> @@ -194,26 +194,6 @@
>               cuda_assert(cuCtxDetach(cuContext))
>       }
>
> -     bool support_full_kernel()
> -     {
> -             int major, minor;
> -             cuDeviceComputeCapability(&major,&minor, cuDevId);
> -
> -             return (major>= 2);
> -     }
> -
> -     string description()
> -     {
> -             /* print device information */
> -             char deviceName[256];
> -
> -             cuda_push_context();
> -             cuDeviceGetName(deviceName, 256, cuDevId);
> -             cuda_pop_context();
> -
> -             return string("CUDA ") + deviceName;
> -     }
> -
>       bool support_device(bool experimental)
>       {
>               if(!experimental) {
> @@ -881,6 +861,10 @@
>               info.id = string_printf("CUDA_%d", num);
>               info.num = num;
>
> +             int major, minor;
> +             cuDeviceComputeCapability(&major,&minor, num);
> +             info.advanced_shading = (major>= 2);
> +
>               /* if device has a kernel timeout, assume it is used for 
> display */
>               if(cuDeviceGetAttribute(&attr, 
> CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT, num) == CUDA_SUCCESS&&  attr == 1) {
>                       info.display_device = true;
>
> Modified: trunk/blender/intern/cycles/device/device_multi.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/device/device_multi.cpp       2012-01-26 
> 17:11:43 UTC (rev 43733)
> +++ trunk/blender/intern/cycles/device/device_multi.cpp       2012-01-26 
> 19:07:01 UTC (rev 43734)
> @@ -76,16 +76,6 @@
>                       delete sub.device;
>       }
>
> -     bool support_full_kernel()
> -     {
> -             foreach(SubDevice&  sub, devices) {
> -                     if(!sub.device->support_full_kernel())
> -                             return false;
> -             }
> -
> -             return true;
> -     }
> -
>       const string&  error_message()
>       {
>               foreach(SubDevice&  sub, devices) {
> @@ -99,38 +89,6 @@
>               return error_msg;
>       }
>
> -     string description()
> -     {
> -             /* create map to find duplicate descriptions */
> -             map<string, int>  dupli_map;
> -             map<string, int>::iterator dt;
> -
> -             foreach(SubDevice&  sub, devices) {
> -                     string key = sub.device->description();
> -
> -                     if(dupli_map.find(key) == dupli_map.end())
> -                             dupli_map[key] = 1;
> -                     else
> -                             dupli_map[key]++;
> -             }
> -
> -             /* generate string */
> -             stringstream desc;
> -             bool first = true;
> -
> -             for(dt = dupli_map.begin(); dt != dupli_map.end(); dt++) {
> -                     if(!first) desc<<  ", ";
> -                     first = false;
> -
> -                     if(dt->second>  1)
> -                             desc<<  dt->second<<  "x "<<  dt->first;
> -                     else
> -                             desc<<  dt->first;
> -             }
> -
> -             return desc.str();
> -     }
> -
>       bool load_kernels(bool experimental)
>       {
>               foreach(SubDevice&  sub, devices)
> @@ -344,6 +302,8 @@
>       map<string, int>::iterator dt;
>       int num_added = 0, num_display = 0;
>
> +     info.advanced_shading = true;
> +
>       foreach(DeviceInfo&  subinfo, devices) {
>               if(subinfo.type == type) {
>                       if(subinfo.display_device) {
> @@ -363,6 +323,8 @@
>                       info.multi_devices.push_back(subinfo);
>                       if(subinfo.display_device)
>                               info.display_device = true;
> +                     if(!subinfo.advanced_shading)
> +                             info.advanced_shading = false;
>                       num_added++;
>               }
>       }
>
> Modified: trunk/blender/intern/cycles/device/device_network.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/device/device_network.cpp     2012-01-26 
> 17:11:43 UTC (rev 43733)
> +++ trunk/blender/intern/cycles/device/device_network.cpp     2012-01-26 
> 19:07:01 UTC (rev 43734)
> @@ -57,24 +57,6 @@
>       {
>       }
>
> -     bool support_full_kernel()
> -     {
> -             return false;
> -     }
> -
> -     string description()
> -     {
> -             RPCSend snd(socket, "description");
> -             snd.write();
> -
> -             RPCReceive rcv(socket);
> -             string desc_string;
> -
> -             *rcv.archive&  desc_string;
> -
> -             return desc_string + " (remote)";
> -     }
> -
>       void mem_alloc(device_memory&  mem, MemoryType type)
>       {
>   #if 0
>
> Modified: trunk/blender/intern/cycles/device/device_opencl.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/device/device_opencl.cpp      2012-01-26 
> 17:11:43 UTC (rev 43733)
> +++ trunk/blender/intern/cycles/device/device_opencl.cpp      2012-01-26 
> 19:07:01 UTC (rev 43734)
> @@ -453,20 +453,6 @@
>                       clReleaseContext(cxContext);
>       }
>
> -     bool support_full_kernel()
> -     {
> -             return false;
> -     }
> -
> -     string description()
> -     {
> -             char name[1024];
> -
> -             clGetDeviceInfo(cdDevice, CL_DEVICE_NAME, sizeof(name),&name, 
> NULL);
> -
> -             return string("OpenCL ") + name;
> -     }
> -
>       void mem_alloc(device_memory&  mem, MemoryType type)
>       {
>               size_t size = mem.memory_size();
> @@ -750,6 +736,7 @@
>               info.num = num;
>               /* we don't know if it's used for display, but assume it is */
>               info.display_device = true;
> +             info.advanced_shading = false;
>
>               devices.push_back(info);
>       }
>
> Modified: trunk/blender/intern/cycles/kernel/kernel_passes.h
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/kernel_passes.h        2012-01-26 
> 17:11:43 UTC (rev 43733)
> +++ trunk/blender/intern/cycles/kernel/kernel_passes.h        2012-01-26 
> 19:07:01 UTC (rev 43734)
> @@ -36,7 +36,7 @@
>       *buf = (sample == 0)? value: *buf + value;
>   }
>
> -__device void kernel_write_data_passes(KernelGlobals *kg, __global float 
> *buffer, PathRadiance *L,
> +__device_inline void kernel_write_data_passes(KernelGlobals *kg, __global 
> float *buffer, PathRadiance *L,
>       ShaderData *sd, int sample, int path_flag, float3 throughput)
>   {
>   #ifdef __PASSES__
> @@ -86,7 +86,7 @@
>   #endif
>   }
>
> -__device void kernel_write_light_passes(KernelGlobals *kg, __global float 
> *buffer, PathRadiance *L, int sample)
> +__device_inline void kernel_write_light_passes(KernelGlobals *kg, __global 
> float *buffer, PathRadiance *L, int sample)
>   {
>   #ifdef __PASSES__
>       int flag = kernel_data.film.pass_flag;
>
> Modified: trunk/blender/intern/cycles/kernel/kernel_types.h
> ===================================================================
> --- trunk/blender/intern/cycles/kernel/kernel_types.h 2012-01-26 17:11:43 UTC 
> (rev 43733)
> +++ trunk/blender/intern/cycles/kernel/kernel_types.h 2012-01-26 19:07:01 UTC 
> (rev 43734)
> @@ -185,6 +185,9 @@
>   struct PathRadiance {
>       int use_light_pass;
>
> +     float3 emission;
> +     float3 background;
> +
>       float3 indirect;
>       float3 direct_throughput;
>       float3 direct_emission;
> @@ -200,9 +203,6 @@
>       float3 indirect_diffuse;
>       float3 indirect_glossy;
>       float3 indirect_transmission;
> -
> -     float3 emission;
> -     float3 background;
>   };
>
>   struct BsdfEval {
>
> Modified: trunk/blender/intern/cycles/render/buffers.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/render/buffers.cpp    2012-01-26 17:11:43 UTC 
> (rev 43733)
> +++ trunk/blender/intern/cycles/render/buffers.cpp    2012-01-26 19:07:01 UTC 
> (rev 43734)
> @@ -130,7 +130,7 @@
>       if(!buffer.device_pointer)
>               return false;
>
> -     device->mem_copy_from(buffer, 0, params.width, params.height, 
> sizeof(float4));
> +     device->mem_copy_from(buffer, 0, params.width, params.height, 
> params.get_passes_size()*sizeof(float));
>
>       return true;
>   }
>
> Modified: trunk/blender/intern/cycles/render/svm.cpp
> ===================================================================
> --- trunk/blender/intern/cycles/render/svm.cpp        2012-01-26 17:11:43 UTC 
> (rev 43733)
> +++ trunk/blender/intern/cycles/render/svm.cpp        2012-01-26 19:07:01 UTC 
> (rev 43734)
> @@ -58,7 +58,7 @@
>       }
>       
>       bool sunsky_done = false;
> -     bool use_multi_closure = device->support_full_kernel();
> +     bool use_multi_closure = device->info.advanced_shading;
>
>       for(i = 0; i<  scene->shaders.size(); i++) {
>               Shader *shader = scene->shaders[i];
>
> _______________________________________________
> Bf-blender-cvs mailing list
> [email protected]
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs


-- 
Thomas Dinges
Blender Developer, Artist and Musician

www.dingto.org

_______________________________________________
Bf-committers mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to