[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43734] trunk/blender/intern/cycles: Cycles: render passes for CUDA cards with compute model >= 2.x.

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Jan 27 14:59:31 CET 2012


Thanks for pointing out, committed a fix, should work now.

Brecht.

On Thu, Jan 26, 2012 at 8:43 PM, Thomas Dinges <blender at dingto.org> wrote:
> 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
>> Bf-blender-cvs at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
>
> --
> Thomas Dinges
> Blender Developer, Artist and Musician
>
> www.dingto.org
>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers


More information about the Bf-committers mailing list