[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46604] trunk/blender/intern/cycles: Cycles: OpenCL image texture support, fix an attribute node issue and refactor

Brecht Van Lommel brechtvanlommel at pandora.be
Sun May 13 14:32:45 CEST 2012


Revision: 46604
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46604
Author:   blendix
Date:     2012-05-13 12:32:44 +0000 (Sun, 13 May 2012)
Log Message:
-----------
Cycles: OpenCL image texture support, fix an attribute node issue and refactor
feature enabling #defines a bit.

Modified Paths:
--------------
    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_opencl.cpp
    trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h
    trunk/blender/intern/cycles/kernel/kernel_compat_cuda.h
    trunk/blender/intern/cycles/kernel/kernel_light.h
    trunk/blender/intern/cycles/kernel/kernel_textures.h
    trunk/blender/intern/cycles/kernel/kernel_types.h
    trunk/blender/intern/cycles/kernel/svm/svm.h
    trunk/blender/intern/cycles/kernel/svm/svm_attribute.h
    trunk/blender/intern/cycles/kernel/svm/svm_image.h
    trunk/blender/intern/cycles/render/image.cpp
    trunk/blender/intern/cycles/render/image.h
    trunk/blender/intern/cycles/render/mesh.cpp
    trunk/blender/intern/cycles/render/scene.cpp
    trunk/blender/intern/cycles/render/scene.h
    trunk/blender/intern/cycles/util/util_math.h

Modified: trunk/blender/intern/cycles/device/device.h
===================================================================
--- trunk/blender/intern/cycles/device/device.h	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device.h	2012-05-13 12:32:44 UTC (rev 46604)
@@ -53,6 +53,7 @@
 	int num;
 	bool display_device;
 	bool advanced_shading;
+	bool pack_images;
 	vector<DeviceInfo> multi_devices;
 
 	DeviceInfo()
@@ -62,6 +63,7 @@
 		num = 0;
 		display_device = false;
 		advanced_shading = true;
+		pack_images = false;
 	}
 };
 

Modified: trunk/blender/intern/cycles/device/device_cpu.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cpu.cpp	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device_cpu.cpp	2012-05-13 12:32:44 UTC (rev 46604)
@@ -260,6 +260,7 @@
 	info.id = "CPU";
 	info.num = 0;
 	info.advanced_shading = true;
+	info.pack_images = false;
 
 	devices.insert(devices.begin(), info);
 }

Modified: trunk/blender/intern/cycles/device/device_cuda.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cuda.cpp	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device_cuda.cpp	2012-05-13 12:32:44 UTC (rev 46604)
@@ -877,6 +877,7 @@
 		int major, minor;
 		cuDeviceComputeCapability(&major, &minor, num);
 		info.advanced_shading = (major >= 2);
+		info.pack_images = false;
 
 		/* 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) {

Modified: trunk/blender/intern/cycles/device/device_multi.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_multi.cpp	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device_multi.cpp	2012-05-13 12:32:44 UTC (rev 46604)
@@ -304,6 +304,7 @@
 	int num_added = 0, num_display = 0;
 
 	info.advanced_shading = with_advanced_shading;
+	info.pack_images = false;
 
 	foreach(DeviceInfo& subinfo, devices) {
 		if(subinfo.type == type) {
@@ -326,6 +327,7 @@
 			info.multi_devices.push_back(subinfo);
 			if(subinfo.display_device)
 				info.display_device = true;
+			info.pack_images = info.pack_images || subinfo.pack_images;
 			num_added++;
 		}
 	}

Modified: trunk/blender/intern/cycles/device/device_opencl.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_opencl.cpp	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/device/device_opencl.cpp	2012-05-13 12:32:44 UTC (rev 46604)
@@ -212,7 +212,7 @@
 	{
 		char version[256];
 
-		int major, minor, req_major = 1, req_minor = 1;
+		int major, minor, req_major = 1, req_minor = 0;
 
 		clGetPlatformInfo(cpPlatform, CL_PLATFORM_VERSION, sizeof(version), &version, NULL);
 
@@ -300,15 +300,15 @@
 		
 		/* Multi Closure for nVidia cards */
 		if(platform_name == "NVIDIA CUDA")
-			build_options += "-D__KERNEL_SHADING__ -D__MULTI_CLOSURE__ -cl-nv-maxrregcount=24 -cl-nv-verbose ";
+			build_options += "-D__KERNEL_SHADING__ -D__KERNEL_OPENCL_NVIDIA__ -cl-nv-maxrregcount=24 -cl-nv-verbose ";
 			
 		/* No Float3 for Apple */
 		else if(platform_name == "Apple")
-			build_options += "-D__CL_NO_FLOAT3__ ";
+			build_options += "-D__CL_NO_FLOAT3__ -D__KERNEL_OPENCL_APPLE__ ";
 			
 		/* Basic shading for AMD cards (non Apple) */
 		else if(platform_name == "AMD Accelerated Parallel Processing")
-			build_options += "-D__KERNEL_SHADING__ -D__CL_NO_FLOAT3__ ";
+			build_options += "-D__CL_NO_FLOAT3__ -D__KERNEL_OPENCL_AMD__ ";
 
 		return build_options;
 	}
@@ -743,6 +743,7 @@
 		/* we don't know if it's used for display, but assume it is */
 		info.display_device = true;
 		info.advanced_shading = false;
+		info.pack_images = true;
 
 		devices.push_back(info);
 	}

Modified: trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_compat_cpu.h	2012-05-13 12:32:44 UTC (rev 46604)
@@ -146,6 +146,7 @@
 typedef texture<uint> texture_uint;
 typedef texture<int> texture_int;
 typedef texture<uint4> texture_uint4;
+typedef texture<uchar4> texture_uchar4;
 typedef texture_image<float4> texture_image_float4;
 typedef texture_image<uchar4> texture_image_uchar4;
 

Modified: trunk/blender/intern/cycles/kernel/kernel_compat_cuda.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_compat_cuda.h	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_compat_cuda.h	2012-05-13 12:32:44 UTC (rev 46604)
@@ -50,6 +50,7 @@
 typedef texture<uint, 1> texture_uint;
 typedef texture<int, 1> texture_int;
 typedef texture<uint4, 1> texture_uint4;
+typedef texture<uchar4, 1> texture_uchar4;
 typedef texture<float4, 2> texture_image_float4;
 typedef texture<uchar4, 2, cudaReadModeNormalizedFloat> texture_image_uchar4;
 

Modified: trunk/blender/intern/cycles/kernel/kernel_light.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_light.h	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_light.h	2012-05-13 12:32:44 UTC (rev 46604)
@@ -59,6 +59,7 @@
 	return axisu*randu + axisv*randv;
 }
 
+#ifdef __BACKGROUND_MIS__
 __device float3 background_light_sample(KernelGlobals *kg, float randu, float randv, float *pdf)
 {
 	/* for the following, the CDF values are actually a pair of floats, with the
@@ -165,6 +166,7 @@
 
 	return pdf * kernel_data.integrator.pdf_lights;
 }
+#endif
 
 __device void regular_light_sample(KernelGlobals *kg, int point,
 	float randu, float randv, float3 P, LightSample *ls, float *pdf)

Modified: trunk/blender/intern/cycles/kernel/kernel_textures.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_textures.h	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_textures.h	2012-05-13 12:32:44 UTC (rev 46604)
@@ -7,7 +7,6 @@
 #define KERNEL_IMAGE_TEX(type, ttype, name)
 #endif
 
-
 /* bvh */
 KERNEL_TEX(float4, texture_float4, __bvh_nodes)
 KERNEL_TEX(float4, texture_float4, __tri_woop)
@@ -151,6 +150,10 @@
 KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_098)
 KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float_099)
 
+/* packed image (opencl) */
+KERNEL_TEX(uchar4, texture_uchar4, __tex_image_packed)
+KERNEL_TEX(uint4, texture_uint4, __tex_image_packed_info)
+
 #undef KERNEL_TEX
 #undef KERNEL_IMAGE_TEX
 

Modified: trunk/blender/intern/cycles/kernel/kernel_types.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_types.h	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/kernel_types.h	2012-05-13 12:32:44 UTC (rev 46604)
@@ -49,10 +49,32 @@
 #endif
 
 #ifdef __KERNEL_OPENCL__
-//#define __KERNEL_SHADING__
-//#define __KERNEL_ADV_SHADING__
+
+#ifdef __KERNEL_OPENCL_NVIDIA__
+#define __KERNEL_SHADING__
+#define __MULTI_CLOSURE__
 #endif
 
+#ifdef __KERNEL_OPENCL_APPLE__
+//#define __SVM__
+//#define __EMISSION__
+//#define __IMAGE_TEXTURES__
+//#define __HOLDOUT__
+//#define __PROCEDURAL_TEXTURES__
+//#define __EXTRA_NODES__
+#endif
+
+#ifdef __KERNEL_OPENCL_AMD__
+#define __SVM__
+#define __EMISSION__
+#define __IMAGE_TEXTURES__
+#define __HOLDOUT__
+#define __PROCEDURAL_TEXTURES__
+#define __EXTRA_NODES__
+#endif
+
+#endif
+
 /* kernel features */
 #define __SOBOL__
 #define __INSTANCING__
@@ -69,7 +91,9 @@
 #ifdef __KERNEL_SHADING__
 #define __SVM__
 #define __EMISSION__
-#define __TEXTURES__
+#define __PROCEDURAL_TEXTURES__
+#define __IMAGE_TEXTURES__
+#define __EXTRA_NODES__
 #define __HOLDOUT__
 #endif
 
@@ -85,7 +109,6 @@
 //#define __MULTI_LIGHT__
 //#define __OSL__
 //#define __SOBOL_FULL_SCREEN__
-//#define __MODIFY_TP__
 //#define __QBVH__
 
 /* Shader Evaluation */

Modified: trunk/blender/intern/cycles/kernel/svm/svm.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm.h	2012-05-13 11:14:43 UTC (rev 46603)
+++ trunk/blender/intern/cycles/kernel/svm/svm.h	2012-05-13 12:32:44 UTC (rev 46604)
@@ -216,13 +216,15 @@
 			case NODE_JUMP:
 				offset = node.y;
 				break;
-#ifdef __TEXTURES__
+#ifdef __IMAGE_TEXTURES__
 			case NODE_TEX_IMAGE:
 				svm_node_tex_image(kg, sd, stack, node);
 				break;
 			case NODE_TEX_ENVIRONMENT:
 				svm_node_tex_environment(kg, sd, stack, node);
 				break;
+#endif
+#ifdef __PROCEDURAL_TEXTURES__
 			case NODE_TEX_SKY:
 				svm_node_tex_sky(kg, sd, stack, node.y, node.z);
 				break;
@@ -254,6 +256,7 @@
 			case NODE_GEOMETRY:
 				svm_node_geometry(sd, stack, node.y, node.z);
 				break;
+#ifdef __EXTRA_NODES__
 			case NODE_GEOMETRY_BUMP_DX:
 				svm_node_geometry_bump_dx(sd, stack, node.y, node.z);
 				break;
@@ -263,6 +266,7 @@
 			case NODE_LIGHT_PATH:
 				svm_node_light_path(sd, stack, node.y, node.z, path_flag);
 				break;
+#endif
 			case NODE_CONVERT:
 				svm_node_convert(sd, stack, node.y, node.z, node.w);
 				break;
@@ -272,6 +276,7 @@
 			case NODE_VALUE_V:
 				svm_node_value_v(kg, sd, stack, node.y, &offset);
 				break;
+#ifdef __EXTRA_NODES__
 			case NODE_INVERT:
 				svm_node_invert(sd, stack, node.y, node.z, node.w);
 				break;
@@ -293,21 +298,25 @@
 			case NODE_HSV:
 				svm_node_hsv(kg, sd, stack, node.y, node.z, node.w, &offset);
 				break;
+#endif
 			case NODE_ATTR:
 				svm_node_attr(kg, sd, stack, node);
 				break;
+#ifdef __EXTRA_NODES__
 			case NODE_ATTR_BUMP_DX:
 				svm_node_attr_bump_dx(kg, sd, stack, node);
 				break;
 			case NODE_ATTR_BUMP_DY:
 				svm_node_attr_bump_dy(kg, sd, stack, node);
 				break;
+#endif
 			case NODE_FRESNEL:
 				svm_node_fresnel(sd, stack, node.y, node.z, node.w);
 				break;
 			case NODE_LAYER_WEIGHT:
 				svm_node_layer_weight(sd, stack, node);
 				break;
+#ifdef __EXTRA_NODES__
 			case NODE_SET_DISPLACEMENT:
 				svm_node_set_displacement(sd, stack, node.y);
 				break;
@@ -323,6 +332,7 @@
 			case NODE_NORMAL:
 				svm_node_normal(kg, sd, stack, node.y, node.z, node.w, &offset);
 				break;
+#endif
 			case NODE_MAPPING:

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list