Commit: 0f9c5bdb5c1cdd9c6478cd631d2a4ec97e0425c4
Author: Lukas Tönne
Date:   Thu Jun 23 19:16:40 2016 +0200
Branches: object_nodes
https://developer.blender.org/rB0f9c5bdb5c1cdd9c6478cd631d2a4ec97e0425c4

Fix graph return values: Not all value types are returned as duals.

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

M       source/blender/blenvm/llvm/llvm_codegen.cc

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

diff --git a/source/blender/blenvm/llvm/llvm_codegen.cc 
b/source/blender/blenvm/llvm/llvm_codegen.cc
index be881c9..541f588 100644
--- a/source/blender/blenvm/llvm/llvm_codegen.cc
+++ b/source/blender/blenvm/llvm/llvm_codegen.cc
@@ -258,14 +258,20 @@ void LLVMCodeGenerator::store_return_value(size_t 
output_index, const TypeSpec *
        builder.SetInsertPoint(m_block);
        
        Argument *arg = m_output_args[output_index];
-       Value *value_ptr = builder.CreateStructGEP(arg, 0, 
sanitize_name(arg->getName().str() + "_V"));
-       Value *dx_ptr = builder.CreateStructGEP(arg, 1, 
sanitize_name(arg->getName().str() + "_DX"));
-       Value *dy_ptr = builder.CreateStructGEP(arg, 2, 
sanitize_name(arg->getName().str() + "_DY"));
-       
-       DualValue dual = m_values.at(handle);
-       bvm_llvm_copy_value(context(), m_block, value_ptr, dual.value(), 
typespec);
-       bvm_llvm_copy_value(context(), m_block, dx_ptr, dual.dx(), typespec);
-       bvm_llvm_copy_value(context(), m_block, dy_ptr, dual.dy(), typespec);
+       DualValue dval = m_values.at(handle);
+       
+       if (bvm_type_has_dual_value(typespec)) {
+               Value *value_ptr = builder.CreateStructGEP(arg, 0, 
sanitize_name(arg->getName().str() + "_V"));
+               Value *dx_ptr = builder.CreateStructGEP(arg, 1, 
sanitize_name(arg->getName().str() + "_DX"));
+               Value *dy_ptr = builder.CreateStructGEP(arg, 2, 
sanitize_name(arg->getName().str() + "_DY"));
+               
+               bvm_llvm_copy_value(context(), m_block, value_ptr, 
dval.value(), typespec);
+               bvm_llvm_copy_value(context(), m_block, dx_ptr, dval.dx(), 
typespec);
+               bvm_llvm_copy_value(context(), m_block, dy_ptr, dval.dy(), 
typespec);
+       }
+       else {
+               bvm_llvm_copy_value(context(), m_block, arg, dval.value(), 
typespec);
+       }
 }
 
 ValueHandle LLVMCodeGenerator::map_argument(size_t input_index, const TypeSpec 
*typespec)

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

Reply via email to