diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-10-05 00:12:16 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-10-05 00:12:16 +0400 |
commit | 282f98a84dc7d454a36918b9b8b279aa127c4d3b (patch) | |
tree | 2f91ff3f8a27f13a60f334bc9fa3f7e1bbf3eec4 /intern/cycles/render/svm.cpp | |
parent | 79b4c0e600c2f2fe539a0602bf752b62210815d6 (diff) |
Fix #31806: cycles crash rendering a particular node setup with multiple mix/add
shader nodes.
Diffstat (limited to 'intern/cycles/render/svm.cpp')
-rw-r--r-- | intern/cycles/render/svm.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index 844ce01569f..da287a10199 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -274,6 +274,17 @@ void SVMCompiler::stack_clear_users(ShaderNode *node, set<ShaderNode*>& done) foreach(ShaderInput *in, output->links) in->stack_offset = SVM_STACK_INVALID; + + /* unmark any nodes that have no more valid outputs, see [#31806] */ + if(done.find(output->parent) != done.end()) { + all_done = true; + foreach(ShaderOutput *pout, output->parent->outputs) + if(pout->stack_offset != SVM_STACK_INVALID) + all_done = false; + + if(all_done) + done.erase(output->parent); + } } } } |