Geometry Nodes: skip unused output of multi-function when evaluating on single values
This is slight optimization. Number of nodes with additional outputs like `Valid` flag of other math-related things will be more in future, its better to strict api and do not evaluate even singles. This also can reduce number of logged values. Pull Request: https://projects.blender.org/blender/blender/pulls/121799
This commit is contained in:
parent
f3af98db5c
commit
0507dc8c2a
@ -546,6 +546,9 @@ static void execute_multi_function_on_value_variant(const MultiFunction &fn,
|
||||
|
||||
/* Store the new fields in the output. */
|
||||
for (const int i : output_values.index_range()) {
|
||||
if (output_values[i] == nullptr) {
|
||||
continue;
|
||||
}
|
||||
output_values[i]->set(GField{operation, i});
|
||||
}
|
||||
}
|
||||
@ -563,6 +566,10 @@ static void execute_multi_function_on_value_variant(const MultiFunction &fn,
|
||||
params.add_readonly_single_input(GPointer{cpp_type, value});
|
||||
}
|
||||
for (const int i : output_values.index_range()) {
|
||||
if (output_values[i] == nullptr) {
|
||||
params.add_ignored_single_output("");
|
||||
continue;
|
||||
}
|
||||
SocketValueVariant &output_variant = *output_values[i];
|
||||
const CPPType &cpp_type = fn.param_type(params.next_param_index()).data_type().single_type();
|
||||
const eNodeSocketDatatype socket_type =
|
||||
@ -716,12 +723,19 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction {
|
||||
input_values[i] = params.try_get_input_data_ptr<SocketValueVariant>(i);
|
||||
}
|
||||
for (const int i : outputs_.index_range()) {
|
||||
output_values[i] = new (params.get_output_data_ptr(i)) SocketValueVariant();
|
||||
if (params.get_output_usage(i) != lf::ValueUsage::Unused) {
|
||||
output_values[i] = new (params.get_output_data_ptr(i)) SocketValueVariant();
|
||||
}
|
||||
else {
|
||||
output_values[i] = nullptr;
|
||||
}
|
||||
}
|
||||
execute_multi_function_on_value_variant(
|
||||
*fn_item_.fn, fn_item_.owned_fn, input_values, output_values);
|
||||
for (const int i : outputs_.index_range()) {
|
||||
params.output_set(i);
|
||||
if (params.get_output_usage(i) != lf::ValueUsage::Unused) {
|
||||
params.output_set(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user