[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