[Bf-blender-cvs] [4d8cf13] master: Cycles: Add bump feature for selective nodes compilation

Sergey Sharybin noreply at git.blender.org
Mon Jun 1 16:50:08 CEST 2015


Commit: 4d8cf1329df3cf545acbe369e3d7c39428cf91d2
Author: Sergey Sharybin
Date:   Mon Jun 1 15:26:36 2015 +0500
Branches: master
https://developer.blender.org/rB4d8cf1329df3cf545acbe369e3d7c39428cf91d2

Cycles: Add bump feature for selective nodes compilation

For now it is unused in the kernel, actual usage will come with
the next commits.

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

M	intern/cycles/kernel/svm/svm_types.h
M	intern/cycles/render/graph.h
M	intern/cycles/render/shader.cpp

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

diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index 8bf6c64..11dc14f 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -43,7 +43,12 @@ CCL_NAMESPACE_BEGIN
 
 #define NODE_FEATURE_VOLUME     (1 << 0)
 #define NODE_FEATURE_HAIR       (1 << 1)
-#define NODE_FEATURE_ALL        (NODE_FEATURE_VOLUME|NODE_FEATURE_HAIR)
+#define NODE_FEATURE_BUMP       (1 << 2)
+/* TODO(sergey): Consider using something like ((uint)(-1)).
+ * Need to ceck carefully operand types around usage of this
+ * define first.
+ */
+#define NODE_FEATURE_ALL        (NODE_FEATURE_VOLUME|NODE_FEATURE_HAIR|NODE_FEATURE_BUMP)
 
 typedef enum NodeType {
 	NODE_END = 0,
diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h
index 1a17909..93341b5 100644
--- a/intern/cycles/render/graph.h
+++ b/intern/cycles/render/graph.h
@@ -225,7 +225,7 @@ public:
 	 * so it's possible to disable huge nodes inside of the required
 	 * nodes group.
 	 */
-	virtual int get_feature() { return 0; }
+	virtual int get_feature() { return bump == SHADER_BUMP_NONE ? 0 : NODE_FEATURE_BUMP; }
 };
 
 
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 6672793..2f8eabb 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -487,6 +487,7 @@ void ShaderManager::get_requested_features(Scene *scene, int& max_group, int& fe
 	features = 0;
 	for(int i = 0; i < scene->shaders.size(); i++) {
 		Shader *shader = scene->shaders[i];
+		/* Gather requested features from all the nodes from the graph nodes. */
 		foreach(ShaderNode *node, shader->graph->nodes) {
 			max_group = min(max_group, node->get_group());
 			features |= node->get_feature();
@@ -497,6 +498,11 @@ void ShaderManager::get_requested_features(Scene *scene, int& max_group, int& fe
 				}
 			}
 		}
+		/* Gather requested features from the graph itself. */
+		ShaderNode *output_node = shader->graph->output();
+		if(output_node->input("Displacement")->link != NULL) {
+			features |= NODE_FEATURE_BUMP;
+		}
 	}
 }




More information about the Bf-blender-cvs mailing list