Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/svm.h')
-rw-r--r--intern/cycles/render/svm.h23
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);