[Bf-blender-cvs] [7658c6c] object_nodes: Implement bvm internal function caching and spin lock (missing from previous commit).
Lukas Tönne
noreply at git.blender.org
Tue Apr 5 09:17:57 CEST 2016
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;
}
More information about the Bf-blender-cvs
mailing list