[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