[Bf-blender-cvs] [49553de6621] functions: vectorized Separate Vector node

Jacques Lucke noreply at git.blender.org
Sat Apr 6 21:18:23 CEST 2019


Commit: 49553de66210e63f3edb665efb46ee5f1b05d009
Author: Jacques Lucke
Date:   Sat Apr 6 21:06:06 2019 +0200
Branches: functions
https://developer.blender.org/rB49553de66210e63f3edb665efb46ee5f1b05d009

vectorized Separate Vector node

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

M	source/blender/functions/core/function.hpp
M	source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
M	source/blender/functions/functions/auto_vectorization.cpp
M	source/blender/functions/functions/vectors.cpp

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

diff --git a/source/blender/functions/core/function.hpp b/source/blender/functions/core/function.hpp
index 17360d81ae2..2c3f9315e59 100644
--- a/source/blender/functions/core/function.hpp
+++ b/source/blender/functions/core/function.hpp
@@ -81,6 +81,7 @@ namespace FN {
 		template<typename T>
 		inline bool has_body() const
 		{
+			static_assert(std::is_base_of<FunctionBody, T>::value, "");
 			return this->body<T>() != nullptr;
 		}
 
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
index f0b9b6d6f1f..f204cd70c08 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
@@ -253,14 +253,33 @@ namespace FN { namespace DataFlowNodes {
 		builder.map_sockets(ctx, node, bnode);
 	}
 
+	static void insert_separate_vector_node(
+		Builder &builder,
+		const BuilderContext &ctx,
+		bNode *bnode)
+	{
+		PointerRNA ptr;
+		ctx.get_rna(bnode, &ptr);
+
+		SmallVector<bool> vectorized_inputs = {
+			vectorized_socket_is_list(&ptr, "use_list__vector"),
+		};
+
+		SharedFunction &original_fn = Functions::separate_vector();
+		SharedFunction final_fn = original_or_vectorized(
+			original_fn, vectorized_inputs);
+
+		Node *node = builder.insert_function(final_fn, ctx.btree(), bnode);
+		builder.map_sockets(ctx, node, bnode);
+	}
+
 	void register_node_inserters(GraphInserters &inserters)
 	{
-		inserters.reg_node_function("fn_SeparateVectorNode", Functions::separate_vector);
 		inserters.reg_node_function("fn_VectorDistanceNode", Functions::separate_vector);
 		inserters.reg_node_function("fn_RandomNumberNode", Functions::random_number);
 		inserters.reg_node_function("fn_MapRangeNode", Functions::map_range);
-		//inserters.reg_node_function("fn_CombineVectorNode", Functions::combine_vector);
 
+		inserters.reg_node_inserter("fn_SeparateVectorNode", insert_separate_vector_node);
 		inserters.reg_node_inserter("fn_CombineVectorNode", insert_combine_vector_node);
 		inserters.reg_node_inserter("fn_ObjectTransformsNode", insert_object_transforms_node);
 		inserters.reg_node_inserter("fn_FloatMathNode", insert_float_math_node);
diff --git a/source/blender/functions/functions/auto_vectorization.cpp b/source/blender/functions/functions/auto_vectorization.cpp
index 616d1e42ac9..a8f82bd76af 100644
--- a/source/blender/functions/functions/auto_vectorization.cpp
+++ b/source/blender/functions/functions/auto_vectorization.cpp
@@ -3,6 +3,7 @@
 #include "FN_functions.hpp"
 #include "FN_types.hpp"
 #include "FN_tuple_call.hpp"
+#include "FN_llvm.hpp"
 
 namespace FN { namespace Functions {
 
@@ -163,7 +164,7 @@ namespace FN { namespace Functions {
 
 			body->call__setup_stack(append_in, append_out, ctx);
 
-			Tuple::relocate_element(append_out, index, fn_out, index);
+			Tuple::relocate_element(append_out, 0, fn_out, index);
 		}
 	};
 
@@ -187,6 +188,15 @@ namespace FN { namespace Functions {
 		BLI_assert(vectorize_input.size() == input_amount);
 		BLI_assert(any_true(vectorize_input));
 
+		if (!original_fn->has_body<TupleCallBody>()) {
+			if (original_fn->has_body<LLVMBuildIRBody>()) {
+				derive_TupleCallBody_from_LLVMBuildIRBody(original_fn, *(new llvm::LLVMContext()));
+			}
+			else {
+				BLI_assert(false);
+			}
+		}
+
 		InputParameters inputs;
 		for (uint i = 0; i < input_amount; i++) {
 			auto original_parameter = original_fn->signature().inputs()[i];
diff --git a/source/blender/functions/functions/vectors.cpp b/source/blender/functions/functions/vectors.cpp
index e86365c2a3f..0502dc4295c 100644
--- a/source/blender/functions/functions/vectors.cpp
+++ b/source/blender/functions/functions/vectors.cpp
@@ -37,7 +37,6 @@ namespace FN { namespace Functions {
 			OutputParameter("Vector", get_fvec3_type()),
 		}));
 		fn->add_body(new CombineVectorGen());
-		derive_TupleCallBody_from_LLVMBuildIRBody(fn, *(new llvm::LLVMContext()));
 		return fn;
 	}



More information about the Bf-blender-cvs mailing list