Blender V5.0
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
13
15#include "BLI_vector.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,
125 const Logger *logger,
126 const SideEffectProvider *side_effect_provider,
127 const NodeExecuteWrapper *node_execute_wrapper);
128
129 GraphExecutor(const Graph &graph,
132 const Logger *logger,
133 const SideEffectProvider *side_effect_provider,
134 const NodeExecuteWrapper *node_execute_wrapper);
135
136 void *init_storage(LinearAllocator<> &allocator) const override;
137 void destruct_storage(void *storage) const override;
138
139 std::string input_name(int index) const override;
140 std::string output_name(int index) const override;
141
142 private:
143 void execute_impl(Params &params, const Context &context) const override;
144};
145
146} // 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
std::string output_name(int index) const override
GraphExecutor(const Graph &graph, const Logger *logger, const SideEffectProvider *side_effect_provider, const NodeExecuteWrapper *node_execute_wrapper)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]