[Bf-blender-cvs] [0f9c5bd] object_nodes: Fix graph return values: Not all value types are returned as duals.
Lukas Tönne
noreply at git.blender.org
Fri Jun 24 10:24:28 CEST 2016
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)
More information about the Bf-blender-cvs
mailing list