[Bf-blender-cvs] [96dfa68e5f6] master: Cleanup: extract function that slices parameters for multi-function call
Jacques Lucke
noreply at git.blender.org
Sun Jan 22 00:13:57 CET 2023
Commit: 96dfa68e5f6597f180794fc5bba68cb39c064540
Author: Jacques Lucke
Date: Sun Jan 22 00:13:47 2023 +0100
Branches: master
https://developer.blender.org/rB96dfa68e5f6597f180794fc5bba68cb39c064540
Cleanup: extract function that slices parameters for multi-function call
===================================================================
M source/blender/functions/intern/multi_function.cc
===================================================================
diff --git a/source/blender/functions/intern/multi_function.cc b/source/blender/functions/intern/multi_function.cc
index 2f83ab08879..7cf79cc4b81 100644
--- a/source/blender/functions/intern/multi_function.cc
+++ b/source/blender/functions/intern/multi_function.cc
@@ -62,6 +62,54 @@ static int64_t compute_alignment(const int64_t grain_size)
return 32;
}
+static void add_sliced_parameters(const Signature &signature,
+ Params &full_params,
+ const IndexRange slice_range,
+ ParamsBuilder &r_sliced_params)
+{
+ for (const int param_index : signature.params.index_range()) {
+ const ParamType ¶m_type = signature.params[param_index].type;
+ switch (param_type.category()) {
+ case ParamCategory::SingleInput: {
+ const GVArray &varray = full_params.readonly_single_input(param_index);
+ r_sliced_params.add_readonly_single_input(varray.slice(slice_range));
+ break;
+ }
+ case ParamCategory::SingleMutable: {
+ const GMutableSpan span = full_params.single_mutable(param_index);
+ const GMutableSpan sliced_span = span.slice(slice_range);
+ r_sliced_params.add_single_mutable(sliced_span);
+ break;
+ }
+ case ParamCategory::SingleOutput: {
+ if (bool(signature.params[param_index].flag & ParamFlag::SupportsUnusedOutput)) {
+ const GMutableSpan span = full_params.uninitialized_single_output_if_required(
+ param_index);
+ if (span.is_empty()) {
+ r_sliced_params.add_ignored_single_output();
+ }
+ else {
+ const GMutableSpan sliced_span = span.slice(slice_range);
+ r_sliced_params.add_uninitialized_single_output(sliced_span);
+ }
+ }
+ else {
+ const GMutableSpan span = full_params.uninitialized_single_output(param_index);
+ const GMutableSpan sliced_span = span.slice(slice_range);
+ r_sliced_params.add_uninitialized_single_output(sliced_span);
+ }
+ break;
+ }
+ case ParamCategory::VectorInput:
+ case ParamCategory::VectorMutable:
+ case ParamCategory::VectorOutput: {
+ BLI_assert_unreachable();
+ break;
+ }
+ }
+ }
+}
+
void MultiFunction::call_auto(IndexMask mask, Params params, Context context) const
{
if (mask.is_empty()) {
@@ -102,53 +150,9 @@ void MultiFunction::call_auto(IndexMask mask, Params params, Context context) co
Vector<int64_t> offset_mask_indices;
const IndexMask offset_mask = mask.slice_and_offset(sub_range, offset_mask_indices);
- ParamsBuilder offset_params{*this, offset_mask.min_array_size()};
-
- /* Slice all parameters so that for the actual function call. */
- for (const int param_index : this->param_indices()) {
- const ParamType param_type = this->param_type(param_index);
- switch (param_type.category()) {
- case ParamCategory::SingleInput: {
- const GVArray &varray = params.readonly_single_input(param_index);
- offset_params.add_readonly_single_input(varray.slice(input_slice_range));
- break;
- }
- case ParamCategory::SingleMutable: {
- const GMutableSpan span = params.single_mutable(param_index);
- const GMutableSpan sliced_span = span.slice(input_slice_range);
- offset_params.add_single_mutable(sliced_span);
- break;
- }
- case ParamCategory::SingleOutput: {
- if (bool(signature_ref_->params[param_index].flag &
- ParamFlag::SupportsUnusedOutput)) {
- const GMutableSpan span = params.uninitialized_single_output_if_required(
- param_index);
- if (span.is_empty()) {
- offset_params.add_ignored_single_output();
- }
- else {
- const GMutableSpan sliced_span = span.slice(input_slice_range);
- offset_params.add_uninitialized_single_output(sliced_span);
- }
- }
- else {
- const GMutableSpan span = params.uninitialized_single_output(param_index);
- const GMutableSpan sliced_span = span.slice(input_slice_range);
- offset_params.add_uninitialized_single_output(sliced_span);
- }
- break;
- }
- case ParamCategory::VectorInput:
- case ParamCategory::VectorMutable:
- case ParamCategory::VectorOutput: {
- BLI_assert_unreachable();
- break;
- }
- }
- }
-
- this->call(offset_mask, offset_params, context);
+ ParamsBuilder sliced_params{*this, offset_mask.min_array_size()};
+ add_sliced_parameters(*signature_ref_, params, input_slice_range, sliced_params);
+ this->call(offset_mask, sliced_params, context);
});
}
More information about the Bf-blender-cvs
mailing list