[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