diff options
-rw-r--r-- | intern/cycles/render/graph.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/render/osl.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/render/svm.cpp | 6 |
3 files changed, 7 insertions, 3 deletions
diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp index 3e417d13d4d..e888cb37137 100644 --- a/intern/cycles/render/graph.cpp +++ b/intern/cycles/render/graph.cpp @@ -306,7 +306,7 @@ void ShaderGraph::find_dependencies(ShaderNodeSet& dependencies, ShaderInput *in /* find all nodes that this input depends on directly and indirectly */ ShaderNode *node = (input->link)? input->link->parent: NULL; - if(node) { + if(node != NULL && dependencies.find(node) == dependencies.end()) { foreach(ShaderInput *in, node->inputs) find_dependencies(dependencies, in); diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp index 4306931e683..4933ed6c613 100644 --- a/intern/cycles/render/osl.cpp +++ b/intern/cycles/render/osl.cpp @@ -702,7 +702,7 @@ void OSLCompiler::find_dependencies(ShaderNodeSet& dependencies, ShaderInput *in { ShaderNode *node = (input->link)? input->link->parent: NULL; - if(node) { + if(node != NULL && dependencies.find(node) == dependencies.end()) { foreach(ShaderInput *in, node->inputs) if(!node_skip_input(node, in)) find_dependencies(dependencies, in); diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index fa22287d342..a4c7e7ef969 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -373,7 +373,11 @@ void SVMCompiler::find_dependencies(ShaderNodeSet& dependencies, { ShaderNode *node = (input->link)? input->link->parent: NULL; - if(node && done.find(node) == done.end() && node != skip_node) { + if(node != NULL && + done.find(node) == done.end() && + node != skip_node && + dependencies.find(node) == dependencies.end()) + { foreach(ShaderInput *in, node->inputs) if(!node_skip_input(node, in)) find_dependencies(dependencies, done, in, skip_node); |