[Bf-blender-cvs] [66a41f2] object_nodes: Array types for node sockets.

Lukas Tönne noreply at git.blender.org
Wed Dec 23 12:47:30 CET 2015


Commit: 66a41f2e9fe7825d385a5c65b4e88cd0684be244
Author: Lukas Tönne
Date:   Mon Dec 21 10:15:52 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB66a41f2e9fe7825d385a5c65b4e88cd0684be244

Array types for node sockets.

These are an extension of the type description to support contiguous
arrays of base values. They effectively form a second set of types,
mirroring the 'single' base types. Socket connections will have to
strictly match between these types as well, i.e. any dereferencing and
array access will have to be explicit.

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

M	source/blender/blenvm/BVM_api.h
M	source/blender/blenvm/BVM_types.h
M	source/blender/blenvm/compile/bvm_nodegraph.cc
M	source/blender/blenvm/compile/bvm_nodegraph.h
M	source/blender/blenvm/intern/bvm_api.cc
M	source/blender/blenvm/util/bvm_util_typedesc.h

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

diff --git a/source/blender/blenvm/BVM_api.h b/source/blender/blenvm/BVM_api.h
index 559af69..012a5e0 100644
--- a/source/blender/blenvm/BVM_api.h
+++ b/source/blender/blenvm/BVM_api.h
@@ -95,6 +95,7 @@ struct BVMTypeDesc *BVM_node_output_typedesc(struct BVMNodeOutput *output);
 BVMOutputValueType BVM_node_output_value_type(struct BVMNodeOutput *output);
 
 BVMType BVM_typedesc_base_type(struct BVMTypeDesc *typedesc);
+BVMBufferType BVM_typedesc_buffer_type(struct BVMTypeDesc *typedesc);
 
 /* ------------------------------------------------------------------------- */
 
diff --git a/source/blender/blenvm/BVM_types.h b/source/blender/blenvm/BVM_types.h
index 3190507..ce9cfb8 100644
--- a/source/blender/blenvm/BVM_types.h
+++ b/source/blender/blenvm/BVM_types.h
@@ -47,6 +47,11 @@ typedef enum BVMType {
 	BVM_STRING,
 } BVMType;
 
+typedef enum BVMBufferType {
+	BVM_BUFFER_SINGLE,
+	BVM_BUFFER_ARRAY,
+} BVMBufferType;
+
 typedef enum BVMInputValueType {
 	INPUT_CONSTANT,
 	INPUT_VARIABLE,
diff --git a/source/blender/blenvm/compile/bvm_nodegraph.cc b/source/blender/blenvm/compile/bvm_nodegraph.cc
index 578d3b1..269c753 100644
--- a/source/blender/blenvm/compile/bvm_nodegraph.cc
+++ b/source/blender/blenvm/compile/bvm_nodegraph.cc
@@ -204,25 +204,25 @@ bool NodeType::verify_arguments(Module *module, LLVMContext &context, raw_ostrea
 #endif
 
 const NodeInput *NodeType::add_input(const string &name,
-                                     BVMType type,
+                                     const TypeDesc &typedesc,
                                      Value *default_value,
                                      BVMInputValueType value_type)
 {
 	BLI_assert(!find_input(name));
 	/* function inputs only allowed for kernel nodes */
 	BLI_assert(m_is_kernel_node || value_type != INPUT_FUNCTION);
-	m_inputs.push_back(NodeInput(name, type, default_value, value_type));
+	m_inputs.push_back(NodeInput(name, typedesc, default_value, value_type));
 	return &m_inputs.back();
 }
 
 const NodeOutput *NodeType::add_output(const string &name,
-                                       BVMType type,
+                                       const TypeDesc &typedesc,
                                        BVMOutputValueType value_type)
 {
 	BLI_assert(!find_output(name));
 	/* local outputs only allowed for kernel nodes */
 	BLI_assert(m_is_kernel_node || value_type != OUTPUT_LOCAL);
-	m_outputs.push_back(NodeOutput(name, type, value_type));
+	m_outputs.push_back(NodeOutput(name, typedesc, value_type));
 	return &m_outputs.back();
 }
 
@@ -575,18 +575,16 @@ const NodeGraph::Output *NodeGraph::get_output(const string &name) const
 	return NULL;
 }
 
-const NodeGraph::Input *NodeGraph::add_input(const string &name, BVMType type)
+const NodeGraph::Input *NodeGraph::add_input(const string &name, const TypeDesc &typedesc)
 {
 	BLI_assert(!get_input(name));
-	TypeDesc typedesc(type);
 	inputs.push_back(Input(name, typedesc, add_argument_node(typedesc)));
 	return &inputs.back();
 }
 
-const NodeGraph::Output *NodeGraph::add_output(const string &name, BVMType type, Value *default_value)
+const NodeGraph::Output *NodeGraph::add_output(const string &name, const TypeDesc &typedesc, Value *default_value)
 {
 	BLI_assert(!get_output(name));
-	TypeDesc typedesc(type);
 	outputs.push_back(Output(name, typedesc, add_proxy(typedesc, default_value)));
 	return &outputs.back();
 }
@@ -596,15 +594,31 @@ const NodeGraph::Output *NodeGraph::add_output(const string &name, BVMType type,
 SocketPair NodeGraph::add_proxy(const TypeDesc &typedesc, Value *default_value)
 {
 	NodeInstance *node = NULL;
-	switch (typedesc.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;
-		case BVM_INT: node = add_node("PASS_INT"); break;
-		case BVM_MATRIX44: node = add_node("PASS_MATRIX44"); break;
-		case BVM_MESH: node = add_node("PASS_MESH"); break;
-		case BVM_POINTER: node = add_node("PASS_POINTER"); break;
-		case BVM_STRING: node = add_node("PASS_STRING"); break;
+	switch (typedesc.buffer_type) {
+		case BVM_BUFFER_SINGLE:
+			switch (typedesc.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;
+				case BVM_INT: node = add_node("PASS_INT"); break;
+				case BVM_MATRIX44: node = add_node("PASS_MATRIX44"); break;
+				case BVM_MESH: node = add_node("PASS_MESH"); break;
+				case BVM_POINTER: node = add_node("PASS_POINTER"); break;
+				case BVM_STRING: node = add_node("PASS_STRING"); break;
+			}
+			break;
+		case BVM_BUFFER_ARRAY:
+			switch (typedesc.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;
+				case BVM_INT: node = add_node("PASS_INT_ARRAY"); break;
+				case BVM_MATRIX44: node = add_node("PASS_MATRIX44_ARRAY"); break;
+				case BVM_MESH: node = add_node("PASS_MESH_ARRAY"); break;
+				case BVM_POINTER: node = add_node("PASS_POINTER_ARRAY"); break;
+				case BVM_STRING: node = add_node("PASS_STRING_ARRAY"); break;
+			}
+			break;
 	}
 	if (node && default_value)
 		node->set_input_value("value", default_value);
@@ -877,134 +891,134 @@ static void register_opcode_node_types()
 	NodeType *nt;
 	
 	nt = NodeGraph::add_function_node_type("FLOAT_TO_INT");
-	nt->add_input("value", BVM_FLOAT, 0.0f);
-	nt->add_output("value", BVM_INT);
+	nt->add_input("value", TYPE_FLOAT, 0.0f);
+	nt->add_output("value", TYPE_INT);
 	
 	nt = NodeGraph::add_function_node_type("INT_TO_FLOAT");
-	nt->add_input("value", BVM_INT, 0);
-	nt->add_output("value", BVM_FLOAT);
+	nt->add_input("value", TYPE_INT, 0);
+	nt->add_output("value", TYPE_FLOAT);
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT");
-	nt->add_input("value", BVM_FLOAT, 0.0f);
-	nt->add_output("value", BVM_FLOAT);
+	nt->add_input("value", TYPE_FLOAT, 0.0f);
+	nt->add_output("value", TYPE_FLOAT);
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT3");
-	nt->add_input("value", BVM_FLOAT3, float3(0.0f, 0.0f, 0.0f));
-	nt->add_output("value", BVM_FLOAT3);
+	nt->add_input("value", TYPE_FLOAT3, float3(0.0f, 0.0f, 0.0f));
+	nt->add_output("value", TYPE_FLOAT3);
 	
 	nt = NodeGraph::add_pass_node_type("PASS_FLOAT4");
-	nt->add_input("value", BVM_FLOAT4, float4(0.0f, 0.0f, 0.0f, 0.0f));
-	nt->add_output("value", BVM_FLOAT4);
+	nt->add_input("value", TYPE_FLOAT4, float4(0.0f, 0.0f, 0.0f, 0.0f));
+	nt->add_output("value", TYPE_FLOAT4);
 	
 	nt = NodeGraph::add_pass_node_type("PASS_INT");
-	nt->add_input("value", BVM_INT, 0);
-	nt->add_output("value", BVM_INT);
+	nt->add_input("value", TYPE_INT, 0);
+	nt->add_output("value", TYPE_INT);
 	
 	nt = NodeGraph::add_pass_node_type("PASS_MATRIX44");
-	nt->add_input("value", BVM_MATRIX44, matrix44::identity());
-	nt->add_output("value", BVM_MATRIX44);
+	nt->add_input("value", TYPE_MATRIX44, matrix44::identity());
+	nt->add_output("value", TYPE_MATRIX44);
 	
 	nt = NodeGraph::add_pass_node_type("PASS_POINTER");
-	nt->add_input("value", BVM_POINTER, PointerRNA_NULL);
-	nt->add_output("value", BVM_POINTER);
+	nt->add_input("value", TYPE_POINTER, PointerRNA_NULL);
+	nt->add_output("value", TYPE_POINTER);
 	
 	nt = NodeGraph::add_pass_node_type("PASS_MESH");
-	nt->add_input("value", BVM_MESH, __empty_mesh__);
-	nt->add_output("value", BVM_MESH);
+	nt->add_input("value", TYPE_MESH, __empty_mesh__);
+	nt->add_output("value", TYPE_MESH);
 	
 	nt = NodeGraph::add_pass_node_type("PASS_STRING");
-	nt->add_input("value", BVM_STRING, "");
-	nt->add_output("value", BVM_STRING);
+	nt->add_input("value", TYPE_STRING, "");
+	nt->add_output("value", TYPE_STRING);
 	
 	nt = NodeGraph::add_function_node_type("ARG_FLOAT");
-	nt->add_output("value", BVM_FLOAT);
+	nt->add_output("value", TYPE_FLOAT);
 	
 	nt = NodeGraph::add_function_node_type("ARG_FLOAT3");
-	nt->add_output("value", BVM_FLOAT3);
+	nt->add_output("value", TYPE_FLOAT3);
 	
 	nt = NodeGraph::add_function_node_type("ARG_FLOAT4");
-	nt->add_output("value", BVM_FLOAT4);
+	nt->add_output("value", TYPE_FLOAT4);
 	
 	nt = NodeGraph::add_function_node_type("ARG_INT");
-	nt->add_output("value", BVM_INT);
+	nt->add_output("value", TYPE_INT);
 	
 	nt = NodeGraph::add_function_node_type("ARG_MATRIX44");
-	nt->add_output("value", BVM_MATRIX44);
+	nt->add_output("value", TYPE_MATRIX44);
 	
 	nt = NodeGraph::add_function_node_type("ARG_POINTER");
-	nt->add_output("value", BVM_POINTER);
+	nt->add_output("value", TYPE_POINTER);
 	
 	nt = NodeGraph::add_function_node_type("ARG_MESH");
-	nt->add_output("value", BVM_MESH);
+	nt->add_output("value", TYPE_MESH);
 	
 	nt = NodeGraph::add_function_node_type("ARG_STRING");
-	nt->add_output("value", BVM_STRING);
+	nt->add_output("value", TYPE_STRING);
 	
 	nt = NodeGraph::add_function_node_type("VALUE_FLOAT");
-	nt->add_input("value", BVM_FLOAT, 0.0f, INPUT_CONSTANT);
-	nt->add_output("value", BVM_FLOAT);
+	nt->add_input("value", TYPE_FLOAT, 0.0f, INPUT_CONSTANT);
+	nt->add_output("value", TYPE_FLOAT);
 	
 	nt = NodeGraph::add_function_node_type("VALUE_FLOAT3");
-	nt->add_input("value", BVM_FLOAT3, float3(0.0f, 0.0f, 0.0f), INPUT_CONSTANT);
-	nt->add_output("value", BVM_FLOAT3);
+	nt->add_input("value", TYPE_FLOAT3, float3(0.0f, 0.0f, 0.0f), INPUT_CONSTANT);
+	nt->add_output("value", TYPE_FLOAT3);
 	
 	nt = NodeGraph::add_function_node_type("VALUE_FLOAT4");
-	nt->add_input("value", BVM_FLOAT4, float4(0.0f, 0.0f, 0.0f, 0.0f), INPUT_CONSTANT);
-	nt->add_output("value", BVM_FLOAT4);
+	nt->add_input("value", TYPE_FLOAT4, float4(0.0f, 0.0f, 0.0f, 0.0f), INPUT_CONSTANT);
+	nt->add_output("value", TYPE_FLOAT4);
 	
 	nt = NodeGraph::add_function_node_type("VALUE_INT");
-	nt->add_input("value", BVM_INT, 0, INPUT_CONSTANT);
-	nt->add_output("value", BVM_INT);
+	nt->add_input("value", TYPE_INT, 0, INPUT_CONSTANT);
+	nt->add_output("value", TYPE_INT);
 	
 	nt = NodeGraph::add_function_node_type("VALUE_MATRIX44");
-	nt->add_input("value", BVM_MATRIX44, matrix44::identity(), INPUT_CONSTANT);
-	nt->add_output("value", BVM_MATRIX44);
+	nt->ad

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list