[Bf-blender-cvs] [734beb6] cycles_kernel_split: Cycles kernel split: Fix broken logic around multi-closure in device_opencl

Sergey Sharybin noreply at git.blender.org
Thu May 7 15:54:04 CEST 2015


Commit: 734beb68008790adbea10bd079cf2d85ae7fc109
Author: Sergey Sharybin
Date:   Thu May 7 18:24:41 2015 +0500
Branches: cycles_kernel_split
https://developer.blender.org/rB734beb68008790adbea10bd079cf2d85ae7fc109

Cycles kernel split: Fix broken logic around multi-closure in device_opencl

The code actually acted in a way when multi-closure was always enabled, this is
due to kernel_types.h header by default using CPU settings.

This caused re-definition of maximum number of closures.

Now the code acts in a way so desired number of closure is passed via cflags
and then kernel decided whether to use it or ignore.

It's possible that some OpenCL platform still over-allocates, but that's not
caused by this change and needs to be addressed separately.

===================================================================

M	intern/cycles/device/device_opencl.cpp
M	intern/cycles/kernel/kernel_types.h

===================================================================

diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index 3e89192..be62c08 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -1814,10 +1814,9 @@ public:
 		/* Set svm_build_options */
 		svm_build_options += " -D__NODES_MAX_GROUP__=" + string_printf("%d", requested_features.max_nodes_group);
 		svm_build_options += " -D__NODES_FEATURES__=" + string_printf("%d", requested_features.nodes_features);
+
 		/* Set max closure build option */
-#ifdef __MULTI_CLOSURE__
-		max_closure_build_option += string_printf("-DMAX_CLOSURE=%d ", max_closure);
-#endif
+		max_closure_build_option += string_printf("-D__MAX_CLOSURE__=%d ", max_closure);
 
 		/* Set compute device build option */
 		cl_device_type device_type;
@@ -2338,12 +2337,10 @@ public:
 		/* Allocate all required global memory once */
 		if(first_tile) {
 			size_t num_global_elements = max_render_feasible_tile_size.x * max_render_feasible_tile_size.y;
-
-#ifdef __MULTI_CLOSURE__
+			/* TODO(sergey): This will actually over-allocate if
+			 * particular kernel does not support multiclosure.
+			 */
 			size_t ShaderClosure_size = get_shader_closure_size(current_clos_max);
-#else
-			size_t ShaderClosure_size = get_shader_closure_size(MAX_CLOSURE);
-#endif
 
 #ifdef __WORK_STEALING__
 			/* Calculate max groups */
@@ -2916,11 +2913,11 @@ public:
 		size_t shader_closure_size = 0;
 		size_t shaderdata_volume = 0;
 
-#ifdef __MULTI_CLOSURE__
 		shader_closure_size = get_shader_closure_size(current_clos_max);
-#else
-		shader_closure_size = get_shader_closure_size(MAX_CLOSURE);
-#endif
+
+		/* TODO(sergey): This will actually over-allocate if
+		 * particular kernel does not support multiclosure.
+		 */
 		shaderdata_volume = get_shader_data_size(shader_closure_size);
 
 		size_t retval = rng_size + throughput_size + L_transparent_size + rayState_size + work_element_size
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index ab20127..2c0a207 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -555,9 +555,11 @@ typedef enum AttributeStandard {
 /* Closure data */
 
 #ifdef __MULTI_CLOSURE__
-#ifndef MAX_CLOSURE
-#define MAX_CLOSURE 64
-#endif
+#  ifndef __MAX_CLOSURE__
+#     define MAX_CLOSURE 64
+#  else
+#    define MAX_CLOSURE __MAX_CLOSURE__
+#  endif
 #else
 #define MAX_CLOSURE 1
 #endif




More information about the Bf-blender-cvs mailing list