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