diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-07-11 16:19:14 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-07-11 16:21:52 +0400 |
commit | 594ff72bfe597b42bfc11e062649176fec00be0c (patch) | |
tree | 5d1b8632c5999da0cffbf0db36d7ca2b9bf2e42d /intern/cycles/render/svm.h | |
parent | 4633e655dc59b68d622e3319102d5050245a22eb (diff) |
Fix T41023: Specific material cause bad render result, different on CPU/GPU
Issue was caused by too much aggressive optimization, which skipped execution
of some nodes leading to an uninitialized memory read in SVM stack.
Diffstat (limited to 'intern/cycles/render/svm.h')
-rw-r--r-- | intern/cycles/render/svm.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/intern/cycles/render/svm.h b/intern/cycles/render/svm.h index 45aa4d26926..c1dd96e4d80 100644 --- a/intern/cycles/render/svm.h +++ b/intern/cycles/render/svm.h @@ -123,15 +123,21 @@ protected: /* single closure */ void find_dependencies(set<ShaderNode*>& dependencies, - const set<ShaderNode*>& done, ShaderInput *input); + const set<ShaderNode*>& done, + ShaderInput *input, + ShaderNode *skip_node = NULL); void generate_node(ShaderNode *node, set<ShaderNode*>& done); void generate_closure_node(ShaderNode *node, set<ShaderNode*>& done); - void generated_shared_closure_nodes(ShaderNode *node, set<ShaderNode*>& done, + void generated_shared_closure_nodes(ShaderNode *root_node, ShaderNode *node, + set<ShaderNode*>& done, set<ShaderNode*>& closure_done, const set<ShaderNode*>& shared); void generate_svm_nodes(const set<ShaderNode*>& nodes, set<ShaderNode*>& done); /* multi closure */ - void generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done, set<ShaderNode*>& closure_done); + void generate_multi_closure(ShaderNode *root_node, + ShaderNode *node, + set<ShaderNode*>& done, + set<ShaderNode*>& closure_done); /* compile */ void compile_type(Shader *shader, ShaderGraph *graph, ShaderType type); |