[Bf-blender-cvs] [3e364ae] cycles_kernel_split: Bypass selective-compilation-of-svm-nodes for viewport

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


Commit: 3e364aec34a630a6304d56dbe242fd57187169d9
Author: varunsundar08
Date:   Tue Apr 28 18:38:55 2015 +0530
Branches: cycles_kernel_split
https://developer.blender.org/rB3e364aec34a630a6304d56dbe242fd57187169d9

Bypass selective-compilation-of-svm-nodes for viewport

  By-passing "selective-compilation-of-svm-nodes" optimization
  will limit kernel re-compilations during viewport render

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

M	intern/cycles/device/device_opencl.cpp
M	intern/cycles/render/session.cpp
M	intern/cycles/render/svm.cpp

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

diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index 793781e..190c1b1 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -2206,6 +2206,22 @@ public:
 
 		/* TODO : Use OpenCLCahce with spit kernel */
 
+		/* if it is an interactive render; we ceil clos_max value to a multiple of 5 in order
+		* to limit re-compilations
+		*/
+		if (!background) {
+			/* clos_max value can't be 0  */
+			clos_max = (clos_max == 0) ? 1 : clos_max;
+			clos_max = (((clos_max - 1) / 5) + 1) * 5;
+			/* clos_max value can't be greater than MAX_CLOSURE */
+			clos_max = (clos_max > MAX_CLOSURE) ? MAX_CLOSURE : clos_max;
+
+			if (current_clos_max == clos_max) {
+				/* present kernels have been created with the same closure count build option */
+				return true;
+			}
+		}
+
 		string svm_build_options = "";
 		string max_closure_build_option = "";
 		string compute_device_type_build_option = "";
@@ -2225,22 +2241,6 @@ public:
 		}
 		svm_build_options += " ";
 
-		/* if it is an interactive render; we ceil clos_max value to a multiple of 5 in order
-		* to limit re-compilations
-		*/
-		if (!background) {
-			/* clos_max value can't be 0  */
-			clos_max = (clos_max == 0) ? 1 : clos_max;
-			clos_max = (((clos_max - 1) / 5) + 1) * 5;
-			/* clos_max value can't be greater than MAX_CLOSURE */
-			clos_max = (clos_max > MAX_CLOSURE) ? MAX_CLOSURE : clos_max;
-
-			if (current_clos_max == clos_max) {
-				/* present kernels have been created with the same closure count build option */
-				return true;
-			}
-		}
-
 		/* Set max closure build option */
 #ifdef __MULTI_CLOSURE__
 		max_closure_build_option += string_printf("-DMAX_CLOSURE=%d ", clos_max);
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index ea4e3ae..2eb8451 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -616,7 +616,7 @@ void Session::load_kernels()
 {
 	thread_scoped_lock scene_lock(scene->mutex);
 
-	if (!kernels_loaded || !device->get_background()) {
+	if (!kernels_loaded || (device->use_split_kernel && !device->get_background())) {
 		/* for split kernel, in case if interactive rendering, we
 		 * we need to check kernel-reload before doing path trace
 		 */
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index 7328394..bb8857e 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -81,14 +81,24 @@ void SVMShaderManager::device_update(Device *device, DeviceScene *dscene, Scene
 		compiler.compile(shader, svm_nodes, i);
 	}
 
-	/* Populate set of closure nodes associated with the scene */
-	/* Check if NODE_END is indeed the start of NodeType enum */
-	assert(NODE_END == 0);
-	for(int node_iter = 0; node_iter < svm_nodes.size(); node_iter++) {
-		int4 node = svm_nodes[node_iter];
-		if (node.x >= NODE_END && node.x <= NODE_UVMAP) {
-			/* if node.x is within start and end of NodeType insert node type into device->associated_closure_nodes */
-			device->closure_nodes.insert(node.x);
+	if (!device->get_background()) {
+		/* In case of interactive render, we skip selective compilation of svm nodes optimization */
+		/* Check if NODE_END is indeed the start of NodeType enum */
+		assert(NODE_END == 0);
+		for (int node_type_iter = NODE_END; node_type_iter <= NODE_UVMAP; node_type_iter++) {
+			device->closure_nodes.insert(node_type_iter);
+		}
+	}
+	else {
+		/* Populate set of closure nodes associated with the scene */
+		/* Check if NODE_END is indeed the start of NodeType enum */
+		assert(NODE_END == 0);
+		for(int node_iter = 0; node_iter < svm_nodes.size(); node_iter++) {
+			int4 node = svm_nodes[node_iter];
+			if (node.x >= NODE_END && node.x <= NODE_UVMAP) {
+				/* if node.x is within start and end of NodeType insert node type into device->associated_closure_nodes */
+				device->closure_nodes.insert(node.x);
+			}
 		}
 	}




More information about the Bf-blender-cvs mailing list