[Bf-blender-cvs] [3cb181ffe0b] functions: utilities to access function parameters

Jacques Lucke noreply at git.blender.org
Mon May 13 10:17:02 CEST 2019


Commit: 3cb181ffe0b5353e3f3502df699436b9eb641098
Author: Jacques Lucke
Date:   Sun May 12 20:25:49 2019 +0200
Branches: functions
https://developer.blender.org/rB3cb181ffe0b5353e3f3502df699436b9eb641098

utilities to access function parameters

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

M	source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
M	source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
M	source/blender/functions/core/core-c.cpp
M	source/blender/functions/core/data_flow_graph.hpp
M	source/blender/functions/core/data_flow_graph_builder.cpp
M	source/blender/functions/core/data_flow_graph_builder.hpp
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/lists.cpp

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

diff --git a/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp b/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
index 4360681189a..8f38360fe26 100644
--- a/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
@@ -63,16 +63,16 @@ static llvm::Function *insert_tuple_call_function(SharedFunction &fn, llvm::Modu
   context_ptr->setName("context");
 
   LLVMValues input_values;
-  for (uint i = 0; i < fn->signature().inputs().size(); i++) {
+  for (uint i = 0; i < fn->input_amount(); i++) {
     llvm::Value *value_byte_addr = lookup_tuple_address(builder, fn_in_data, fn_in_offsets, i);
 
-    LLVMTypeInfo *type_info = get_type_info(fn->signature().inputs()[i].type());
+    LLVMTypeInfo *type_info = get_type_info(fn->input_type(i));
     llvm::Value *value = type_info->build_load_ir__relocate(builder, value_byte_addr);
 
     input_values.append(value);
   }
 
-  LLVMValues output_values(fn->signature().outputs().size());
+  LLVMValues output_values(fn->output_amount());
   BuildIRSettings settings;
   FunctionIRCache function_cache;
   CodeInterface interface(input_values, output_values, context_ptr, function_cache);
@@ -81,7 +81,7 @@ static llvm::Function *insert_tuple_call_function(SharedFunction &fn, llvm::Modu
   for (uint i = 0; i < output_values.size(); i++) {
     llvm::Value *value_byte_addr = lookup_tuple_address(builder, fn_out_data, fn_out_offsets, i);
 
-    LLVMTypeInfo *type_info = get_type_info(fn->signature().outputs()[i].type());
+    LLVMTypeInfo *type_info = get_type_info(fn->output_type(i));
     type_info->build_store_ir__relocate(builder, output_values[i], value_byte_addr);
   }
 
diff --git a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
index aa4ef14d319..28454ea76a5 100644
--- a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
+++ b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
@@ -79,8 +79,8 @@ class ExecuteFGraph : public TupleCallBody {
       m_node_info.append(
           NodeInfo(body, is_lazy_body, m_inputs_buffer_size, m_outputs_buffer_size));
 
-      m_inputs_init_buffer_size += fn->signature().inputs().size();
-      m_outputs_init_buffer_size += fn->signature().outputs().size();
+      m_inputs_init_buffer_size += fn->input_amount();
+      m_outputs_init_buffer_size += fn->output_amount();
 
       if (body == nullptr) {
         for (auto param : fn->signature().inputs()) {
@@ -101,14 +101,14 @@ class ExecuteFGraph : public TupleCallBody {
       }
       else {
         SharedTupleMeta &meta_in = body->meta_in();
-        for (uint i = 0; i < fn->signature().inputs().size(); i++) {
+        for (uint i = 0; i < fn->input_amount(); i++) {
           m_input_info.append(SocketInfo(
               meta_in->type_infos()[i], m_inputs_buffer_size + meta_in->offsets()[i], false));
         }
         m_inputs_buffer_size += meta_in->size_of_data();
 
         SharedTupleMeta &meta_out = body->meta_out();
-        for (uint i = 0; i < fn->signature().outputs().size(); i++) {
+        for (uint i = 0; i < fn->output_amount(); i++) {
           m_output_info.append(SocketInfo(
               meta_out->type_infos()[i], m_outputs_buffer_size + meta_out->offsets()[i], false));
         }
diff --git a/source/blender/functions/core/core-c.cpp b/source/blender/functions/core/core-c.cpp
index 6b32edf0324..d59d0147e39 100644
--- a/source/blender/functions/core/core-c.cpp
+++ b/source/blender/functions/core/core-c.cpp
@@ -34,24 +34,24 @@ bool FN_function_has_signature(FnFunction fn, FnType *inputs, FnType *outputs)
 
 uint FN_input_amount(FnFunction fn)
 {
-  return unwrap(fn)->signature().inputs().size();
+  return unwrap(fn)->input_amount();
 }
 
 uint FN_output_amount(FnFunction fn)
 {
-  return unwrap(fn)->signature().outputs().size();
+  return unwrap(fn)->output_amount();
 }
 
 bool FN_input_has_type(FnFunction fn, uint index, FnType type)
 {
-  Type *type1 = unwrap(fn)->signature().inputs()[index].type().ptr();
+  Type *type1 = unwrap(fn)->input_type(index).ptr();
   Type *type2 = unwrap(type);
   return type1 == type2;
 }
 
 bool FN_output_has_type(FnFunction fn, uint index, FnType type)
 {
-  Type *type1 = unwrap(fn)->signature().outputs()[index].type().ptr();
+  Type *type1 = unwrap(fn)->output_type(index).ptr();
   Type *type2 = unwrap(type);
   return type1 == type2;
 }
diff --git a/source/blender/functions/core/data_flow_graph.hpp b/source/blender/functions/core/data_flow_graph.hpp
index 38865b373dc..1aed1c5695b 100644
--- a/source/blender/functions/core/data_flow_graph.hpp
+++ b/source/blender/functions/core/data_flow_graph.hpp
@@ -199,8 +199,7 @@ class DataFlowGraph : public RefCountedBase {
   Range<uint> input_ids_of_node(uint node_id) const
   {
     MyNode &node = m_nodes[node_id];
-    return Range<uint>(node.inputs_start,
-                       node.inputs_start + node.function->signature().inputs().size());
+    return Range<uint>(node.inputs_start, node.inputs_start + node.function->input_amount());
   }
 
   DFGraphSocketSequence<Range<uint>> inputs_of_node(uint node_id) const
diff --git a/source/blender/functions/core/data_flow_graph_builder.cpp b/source/blender/functions/core/data_flow_graph_builder.cpp
index 9f30a74ddf2..8ad3a0f7bfb 100644
--- a/source/blender/functions/core/data_flow_graph_builder.cpp
+++ b/source/blender/functions/core/data_flow_graph_builder.cpp
@@ -5,10 +5,10 @@ namespace FN {
 SharedType &DFGB_Socket::type() const
 {
   if (m_is_output) {
-    return this->node()->signature().outputs()[m_index].type();
+    return this->node()->function()->output_type(m_index);
   }
   else {
-    return this->node()->signature().inputs()[m_index].type();
+    return this->node()->function()->input_type(m_index);
   }
 }
 
diff --git a/source/blender/functions/core/data_flow_graph_builder.hpp b/source/blender/functions/core/data_flow_graph_builder.hpp
index bf02734e6d0..b5019234484 100644
--- a/source/blender/functions/core/data_flow_graph_builder.hpp
+++ b/source/blender/functions/core/data_flow_graph_builder.hpp
@@ -276,12 +276,12 @@ inline SharedFunction &DFGB_Node::function()
 
 inline uint DFGB_Node::input_amount() const
 {
-  return m_function->signature().inputs().size();
+  return m_function->input_amount();
 }
 
 inline uint DFGB_Node::output_amount() const
 {
-  return m_function->signature().outputs().size();
+  return m_function->output_amount();
 }
 
 inline SourceInfo *DFGB_Node::source() const
diff --git a/source/blender/functions/core/function.hpp b/source/blender/functions/core/function.hpp
index 5d552647e1e..59a1cb57729 100644
--- a/source/blender/functions/core/function.hpp
+++ b/source/blender/functions/core/function.hpp
@@ -96,6 +96,27 @@ class Function final : public RefCountedBase {
 
   void print() const;
 
+  /* Utility accessors */
+  uint input_amount() const
+  {
+    return m_signature.inputs().size();
+  }
+
+  uint output_amount() const
+  {
+    return m_signature.outputs().size();
+  }
+
+  SharedType &input_type(uint index)
+  {
+    return m_signature.inputs()[index].type();
+  }
+
+  SharedType &output_type(uint index)
+  {
+    return m_signature.outputs()[index].type();
+  }
+
  private:
   const std::string m_name;
   Signature m_signature;
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 5e94be4826b..08a5c8a70fc 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
@@ -22,7 +22,7 @@ static SharedFunction get_vectorized_function(SharedFunction &original_fn,
                                               PointerRNA &node_rna,
                                               ArrayRef<AutoVectorizedInput> auto_vectorized_inputs)
 {
-  BLI_assert(original_fn->signature().inputs().size() == auto_vectorized_inputs.size());
+  BLI_assert(original_fn->input_amount() == auto_vectorized_inputs.size());
 
   SmallVector<bool> vectorized_inputs;
   SmallVector<SharedFunction> used_default_value_builders;
@@ -81,7 +81,7 @@ static void INSERT_float_math(BTreeGraphBuilder &builder, bNode *bnode)
   int operation = RNA_enum_get(&rna, "operation");
 
   SharedFunction &original_fn = get_float_math_function(operation);
-  uint input_amount = original_fn->signature().inputs().size();
+  uint input_amount = original_fn->input_amount();
 
   if (input_amount == 1) {
     SharedFunction fn = get_vectorized_function(
diff --git a/source/blender/functions/functions/auto_vectorization.cpp b/source/blender/functions/functions/auto_vectorization.cpp
index 0339a3cab1c..61977a1ae27 100644
--- a/source/blender/functions/functions/auto_vectorization.cpp
+++ b/source/blender/functions/functions/auto_vectorization.cpp
@@ -52,8 +52,8 @@ class AutoVectorizationGen : public LLVMBuildIRBody {
         m_empty_list_value_builders(empty_list_value_builders.to_small_vector())
   {
     BLI_assert(input_is_list.contains(true));
-    for (uint i = 0; i < main->signature().inputs().size(); i++) {
-      SharedType &base_type = main->signature().inputs()[i].type();
+    for (uint i = 0; i < main->input_amount(); i++) {
+      SharedType &base_type = main->input_type(i);
       SharedType &list_type = get_list_type(base_type);
       InputInfo info;
       info.is_list = input_is_list[i];
@@ -266,7 +266,7 @@ class AutoVectorization : public TupleCallBody {
       }
     }
     for (uint i : m_list_inputs) {
-      SharedType &base_type = main->signature().inputs()[i].type();
+      SharedType &base_type = main->input_type(i);
       m_get_length_bodies.append(GET_FN_list_length(base_type)->body<TupleCallBody>());
       m_get_element_bodies.append(GET_FN_get_list_element(base_type)->body<TupleCallBody>());
     }
@@ -316,7 +316,7 @@ class AutoVectorization : public TupleCallBody {
       iteration_frame.m_iteration = iteration;
       m_main_body->call(main_in, main_out, ctx);
 
-      for (uint i = 0; i < m_main->signature().outputs().size(); i++) {
+      for (uin

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list