diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-06-01 13:26:36 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-06-01 17:49:52 +0300 |
commit | 4d8cf1329df3cf545acbe369e3d7c39428cf91d2 (patch) | |
tree | 40e345d43babf2b61594d53f0d1fb5bf8834e025 /intern | |
parent | 36ef6d1532293a29701e658590c76f06af1f00a8 (diff) |
Cycles: Add bump feature for selective nodes compilation
For now it is unused in the kernel, actual usage will come with
the next commits.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/kernel/svm/svm_types.h | 7 | ||||
-rw-r--r-- | intern/cycles/render/graph.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/shader.cpp | 6 |
3 files changed, 13 insertions, 2 deletions
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h index 8bf6c647e15..11dc14f72e0 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 1a17909bddc..93341b56d99 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 667279360c3..2f8eabbf0a9 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; + } } } |