[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