[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