Commit: 7658c6cf0d1bff2c6b103038f0c9fbb8a3151244
Author: Lukas Tönne
Date:   Tue Apr 5 09:17:14 2016 +0200
Branches: object_nodes
https://developer.blender.org/rB7658c6cf0d1bff2c6b103038f0c9fbb8a3151244

Implement bvm internal function caching and spin lock (missing from previous 
commit).

===================================================================

M       source/blender/blenvm/intern/bvm_api.cc

===================================================================

diff --git a/source/blender/blenvm/intern/bvm_api.cc 
b/source/blender/blenvm/intern/bvm_api.cc
index cc8a3ad..f64bc4d 100644
--- a/source/blender/blenvm/intern/bvm_api.cc
+++ b/source/blender/blenvm/intern/bvm_api.cc
@@ -414,14 +414,26 @@ struct BVMFunction 
*BVM_gen_forcefield_function_bvm(bNodeTree *btree, bool use_c
 {
        using namespace blenvm;
        
-       NodeGraph graph;
-       init_forcefield_graph(graph);
-       parse_py_nodes(btree, &graph);
-       graph.finalize();
+       bvm_lock.lock();
+       
+       FunctionBVM *fn = NULL;
+       if (use_cache) {
+               fn = function_bvm_cache_acquire(btree);
+       }
+       
+       if (!fn) {
+               NodeGraph graph;
+               init_forcefield_graph(graph);
+               parse_py_nodes(btree, &graph);
+               graph.finalize();
+               
+               BVMCompiler compiler;
+               fn = compiler.compile_function(graph);
+               
+               function_bvm_cache_set(btree, fn);
+       }
        
-       BVMCompiler compiler;
-       FunctionBVM *fn = compiler.compile_function(graph);
-       FunctionBVM::retain(fn);
+       bvm_lock.unlock();
        
        return (BVMFunction *)fn;
 }
@@ -984,14 +996,26 @@ struct BVMFunction 
*BVM_gen_texture_function_bvm(bNodeTree *btree, bool use_cach
 {
        using namespace blenvm;
        
-       NodeGraph graph;
-       init_texture_graph(graph);
-       parse_tex_nodes(btree, &graph);
-       graph.finalize();
+       bvm_lock.lock();
+       
+       FunctionBVM *fn = NULL;
+       if (use_cache) {
+               fn = function_bvm_cache_acquire(btree);
+       }
+       
+       if (!fn) {
+               NodeGraph graph;
+               init_texture_graph(graph);
+               parse_tex_nodes(btree, &graph);
+               graph.finalize();
+               
+               BVMCompiler compiler;
+               fn = compiler.compile_function(graph);
+               
+               function_bvm_cache_set(btree, fn);
+       }
        
-       BVMCompiler compiler;
-       FunctionBVM *fn = compiler.compile_function(graph);
-       FunctionBVM::retain(fn);
+       bvm_lock.unlock();
        
        return (BVMFunction *)fn;
 }
@@ -1112,14 +1136,26 @@ struct BVMFunction 
*BVM_gen_modifier_function_bvm(struct bNodeTree *btree, bool
 {
        using namespace blenvm;
        
-       NodeGraph graph;
-       init_modifier_graph(graph);
-       parse_py_nodes(btree, &graph);
-       graph.finalize();
+       bvm_lock.lock();
+       
+       FunctionBVM *fn = NULL;
+       if (use_cache) {
+               fn = function_bvm_cache_acquire(btree);
+       }
        
-       BVMCompiler compiler;
-       FunctionBVM *fn = compiler.compile_function(graph);
-       FunctionBVM::retain(fn);
+       if (!fn) {
+               NodeGraph graph;
+               init_modifier_graph(graph);
+               parse_py_nodes(btree, &graph);
+               graph.finalize();
+               
+               BVMCompiler compiler;
+               fn = compiler.compile_function(graph);
+               
+               function_bvm_cache_set(btree, fn);
+       }
+       
+       bvm_lock.unlock();
        
        return (BVMFunction *)fn;
 }
@@ -1186,14 +1222,26 @@ struct BVMFunction *BVM_gen_dupli_function_bvm(struct 
bNodeTree *btree, bool use
 {
        using namespace blenvm;
        
-       NodeGraph graph;
-       init_dupli_graph(graph);
-       parse_py_nodes(btree, &graph);
-       graph.finalize();
+       bvm_lock.lock();
        
-       BVMCompiler compiler;
-       FunctionBVM *fn = compiler.compile_function(graph);
-       FunctionBVM::retain(fn);
+       FunctionBVM *fn = NULL;
+       if (use_cache) {
+               fn = function_bvm_cache_acquire(btree);
+       }
+       
+       if (!fn) {
+               NodeGraph graph;
+               init_dupli_graph(graph);
+               parse_py_nodes(btree, &graph);
+               graph.finalize();
+               
+               BVMCompiler compiler;
+               fn = compiler.compile_function(graph);
+               
+               function_bvm_cache_set(btree, fn);
+       }
+       
+       bvm_lock.unlock();
        
        return (BVMFunction *)fn;
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to