Blender V4.3
lazy_function_execute.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10
12
13/* -------------------------------------------------------------------- */
18 const Span<GMutablePointer> inputs,
19 const Span<GMutablePointer> outputs,
20 MutableSpan<std::optional<ValueUsage>> input_usages,
21 Span<ValueUsage> output_usages,
22 MutableSpan<bool> set_outputs)
23 : Params(fn, true),
24 inputs_(inputs),
25 outputs_(outputs),
26 input_usages_(input_usages),
27 output_usages_(output_usages),
28 set_outputs_(set_outputs)
29{
30}
31
32void *BasicParams::try_get_input_data_ptr_impl(const int index) const
33{
34 return inputs_[index].get();
35}
36
38{
39 void *value = inputs_[index].get();
40 if (value == nullptr) {
41 input_usages_[index] = ValueUsage::Used;
42 }
43 return value;
44}
45
47{
48 return outputs_[index].get();
49}
50
51void BasicParams::output_set_impl(const int index)
52{
53 set_outputs_[index] = true;
54}
55
56bool BasicParams::output_was_set_impl(const int index) const
57{
58 return set_outputs_[index];
59}
60
62{
63 return output_usages_[index];
64}
65
67{
68 input_usages_[index] = ValueUsage::Unused;
69}
70
72{
73 return true;
74}
75
78/* -------------------------------------------------------------------- */
83 Params &base_params,
84 const Span<int> input_map,
85 const Span<int> output_map,
86 bool &multi_threading_enabled)
87 : Params(fn, multi_threading_enabled),
88 base_params_(base_params),
89 input_map_(input_map),
90 output_map_(output_map),
91 multi_threading_enabled_(multi_threading_enabled)
92{
93}
94
96{
97 return base_params_.try_get_input_data_ptr(input_map_[index]);
98}
99
101{
102 return base_params_.try_get_input_data_ptr_or_request(input_map_[index]);
103}
104
106{
107 return base_params_.get_output_data_ptr(output_map_[index]);
108}
109
111{
112 return base_params_.output_set(output_map_[index]);
113}
114
115bool RemappedParams::output_was_set_impl(const int index) const
116{
117 return base_params_.output_was_set(output_map_[index]);
118}
119
121{
122 return base_params_.get_output_usage(output_map_[index]);
123}
124
126{
127 return base_params_.set_input_unused(input_map_[index]);
128}
129
131{
132 if (multi_threading_enabled_) {
133 return true;
134 }
135 if (base_params_.try_enable_multi_threading()) {
136 multi_threading_enabled_ = true;
137 return true;
138 }
139 return false;
140}
141
144} // namespace blender::fn::lazy_function
void set_input_unused_impl(const int index) override
BasicParams(const LazyFunction &fn, Span< GMutablePointer > inputs, Span< GMutablePointer > outputs, MutableSpan< std::optional< ValueUsage > > input_usages, Span< ValueUsage > output_usages, MutableSpan< bool > set_outputs)
void * get_output_data_ptr_impl(const int index) override
void * try_get_input_data_ptr_or_request_impl(const int index) override
ValueUsage get_output_usage_impl(const int index) const override
bool output_was_set_impl(const int index) const override
void * try_get_input_data_ptr_impl(const int index) const override
void output_set_impl(const int index) override
void * try_get_input_data_ptr_or_request(int index)
void * try_get_input_data_ptr(int index) const
ValueUsage get_output_usage(int index) const
void * get_output_data_ptr_impl(const int index) override
void * try_get_input_data_ptr_impl(const int index) const override
RemappedParams(const LazyFunction &fn, Params &base_params, Span< int > input_map, Span< int > output_map, bool &multi_threading_enabled)
bool output_was_set_impl(const int index) const override
ValueUsage get_output_usage_impl(const int index) const override
void set_input_unused_impl(const int index) override
void * try_get_input_data_ptr_or_request_impl(const int index) override