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;
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to