Commit: b7bb0a0c4d76dce4caa7722cf7439362f090c622
Author: Lukas Tönne
Date:   Fri May 27 17:20:52 2016 +0200
Branches: object_nodes
https://developer.blender.org/rBb7bb0a0c4d76dce4caa7722cf7439362f090c622

Cleanup: use argument pointers for aggregate base types.

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

M       source/blender/blenvm/compile/typedesc.cc
M       source/blender/blenvm/compile/typedesc.h
M       source/blender/blenvm/llvm/llvm_compiler_dual.cc
M       source/blender/blenvm/llvm/llvm_compiler_simple.cc

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

diff --git a/source/blender/blenvm/compile/typedesc.cc 
b/source/blender/blenvm/compile/typedesc.cc
index a599306..3348243 100644
--- a/source/blender/blenvm/compile/typedesc.cc
+++ b/source/blender/blenvm/compile/typedesc.cc
@@ -172,6 +172,24 @@ bool TypeSpec::operator < (const TypeSpec &other) const
        }
 }
 
+bool TypeSpec::is_aggregate() const
+{
+       switch (m_base_type) {
+               case BVM_FLOAT:
+               case BVM_INT:
+                       return false;
+               case BVM_FLOAT3:
+               case BVM_FLOAT4:
+               case BVM_MATRIX44:
+               case BVM_STRING:
+               case BVM_RNAPOINTER:
+               case BVM_MESH:
+               case BVM_DUPLIS:
+                       return true;
+       }
+       return false;
+}
+
 bool TypeSpec::assignable(const TypeSpec &other) const
 {
        return *this == other;
diff --git a/source/blender/blenvm/compile/typedesc.h 
b/source/blender/blenvm/compile/typedesc.h
index 94a90b4..b9fd6d1 100644
--- a/source/blender/blenvm/compile/typedesc.h
+++ b/source/blender/blenvm/compile/typedesc.h
@@ -180,6 +180,7 @@ struct TypeSpec {
        
        BVMType base_type() const { return m_base_type; }
        BVMBufferType buffer_type() const { return m_buffer_type; }
+       bool is_aggregate() const;
        
        bool assignable(const TypeSpec &other) const;
        
diff --git a/source/blender/blenvm/llvm/llvm_compiler_dual.cc 
b/source/blender/blenvm/llvm/llvm_compiler_dual.cc
index 83921c6..0c63128 100644
--- a/source/blender/blenvm/llvm/llvm_compiler_dual.cc
+++ b/source/blender/blenvm/llvm/llvm_compiler_dual.cc
@@ -59,35 +59,17 @@ bool LLVMTextureCompiler::use_argument_pointer(const 
TypeSpec *typespec, bool is
 {
        using namespace llvm;
        
-       if (typespec->is_structure()) {
+       if (!is_constant && bvm_type_has_dual_value(typespec)) {
                /* pass by reference */
                return true;
        }
-       else if (!is_constant && bvm_type_has_dual_value(typespec)) {
+       else if (typespec->is_aggregate() || typespec->is_structure()) {
+               /* pass by reference */
                return true;
        }
        else {
-               switch (typespec->base_type()) {
-                       case BVM_FLOAT:
-                       case BVM_INT:
-                               /* pass by value */
-                               return false;
-                       case BVM_FLOAT3:
-                       case BVM_FLOAT4:
-                       case BVM_MATRIX44:
-                               /* pass by reference */
-                               return true;
-                               
-                       case BVM_STRING:
-                       case BVM_RNAPOINTER:
-                       case BVM_MESH:
-                       case BVM_DUPLIS:
-                               /* TODO */
-                               break;
-               }
+               return false;
        }
-       
-       return false;
 }
 
 bool LLVMTextureCompiler::use_elementary_argument_pointer(const TypeSpec 
*typespec)
diff --git a/source/blender/blenvm/llvm/llvm_compiler_simple.cc 
b/source/blender/blenvm/llvm/llvm_compiler_simple.cc
index eb608d7..a197eab 100644
--- a/source/blender/blenvm/llvm/llvm_compiler_simple.cc
+++ b/source/blender/blenvm/llvm/llvm_compiler_simple.cc
@@ -59,32 +59,13 @@ bool LLVMSimpleCompilerImpl::use_argument_pointer(const 
TypeSpec *typespec, bool
 {
        using namespace llvm;
        
-       if (typespec->is_structure()) {
+       if (typespec->is_aggregate() || typespec->is_structure()) {
                /* pass by reference */
                return true;
        }
        else {
-               switch (typespec->base_type()) {
-                       case BVM_FLOAT:
-                       case BVM_INT:
-                               /* pass by value */
-                               return false;
-                       case BVM_FLOAT3:
-                       case BVM_FLOAT4:
-                       case BVM_MATRIX44:
-                               /* pass by reference */
-                               return true;
-                               
-                       case BVM_STRING:
-                       case BVM_RNAPOINTER:
-                       case BVM_MESH:
-                       case BVM_DUPLIS:
-                               /* TODO */
-                               break;
-               }
+               return false;
        }
-       
-       return false;
 }
 
 llvm::Constant *LLVMSimpleCompilerImpl::create_node_value_constant(const 
NodeValue *node_value)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to