diff options
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); |