Blender V4.3
FN_lazy_function_graph_executor.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
14#include "BLI_vector.hh"
15#include "BLI_vector_set.hh"
16
18
20
25 public:
26 virtual ~GraphExecutorLogger() = default;
27
28 virtual void log_socket_value(const Socket &socket,
29 GPointer value,
30 const Context &context) const;
31
32 virtual void log_before_node_execute(const FunctionNode &node,
33 const Params &params,
34 const Context &context) const;
35
36 virtual void log_after_node_execute(const FunctionNode &node,
37 const Params &params,
38 const Context &context) const;
39
40 virtual void dump_when_outputs_are_missing(const FunctionNode &node,
41 Span<const OutputSocket *> missing_sockets,
42 const Context &context) const;
43 virtual void dump_when_input_is_set_twice(const InputSocket &target_socket,
44 const OutputSocket &from_socket,
45 const Context &context) const;
46};
47
58
65 public:
67
72 virtual void execute_node(const FunctionNode &node,
74 const Context &context) const = 0;
75};
76
78 public:
82
83 private:
87 const Graph &graph_;
93 Array<int> graph_input_index_by_socket_index_;
94 Array<int> graph_output_index_by_socket_index_;
98 const Logger *logger_;
103 const SideEffectProvider *side_effect_provider_;
107 const NodeExecuteWrapper *node_execute_wrapper_;
108
114 struct {
119 } init_buffer_info_;
120
121 friend class Executor;
122
123 public:
124 GraphExecutor(const Graph &graph,
127 const Logger *logger,
128 const SideEffectProvider *side_effect_provider,
129 const NodeExecuteWrapper *node_execute_wrapper);
130
131 void *init_storage(LinearAllocator<> &allocator) const override;
132 void destruct_storage(void *storage) const override;
133
134 std::string input_name(int index) const override;
135 std::string output_name(int index) const override;
136
137 private:
138 void execute_impl(Params &params, const Context &context) const override;
139};
140
141} // namespace blender::fn::lazy_function
virtual void log_before_node_execute(const FunctionNode &node, const Params &params, const Context &context) const
virtual void dump_when_outputs_are_missing(const FunctionNode &node, Span< const OutputSocket * > missing_sockets, const Context &context) const
virtual void log_after_node_execute(const FunctionNode &node, const Params &params, const Context &context) const
virtual void log_socket_value(const Socket &socket, GPointer value, const Context &context) const
virtual void dump_when_input_is_set_twice(const InputSocket &target_socket, const OutputSocket &from_socket, const Context &context) const
virtual void execute_node(const FunctionNode &node, Params &params, const Context &context) const =0
virtual Vector< const FunctionNode * > get_nodes_with_side_effects(const Context &context) const
void * init_storage(LinearAllocator<> &allocator) const override
GraphExecutor(const Graph &graph, Vector< const GraphInputSocket * > graph_inputs, Vector< const GraphOutputSocket * > graph_outputs, const Logger *logger, const SideEffectProvider *side_effect_provider, const NodeExecuteWrapper *node_execute_wrapper)
std::string output_name(int index) const override
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]