[Bf-blender-cvs] [2ade7d5] object_nodes: Type system refactor: Use a global type definition map instead of defining each type locally.

Lukas Tönne noreply at git.blender.org
Thu May 19 19:29:25 CEST 2016


Commit: 2ade7d581584a36680742d1d7cd094cfe5228c32
Author: Lukas Tönne
Date:   Wed May 18 07:45:52 2016 +0200
Branches: object_nodes
https://developer.blender.org/rB2ade7d581584a36680742d1d7cd094cfe5228c32

Type system refactor: Use a global type definition map instead of defining each type locally.

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

M	source/blender/blenvm/compile/bvm_codegen.cc
M	source/blender/blenvm/compile/bvm_function.cc
M	source/blender/blenvm/compile/node_graph.cc
M	source/blender/blenvm/compile/node_graph.h
M	source/blender/blenvm/compile/node_value.h
M	source/blender/blenvm/compile/typedesc.cc
M	source/blender/blenvm/compile/typedesc.h
M	source/blender/blenvm/intern/bvm_api.cc
M	source/blender/blenvm/llvm/llvm_codegen.cc
M	source/blender/blenvm/llvm/llvm_modules.cc
M	source/blender/blenvm/llvm/llvm_types.cc
M	source/blender/blenvm/llvm/llvm_types.h

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

diff --git a/source/blender/blenvm/compile/bvm_codegen.cc b/source/blender/blenvm/compile/bvm_codegen.cc
index ef021cf..1b88564 100644
--- a/source/blender/blenvm/compile/bvm_codegen.cc
+++ b/source/blender/blenvm/compile/bvm_codegen.cc
@@ -150,7 +150,8 @@ StackIndex BVMCompilerBase::find_stack_index(int size) const
 
 StackIndex BVMCompilerBase::assign_stack_index(const TypeDesc &typedesc)
 {
-	int stack_size = EvalStack::stack_size(typedesc.size());
+	const TypeSpec *typespec = typedesc.get_typespec();
+	int stack_size = EvalStack::stack_size(typespec->size());
 	
 	StackIndex stack_offset = find_stack_index(stack_size);
 	for (int i = 0; i < stack_size; ++i) {
@@ -234,8 +235,10 @@ void BVMCompilerBase::resolve_symbols(const NodeGraph &graph)
 
 void BVMCompilerBase::push_constant(const NodeValue *value) const
 {
+	const TypeSpec *typespec = value->typedesc().get_typespec();
+	
 	BLI_assert(value != NULL);
-	switch (value->typedesc().base_type()) {
+	switch (typespec->base_type()) {
 		case BVM_FLOAT: {
 			float f = 0.0f;
 			value->get(&f);
@@ -296,7 +299,9 @@ void BVMCompilerBase::push_constant(const NodeValue *value) const
 
 void BVMCompilerBase::codegen_value(const NodeValue *value, StackIndex offset) const
 {
-	switch (value->typedesc().base_type()) {
+	const TypeSpec *typespec = value->typedesc().get_typespec();
+	
+	switch (typespec->base_type()) {
 		case BVM_FLOAT: {
 			float f = 0.0f;
 			value->get(&f);
@@ -370,9 +375,11 @@ void BVMCompilerBase::codegen_value(const NodeValue *value, StackIndex offset) c
 	}
 }
 
-static OpCode ptr_init_opcode(const TypeDesc &typedesc)
+static OpCode ptr_init_opcode(const TypeDesc &td)
 {
-	switch (typedesc.base_type()) {
+	const TypeSpec *typespec = td.get_typespec();
+	
+	switch (typespec->base_type()) {
 		case BVM_FLOAT:
 		case BVM_FLOAT3:
 		case BVM_FLOAT4:
@@ -390,9 +397,11 @@ static OpCode ptr_init_opcode(const TypeDesc &typedesc)
 	return OP_NOOP;
 }
 
-static OpCode ptr_release_opcode(const TypeDesc &typedesc)
+static OpCode ptr_release_opcode(const TypeDesc &td)
 {
-	switch (typedesc.base_type()) {
+	const TypeSpec *typespec = td.get_typespec();
+	
+	switch (typespec->base_type()) {
 		case BVM_FLOAT:
 		case BVM_FLOAT3:
 		case BVM_FLOAT4:
diff --git a/source/blender/blenvm/compile/bvm_function.cc b/source/blender/blenvm/compile/bvm_function.cc
index ba0c282..6142361 100644
--- a/source/blender/blenvm/compile/bvm_function.cc
+++ b/source/blender/blenvm/compile/bvm_function.cc
@@ -97,8 +97,9 @@ void FunctionBVM::eval(EvalContext *context, const EvalGlobals *globals, const v
 		const Argument &arg = argument(i);
 		if (arg.stack_offset != BVM_STACK_INVALID) {
 			EvalStack *value = &stack[arg.stack_offset];
+			const TypeSpec *typespec = arg.typedesc.get_typespec();
 			
-			arg.typedesc.copy_value((void *)value, arguments[i]);
+			typespec->copy_value((void *)value, arguments[i]);
 		}
 	}
 	
@@ -108,8 +109,9 @@ void FunctionBVM::eval(EvalContext *context, const EvalGlobals *globals, const v
 	for (int i = 0; i < num_return_values(); ++i) {
 		const Argument &rval = return_value(i);
 		EvalStack *value = &stack[rval.stack_offset];
+		const TypeSpec *typespec = rval.typedesc.get_typespec();
 		
-		rval.typedesc.copy_value(results[i], (void *)value);
+		typespec->copy_value(results[i], (void *)value);
 	}
 }
 
diff --git a/source/blender/blenvm/compile/node_graph.cc b/source/blender/blenvm/compile/node_graph.cc
index ba6f922..ea1af34 100644
--- a/source/blender/blenvm/compile/node_graph.cc
+++ b/source/blender/blenvm/compile/node_graph.cc
@@ -215,8 +215,7 @@ const NodeInput *NodeType::add_input(const string &name,
                                      BVMInputValueType value_type)
 {
 	BLI_assert(!find_input(name));
-	BLI_assert(NodeGraph::has_typedef(type));
-	m_inputs.push_back(NodeInput(name, NodeGraph::find_typedef(type), default_value, value_type));
+	m_inputs.push_back(NodeInput(name, TypeDesc(type), default_value, value_type));
 	return &m_inputs.back();
 }
 
@@ -225,10 +224,11 @@ const NodeOutput *NodeType::add_output(const string &name,
                                        BVMOutputValueType value_type)
 {
 	BLI_assert(!find_output(name));
-	BLI_assert(NodeGraph::has_typedef(type));
+	
 	/* local outputs only allowed for kernel nodes */
 	BLI_assert(m_kind == NODE_TYPE_KERNEL || value_type != OUTPUT_VARIABLE);
-	m_outputs.push_back(NodeOutput(name, NodeGraph::find_typedef(type), value_type));
+	
+	m_outputs.push_back(NodeOutput(name, TypeDesc(type), value_type));
 	return &m_outputs.back();
 }
 
@@ -514,8 +514,10 @@ bool NodeInstance::link_set(const string &name, const OutputKey &from)
 {
 	const NodeInput *socket = type->find_input(name);
 	InputInstance &input = inputs[name];
+	const TypeSpec *fromtype = from.socket->typedesc.get_typespec();
+	const TypeSpec *totype = socket->typedesc.get_typespec();
 	
-	if (socket->typedesc.assignable(from.socket->typedesc)) {
+	if (totype->assignable(*fromtype)) {
 		input.link = from;
 		return true;
 	}
@@ -587,51 +589,8 @@ void NodeBlock::prune(const NodeSet &used_nodes)
 
 /* ------------------------------------------------------------------------- */
 
-NodeGraph::TypeDefMap NodeGraph::typedefs;
 NodeGraph::NodeTypeMap NodeGraph::node_types;
 
-const TypeDesc &NodeGraph::find_typedef(const string &name)
-{
-	return typedefs.at(name);
-}
-
-bool NodeGraph::has_typedef(const string &name)
-{
-	return typedefs.find(name) != typedefs.end();
-}
-
-TypeDesc *NodeGraph::add_typedef(const string &name, BVMType base_type, BVMBufferType buffer_type)
-{
-	std::pair<TypeDefMap::iterator, bool> result =
-	        typedefs.insert(TypeDefPair(name, TypeDesc(base_type, buffer_type)));
-	if (result.second) {
-		TypeDesc *typedesc = &result.first->second;
-		return typedesc;
-	}
-	else
-		return NULL;
-}
-
-TypeDesc *NodeGraph::add_typedef_struct(const string &name)
-{
-	std::pair<TypeDefMap::iterator, bool> result =
-	        typedefs.insert(TypeDefPair(name, TypeDesc(BVM_INT)));
-	if (result.second) {
-		TypeDesc *typedesc = &result.first->second;
-		typedesc->make_structure();
-		return typedesc;
-	}
-	else
-		return NULL;
-}
-
-void NodeGraph::remove_typedef(const string &name)
-{
-	TypeDefMap::iterator it = typedefs.find(name);
-	if (it != typedefs.end())
-		typedefs.erase(it);
-}
-
 const NodeType *NodeGraph::find_node_type(const string &name)
 {
 	NodeTypeMap::const_iterator it = node_types.find(name);
@@ -758,27 +717,29 @@ void NodeGraph::set_output_socket(const string &name, const OutputKey &key)
 const NodeGraph::Input *NodeGraph::add_input(const string &name, const string &type)
 {
 	BLI_assert(!get_input(name));
-	const TypeDesc &typedesc = find_typedef(type);
-	inputs.push_back(Input(name, typedesc, add_argument_node(typedesc)));
+	TypeDesc td(type);
+	inputs.push_back(Input(name, td, add_argument_node(td)));
 	return &inputs.back();
 }
 
 const NodeGraph::Output *NodeGraph::add_output(const string &name, const string &type, NodeValue *default_value)
 {
 	BLI_assert(!get_output(name));
-	const TypeDesc &typedesc = find_typedef(type);
-	outputs.push_back(Output(name, typedesc, add_proxy(typedesc, default_value)->output(0)));
+	TypeDesc td(type);
+	outputs.push_back(Output(name, td, add_proxy(td, default_value)->output(0)));
 	return &outputs.back();
 }
 
 /* ------------------------------------------------------------------------- */
 
-NodeInstance *NodeGraph::add_proxy(const TypeDesc &typedesc, NodeValue *default_value)
+NodeInstance *NodeGraph::add_proxy(const TypeDesc &td, NodeValue *default_value)
 {
+	const TypeSpec *typespec = td.get_typespec();
+	
 	NodeInstance *node = NULL;
-	switch (typedesc.buffer_type()) {
+	switch (typespec->buffer_type()) {
 		case BVM_BUFFER_SINGLE:
-			switch (typedesc.base_type()) {
+			switch (typespec->base_type()) {
 				case BVM_FLOAT: node = add_node("PASS_FLOAT"); break;
 				case BVM_FLOAT3: node = add_node("PASS_FLOAT3"); break;
 				case BVM_FLOAT4: node = add_node("PASS_FLOAT4"); break;
@@ -791,7 +752,7 @@ NodeInstance *NodeGraph::add_proxy(const TypeDesc &typedesc, NodeValue *default_
 			}
 			break;
 		case BVM_BUFFER_ARRAY:
-			switch (typedesc.base_type()) {
+			switch (typespec->base_type()) {
 				case BVM_FLOAT: node = add_node("PASS_FLOAT_ARRAY"); break;
 				case BVM_FLOAT3: node = add_node("PASS_FLOAT3_ARRAY"); break;
 				case BVM_FLOAT4: node = add_node("PASS_FLOAT4_ARRAY"); break;
@@ -804,7 +765,7 @@ NodeInstance *NodeGraph::add_proxy(const TypeDesc &typedesc, NodeValue *default_
 			}
 			break;
 		case BVM_BUFFER_IMAGE:
-			switch (typedesc.base_type()) {
+			switch (typespec->base_type()) {
 				case BVM_FLOAT: node = add_node("PASS_FLOAT_IMAGE"); break;
 				case BVM_INT: node = add_node("PASS_INT_IMAGE"); break;
 			}
@@ -817,8 +778,10 @@ NodeInstance *NodeGraph::add_proxy(const TypeDesc &typedesc, NodeValue *default_
 
 OutputKey NodeGraph::add_value_node(NodeValue *value)
 {
+	const TypeSpec *typespec = value->typedesc().get_typespec();
+	
 	NodeInstance *node = NULL;
-	switch (value->typedesc().base_type()) {
+	switch (typespec->base_type()) {
 		case BVM_FLOAT: node = add_node("VALUE_FLOAT"); break;
 		case BVM_FLOAT3: node = add_node("VALUE_FLOAT3"); break;
 		case BVM_FLOAT4: node = add_node("VALUE_FLOAT4"); break;
@@ -834,10 +797,12 @@ OutputKey NodeGraph::add_value_node(NodeValue *value)
 	return OutputKey(node, "value");
 }
 
-OutputKey NodeGraph::add_argument_node(const TypeDesc &typedesc)
+OutputKey NodeGraph::add_argument_node(const TypeDesc &td)
 {
+	const TypeSpec *typespec = td.get_typespec();
+	
 	NodeInstance *node = NULL;
-	switch (typedesc.base_type()) {
+	switch (typespec->base_type()) {
 		case BVM_FLOAT: node = add_node("ARG_FLOAT"); break;
 		case BVM_FLOAT3: node = add_node("ARG_FLOAT3"); break;
 		case BVM_FLOAT4: node = add_node("ARG_FLOAT4"); break;
@@ -1254,44 +1219,44 @@ void NodeGraph::finalize()
 
 static void register_typedefs()
 {
-	TypeDesc *t;
+	TypeSpec *t;
 	
-	t = NodeGraph::add_typedef("FLOAT", BVM_FLOAT);
+	t = TypeSpec::add_typedef("FLOAT", BVM_FLOAT);
 	
-	t = NodeGraph::add_typedef("FLOAT3", BVM_FLOAT3);
+	t = TypeSpec::add_typedef("FLOAT3", BVM_FLOAT3);
 	
-	t = NodeGraph::add_typedef("FLOAT4", BVM_FLOAT4);
+	t = TypeSpec::add_type

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list