[Bf-blender-cvs] [ce022f4] object_nodes: Use a TypeSpec pointer for structure fields rather than direct storage.
Lukas Tönne
noreply at git.blender.org
Thu May 19 19:29:27 CEST 2016
Commit: ce022f45063482a2324ba358962804e1f4044a56
Author: Lukas Tönne
Date: Wed May 18 11:28:50 2016 +0200
Branches: object_nodes
https://developer.blender.org/rBce022f45063482a2324ba358962804e1f4044a56
Use a TypeSpec pointer for structure fields rather than direct storage.
===================================================================
M source/blender/blenvm/compile/node_graph.cc
M source/blender/blenvm/compile/typedesc.cc
M source/blender/blenvm/compile/typedesc.h
M source/blender/blenvm/llvm/llvm_codegen.cc
M source/blender/blenvm/llvm/llvm_types.cc
===================================================================
diff --git a/source/blender/blenvm/compile/node_graph.cc b/source/blender/blenvm/compile/node_graph.cc
index ea1af34..26d94d5 100644
--- a/source/blender/blenvm/compile/node_graph.cc
+++ b/source/blender/blenvm/compile/node_graph.cc
@@ -1219,48 +1219,45 @@ void NodeGraph::finalize()
static void register_typedefs()
{
- TypeSpec *t;
- t = TypeSpec::add_typedef("FLOAT", BVM_FLOAT);
+ TypeSpec *float_t = TypeSpec::add_typedef("FLOAT", BVM_FLOAT);
- t = TypeSpec::add_typedef("FLOAT3", BVM_FLOAT3);
+ TypeSpec *float3_t = TypeSpec::add_typedef("FLOAT3", BVM_FLOAT3);
- t = TypeSpec::add_typedef("FLOAT4", BVM_FLOAT4);
+ TypeSpec *float4_t = TypeSpec::add_typedef("FLOAT4", BVM_FLOAT4);
- t = TypeSpec::add_typedef("INT", BVM_INT);
+ TypeSpec *int_t = TypeSpec::add_typedef("INT", BVM_INT);
- t = TypeSpec::add_typedef("MATRIX44", BVM_MATRIX44);
+ TypeSpec *matrix44_t = TypeSpec::add_typedef("MATRIX44", BVM_MATRIX44);
- t = TypeSpec::add_typedef("STRING", BVM_STRING);
+ TypeSpec *string_t = TypeSpec::add_typedef("STRING", BVM_STRING);
- t = TypeSpec::add_typedef("RNAPOINTER", BVM_RNAPOINTER);
+ TypeSpec *rnapointer_t = TypeSpec::add_typedef("RNAPOINTER", BVM_RNAPOINTER);
- t = TypeSpec::add_typedef("MESH", BVM_MESH);
+ TypeSpec *mesh_t = TypeSpec::add_typedef("MESH", BVM_MESH);
- t = TypeSpec::add_typedef("DUPLIS", BVM_DUPLIS);
+ TypeSpec *duplis_t = TypeSpec::add_typedef("DUPLIS", BVM_DUPLIS);
- t = TypeSpec::add_typedef("FLOAT_ARRAY", BVM_FLOAT, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("FLOAT_ARRAY", BVM_FLOAT, BVM_BUFFER_ARRAY);
- t = TypeSpec::add_typedef("FLOAT3_ARRAY", BVM_FLOAT3, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("FLOAT3_ARRAY", BVM_FLOAT3, BVM_BUFFER_ARRAY);
- t = TypeSpec::add_typedef("FLOAT4_ARRAY", BVM_FLOAT4, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("FLOAT4_ARRAY", BVM_FLOAT4, BVM_BUFFER_ARRAY);
- t = TypeSpec::add_typedef("INT_ARRAY", BVM_INT, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("INT_ARRAY", BVM_INT, BVM_BUFFER_ARRAY);
- t = TypeSpec::add_typedef("MATRIX44_ARRAY", BVM_MATRIX44, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("MATRIX44_ARRAY", BVM_MATRIX44, BVM_BUFFER_ARRAY);
- t = TypeSpec::add_typedef("STRING_ARRAY", BVM_STRING, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("STRING_ARRAY", BVM_STRING, BVM_BUFFER_ARRAY);
- t = TypeSpec::add_typedef("RNAPOINTER_ARRAY", BVM_RNAPOINTER, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("RNAPOINTER_ARRAY", BVM_RNAPOINTER, BVM_BUFFER_ARRAY);
- t = TypeSpec::add_typedef("MESH_ARRAY", BVM_MESH, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("MESH_ARRAY", BVM_MESH, BVM_BUFFER_ARRAY);
- t = TypeSpec::add_typedef("DUPLIS_ARRAY", BVM_DUPLIS, BVM_BUFFER_ARRAY);
+ TypeSpec::add_typedef("DUPLIS_ARRAY", BVM_DUPLIS, BVM_BUFFER_ARRAY);
-
-
- (void)t;
+ UNUSED_VARS(float_t, float3_t, float4_t, matrix44_t, int_t, string_t, rnapointer_t, mesh_t, duplis_t);
}
OpCode get_opcode_from_node_type(const string &node)
diff --git a/source/blender/blenvm/compile/typedesc.cc b/source/blender/blenvm/compile/typedesc.cc
index f22554c..a599306 100644
--- a/source/blender/blenvm/compile/typedesc.cc
+++ b/source/blender/blenvm/compile/typedesc.cc
@@ -68,7 +68,7 @@ int StructSpec::find_field(const string &name) const
return -1;
}
-void StructSpec::add_field(const string &name, const TypeSpec &typespec)
+void StructSpec::add_field(const string &name, const TypeSpec *typespec)
{
m_fields.push_back(FieldSpec(name, typespec));
}
@@ -182,7 +182,7 @@ size_t TypeSpec::size() const
if (m_structure) {
size_t size = 0;
for (int i = 0; i < m_structure->num_fields(); ++i)
- size += m_structure->field(i).typespec.size();
+ size += m_structure->field(i).typespec->size();
return size;
}
else {
@@ -234,9 +234,9 @@ void TypeSpec::copy_value(void *to, const void *from) const
{
if (m_structure) {
for (int i = 0; i < m_structure->num_fields(); ++i) {
- m_structure->field(i).typespec.copy_value(to, from);
+ m_structure->field(i).typespec->copy_value(to, from);
- size_t size = m_structure->field(i).typespec.size();
+ size_t size = m_structure->field(i).typespec->size();
to = ((uint8_t *)to) + size;
from = ((uint8_t *)from) + size;
}
diff --git a/source/blender/blenvm/compile/typedesc.h b/source/blender/blenvm/compile/typedesc.h
index 868288f..737b27f 100644
--- a/source/blender/blenvm/compile/typedesc.h
+++ b/source/blender/blenvm/compile/typedesc.h
@@ -208,7 +208,7 @@ private:
struct StructSpec {
struct FieldSpec {
- FieldSpec(const string &name, const TypeSpec &typespec) :
+ FieldSpec(const string &name, const TypeSpec *typespec) :
name(name),
typespec(typespec)
{}
@@ -219,7 +219,7 @@ struct StructSpec {
}
string name;
- TypeSpec typespec;
+ const TypeSpec *typespec;
};
typedef std::vector<FieldSpec> FieldList;
@@ -233,7 +233,7 @@ struct StructSpec {
int num_fields() const { return m_fields.size(); }
const FieldSpec &field(int i) const { return m_fields[i]; }
int find_field(const string &name) const;
- void add_field(const string &name, const TypeSpec &typespec);
+ void add_field(const string &name, const TypeSpec *typespec);
private:
FieldList m_fields;
diff --git a/source/blender/blenvm/llvm/llvm_codegen.cc b/source/blender/blenvm/llvm/llvm_codegen.cc
index 41dc99e..d377d74 100644
--- a/source/blender/blenvm/llvm/llvm_codegen.cc
+++ b/source/blender/blenvm/llvm/llvm_codegen.cc
@@ -167,6 +167,7 @@ void LLVMCompilerBase::codegen_node_function_call(llvm::BasicBlock *block,
const string &tname = output.socket->typedesc.name();
const TypeSpec *typespec = output.socket->typedesc.get_typespec();
Type *type = llvm_create_value_type(context(), tname, typespec);
+ BLI_assert(type != NULL);
Value *value = builder.CreateAlloca(type);
args.push_back(value);
diff --git a/source/blender/blenvm/llvm/llvm_types.cc b/source/blender/blenvm/llvm/llvm_types.cc
index a0bb4d8..c1eeb68 100644
--- a/source/blender/blenvm/llvm/llvm_types.cc
+++ b/source/blender/blenvm/llvm/llvm_types.cc
@@ -119,7 +119,7 @@ llvm::StructType *llvm_create_struct_type(llvm::LLVMContext &context, const stri
std::vector<Type*> elemtypes;
for (int i = 0; i < s->num_fields(); ++i) {
- Type *ftype = llvm_create_value_type(context, s->field(i).name, &s->field(i).typespec);
+ Type *ftype = llvm_create_value_type(context, s->field(i).name, s->field(i).typespec);
elemtypes.push_back(ftype);
}
More information about the Bf-blender-cvs
mailing list