[Bf-blender-cvs] [7b75b665d35] functions: group node info into a struct
Jacques Lucke
noreply at git.blender.org
Sun Apr 28 18:57:35 CEST 2019
Commit: 7b75b665d3518472e3f19c394ff2677835d56671
Author: Jacques Lucke
Date: Sun Apr 28 15:06:23 2019 +0200
Branches: functions
https://developer.blender.org/rB7b75b665d3518472e3f19c394ff2677835d56671
group node info into a struct
===================================================================
M source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
===================================================================
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 6b7ce6fe1dd..7e9f6af2630 100644
--- a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
+++ b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
@@ -28,9 +28,29 @@ class ExecuteFGraph : public TupleCallBody {
FunctionGraph m_fgraph;
DataFlowGraph *m_graph;
- SmallVector<TupleCallBody *> m_bodies;
- SmallVector<uint> m_input_starts;
- SmallVector<uint> m_output_starts;
+ struct NodeInfo {
+ union {
+ TupleCallBody *direct;
+ LazyInTupleCallBody *lazy;
+ } body;
+ uint input_start;
+ uint output_start;
+ bool is_lazy;
+
+ NodeInfo(TupleCallBody *body, uint input_start, uint output_start)
+ : input_start(input_start), output_start(output_start), is_lazy(false)
+ {
+ this->body.direct = body;
+ }
+
+ NodeInfo(LazyInTupleCallBody *body, uint input_start, uint output_start)
+ : input_start(input_start), output_start(output_start), is_lazy(true)
+ {
+ this->body.lazy = body;
+ }
+ };
+
+ SmallVector<NodeInfo> m_node_info;
struct SocketInfo {
CPPTypeInfo *type;
@@ -57,14 +77,11 @@ class ExecuteFGraph : public TupleCallBody {
for (uint node_id : m_graph->node_ids()) {
SharedFunction &fn = m_graph->function_of_node(node_id);
TupleCallBody *body = fn->body<TupleCallBody>();
- m_bodies.append(body);
+ m_node_info.append(NodeInfo(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_input_starts.append(m_inputs_buffer_size);
- m_output_starts.append(m_outputs_buffer_size);
-
if (body == nullptr) {
for (auto param : fn->signature().inputs()) {
CPPTypeInfo *type_info = param.type()->extension<CPPTypeInfo>();
@@ -132,12 +149,12 @@ class ExecuteFGraph : public TupleCallBody {
void *node_input_values_ptr(uint node_id)
{
- return POINTER_OFFSET(m_input_values, m_parent.m_input_starts[node_id]);
+ return POINTER_OFFSET(m_input_values, m_parent.m_node_info[node_id].input_start);
}
void *node_output_values_ptr(uint node_id)
{
- return POINTER_OFFSET(m_output_values, m_parent.m_output_starts[node_id]);
+ return POINTER_OFFSET(m_output_values, m_parent.m_node_info[node_id].output_start);
}
bool *node_input_inits_ptr(uint node_id)
@@ -258,7 +275,8 @@ class ExecuteFGraph : public TupleCallBody {
}
if (all_inputs_computed) {
- TupleCallBody *body = m_bodies[node_id];
+ BLI_assert(!m_node_info[node_id].is_lazy);
+ TupleCallBody *body = m_node_info[node_id].body.direct;
BLI_assert(body);
Tuple body_in(body->meta_in(),
More information about the Bf-blender-cvs
mailing list