[Bf-blender-cvs] [13f7a3e] cycles_kernel_split: Refactor : Move some build option setting into load_kernels for split_kernel

varunsundar08 noreply at git.blender.org
Thu Apr 30 23:25:04 CEST 2015


Commit: 13f7a3e4da9582fbd6734b257dcaf794547b643b
Author: varunsundar08
Date:   Tue Apr 28 12:03:43 2015 +0530
Branches: cycles_kernel_split
https://developer.blender.org/rB13f7a3e4da9582fbd6734b257dcaf794547b643b

Refactor : Move some build option setting into load_kernels for split_kernel

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

M	intern/cycles/device/device_opencl.cpp

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

diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index af0cf62..b629693 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -64,11 +64,6 @@ CCL_NAMESPACE_BEGIN
  */
 #define DATA_ALLOCATION_MEM_FACTOR 5000000 //5MB
 
-/* Additional kernel build options regarding optimization */
-string opt;
-/* Additional kernel build option denoting compute device type */
-string compute_device_type_build_option;
-
 /* Shader data variable count - To calculate ShaderData size */
 #define SD_NUM_FLOAT3 5
 #ifdef __DPDU__
@@ -125,13 +120,7 @@ static bool opencl_kernel_use_advanced_shading(const string& platform)
 
 static string opencl_kernel_build_options(const string& platform, const string *debug_src = NULL)
 {
-#ifdef __SPLIT_KERNEL__
-	string build_options = " -cl-fast-relaxed-math ";
-	build_options.append(opt);
-	build_options.append(compute_device_type_build_option);
-#else
 	string build_options = " -cl-fast-relaxed-math ";
-#endif
 
 	if(platform == "NVIDIA CUDA")
 		build_options += "-D__KERNEL_OPENCL_NVIDIA__ -cl-nv-maxrregcount=32 -cl-nv-verbose ";
@@ -150,15 +139,13 @@ static string opencl_kernel_build_options(const string& platform, const string *
 			build_options += "-g -s \"" + *debug_src + "\"";
 	}
 
-#ifndef __SPLIT_KERNEL__
-	/* kernel debug currently not supported in __SPLIT_KERNEL__ */
+	/* TODO : support KERNEL_DEBUG for split kernel */
 	if(opencl_kernel_use_debug())
 		build_options += "-D__KERNEL_OPENCL_DEBUG__ ";
 
 #ifdef WITH_CYCLES_DEBUG
 	build_options += "-D__KERNEL_DEBUG__ ";
 #endif
-#endif
 
 	return build_options;
 }
@@ -2233,7 +2220,10 @@ public:
 		/* TODO : Use OpenCLCahce with spit kernel */
 
 		string svm_build_options = "";
-		opt = "";
+		string max_closure_build_option = "";
+		string compute_device_type_build_option = "";
+
+		/* Set svm_build_options */
 		/* Enable only the macros related to the scene */
 		for (int node_iter = NODE_END; node_iter <= NODE_UVMAP; node_iter++) {
 			if (node_iter == NODE_GEOMETRY_DUPLI || node_iter == NODE_UVMAP) { continue; }
@@ -2264,11 +2254,12 @@ public:
 			}
 		}
 
+		/* Set max closure build option */
 #ifdef __MULTI_CLOSURE__
-		opt += string_printf("-DMAX_CLOSURE=%d ", clos_max);
+		max_closure_build_option += string_printf("-DMAX_CLOSURE=%d ", clos_max);
 #endif
 
-		compute_device_type_build_option = "";
+		/* Set compute device build option */
 		cl_device_type device_type;
 		ciErr = clGetDeviceInfo(cdDevice, CL_DEVICE_TYPE, sizeof(cl_device_type), &device_type, NULL);
 		assert(ciErr == CL_SUCCESS);
@@ -2284,83 +2275,96 @@ public:
 		string clbin;
 
 		kernel_init_source = "#include \"kernel_DataInit.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash("");
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_DataInit.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&dataInit_program, kernel_path, "dataInit", device_md5, kernel_init_source, clbin, "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&dataInit_program, kernel_path, "dataInit", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 
 		kernel_init_source = "#include \"kernel_SceneIntersect.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash("");
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_SceneIntersect.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&sceneIntersect_program, kernel_path, "SceneIntersect", device_md5, kernel_init_source, clbin, "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&sceneIntersect_program, kernel_path, "SceneIntersect", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 
 		kernel_init_source = "#include \"kernel_LampEmission.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash(svm_build_options);
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option + svm_build_options;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_LampEmission.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&lampEmission_program, kernel_path, "LampEmission", device_md5, kernel_init_source, clbin, svm_build_options + "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&lampEmission_program, kernel_path, "LampEmission", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 
 		kernel_init_source = "#include \"kernel_QueueEnqueue.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash("");
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_QueueEnqueue.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&QueueEnqueue_program, kernel_path, "Queue", device_md5, kernel_init_source, clbin, "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&QueueEnqueue_program, kernel_path, "Queue", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 
 		kernel_init_source = "#include \"kernel_Background_BufferUpdate.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash(svm_build_options);
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option + compute_device_type_build_option + svm_build_options;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_Background_BufferUpdate.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&background_BufferUpdate_program, kernel_path, "Background", device_md5, kernel_init_source, clbin, svm_build_options + "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&background_BufferUpdate_program, kernel_path, "Background", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 
 		kernel_init_source = "#include \"kernel_ShaderEval.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash(svm_build_options);
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option + svm_build_options;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_ShaderEval.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&shaderEval_program, kernel_path, "shaderEval", device_md5, kernel_init_source, clbin, svm_build_options + "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&shaderEval_program, kernel_path, "shaderEval", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 
 		kernel_init_source = "#include \"kernel_Holdout_Emission_Blurring_Pathtermination_AO.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash("");
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option + compute_device_type_build_option;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_Holdout_Emission_Blurring_Pathtermination_AO.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&holdout_emission_blurring_termination_ao_program, kernel_path, "ao", device_md5, kernel_init_source, clbin, "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&holdout_emission_blurring_termination_ao_program, kernel_path, "ao", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 #ifdef __SUBSURFACE__
 		kernel_init_source = "#include \"kernel_Subsurface.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash("");
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_Subsurface.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&subsurface_program, kernel_path, kernel_md5, device_md5, kernel_init_source, clbin, "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&subsurface_program, kernel_path, kernel_md5, device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 #endif
 		kernel_init_source = "#include \"kernel_DirectLighting.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash(svm_build_options);
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option + compute_device_type_build_option + svm_build_options;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_DirectLighting.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&directLighting_program, kernel_path, "directLighting", device_md5, kernel_init_source, clbin, svm_build_options + "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&directLighting_program, kernel_path, "directLighting", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 
 		kernel_init_source = "#include \"kernel_ShadowBlocked.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash(svm_build_options);
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option + svm_build_options;
+		device_md5 = device_md5_hash(custom_kernel_build_options);
 		clbin = string_printf("cycles_kernel_%s_%s_ShadowBlocked.clbin", device_md5.c_str(), kernel_md5.c_str());
-		if (!load_split_kernel(&shadowBlocked_program, kernel_path, "shadow", device_md5, kernel_init_source, clbin, svm_build_options + "-D__SPLIT_KERNEL__ "))
+		if (!load_split_kernel(&shadowBlocked_program, kernel_path, "shadow", device_md5, kernel_init_source, clbin, custom_kernel_build_options))
 			return false;
 
 		kernel_init_source = "#include \"kernel_NextIterationSetUp.cl\" // " + kernel_md5 + "\n";
-		device_md5 = device_md5_hash("");
+		custom_kernel_build_options = "-D__SPLIT_KERNEL__ " + max_closure_build_option + compute_device_

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list