From 4d2eb42cfd71a04fbe70f36ab7a676f39d7c4957 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 30 Dec 2015 19:21:19 +0500 Subject: 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. --- intern/cycles/render/svm.h | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'intern/cycles/render/svm.h') 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); -- cgit v1.2.3