diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-09-21 15:54:28 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-09-21 15:54:28 +0400 |
commit | 508bfebf361be55601b1bdbb9267c47c53da4c00 (patch) | |
tree | 9cd4d460e9d6474ff4d3ff5bacfbc1cbe58608b9 /intern/cycles/render/svm.h | |
parent | a2c6db0b446cc3c8e54a0381e041056fe143472a (diff) |
Cycles: another bugfix for mix closure sampling + bump.
Diffstat (limited to 'intern/cycles/render/svm.h')
-rw-r--r-- | intern/cycles/render/svm.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/intern/cycles/render/svm.h b/intern/cycles/render/svm.h index 4c23e931e09..d66d3816068 100644 --- a/intern/cycles/render/svm.h +++ b/intern/cycles/render/svm.h @@ -104,6 +104,15 @@ protected: int users[SVM_STACK_SIZE]; }; + struct StackBackup { + Stack stack; + vector<int> offsets; + set<ShaderNode*> done; + }; + + void stack_backup(StackBackup& backup, set<ShaderNode*>& done); + void stack_restore(StackBackup& backup, set<ShaderNode*>& done); + void stack_clear_temporary(ShaderNode *node); int stack_size(ShaderSocketType type); int stack_find_offset(ShaderSocketType type); @@ -113,7 +122,7 @@ protected: void find_dependencies(set<ShaderNode*>& dependencies, const set<ShaderNode*>& done, ShaderInput *input); void generate_svm_nodes(const set<ShaderNode*>& nodes, set<ShaderNode*>& done); - void generate_closure(ShaderNode *node, set<ShaderNode*> done, Stack stack); + void generate_closure(ShaderNode *node, set<ShaderNode*>& done); void generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done, uint in_offset); void compile_type(Shader *shader, ShaderGraph *graph, ShaderType type); @@ -121,6 +130,7 @@ protected: vector<int4> svm_nodes; ShaderType current_type; Shader *current_shader; + ShaderGraph *current_graph; Stack active_stack; int max_stack_use; uint mix_weight_offset; |