diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-12-30 17:21:19 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-12-30 17:21:19 +0300 |
commit | 4d2eb42cfd71a04fbe70f36ab7a676f39d7c4957 (patch) | |
tree | 728be5cac24a472b077f11d883d8d95cb102bfce /intern/cycles/render/svm.h | |
parent | 3918c8b9a52ae9dcdb0488df92d7d3ca615be8c7 (diff) |
Cycles: Wrap SVM compiler state variables into a single struct
This way it's easier to pass stuff around and also much easier to add more
state variables.
So far should be no functional changes for artists.
Diffstat (limited to 'intern/cycles/render/svm.h')
-rw-r--r-- | intern/cycles/render/svm.h | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/intern/cycles/render/svm.h b/intern/cycles/render/svm.h index f61ceb5d770..4861de1f339 100644 --- a/intern/cycles/render/svm.h +++ b/intern/cycles/render/svm.h @@ -152,6 +152,15 @@ protected: ShaderNodeSet done; }; + /* Global state of the compiler accessible from the compilation routines. */ + struct CompilerState { + /* Set of nodes which were already compiled. */ + ShaderNodeSet nodes_done; + + /* Set of closures which were already compiled. */ + ShaderNodeSet closure_done; + }; + void stack_backup(StackBackup& backup, ShaderNodeSet& done); void stack_restore(StackBackup& backup, ShaderNodeSet& done); @@ -167,18 +176,18 @@ protected: ShaderInput *input, ShaderNode *skip_node = NULL); void generate_node(ShaderNode *node, ShaderNodeSet& done); - void generate_closure_node(ShaderNode *node, ShaderNodeSet& done); - void generated_shared_closure_nodes(ShaderNode *root_node, ShaderNode *node, - ShaderNodeSet& done, - ShaderNodeSet& closure_done, + void generate_closure_node(ShaderNode *node, CompilerState *state); + void generated_shared_closure_nodes(ShaderNode *root_node, + ShaderNode *node, + CompilerState *state, const ShaderNodeSet& shared); - void generate_svm_nodes(const ShaderNodeSet& nodes, ShaderNodeSet& done); + void generate_svm_nodes(const ShaderNodeSet& nodes, + CompilerState *state); /* multi closure */ void generate_multi_closure(ShaderNode *root_node, ShaderNode *node, - ShaderNodeSet& done, - ShaderNodeSet& closure_done); + CompilerState *state); /* compile */ void compile_type(Shader *shader, ShaderGraph *graph, ShaderType type); |