[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