[Bf-committers] Antw.: [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.

Thomas Dinges blender at dingto.org
Thu Jan 26 21:36:54 CET 2012


Only affects background render, 3D view works.

Sent from my mobile device

----- Reply message -----
Von: "Thomas Dinges" <blender at dingto.org>
An: <bf-committers at blender.org>
Betreff: [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.
Datum: Do., Jan. 26, 2012 20:43


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