diff options
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r-- | source/blender/blenlib/BLI_virtual_array_devirtualize.hh | 13 | ||||
-rw-r--r-- | source/blender/blenlib/tests/BLI_virtual_array_test.cc | 2 |
2 files changed, 13 insertions, 2 deletions
diff --git a/source/blender/blenlib/BLI_virtual_array_devirtualize.hh b/source/blender/blenlib/BLI_virtual_array_devirtualize.hh index 36369211bfb..2eec4a4121f 100644 --- a/source/blender/blenlib/BLI_virtual_array_devirtualize.hh +++ b/source/blender/blenlib/BLI_virtual_array_devirtualize.hh @@ -71,7 +71,18 @@ template<typename Fn, typename... Args> class ArrayDevirtualizer { template<size_t... I> void execute_fallback_impl(std::index_sequence<I...> /* indices */) { - fn_(mask_, mask_, *std::get<I>(params_)...); + fn_(mask_, mask_, this->get_execute_param<I>()...); + } + + template<size_t I> auto get_execute_param() + { + using ParamTag = std::tuple_element_t<I, TagsTuple>; + if constexpr (std::is_base_of_v<SingleInputTagBase, ParamTag>) { + return *std::get<I>(params_); + } + else if constexpr (std::is_base_of_v<SingleOutputTagBase, ParamTag>) { + return std::get<I>(params_)->data(); + } } }; diff --git a/source/blender/blenlib/tests/BLI_virtual_array_test.cc b/source/blender/blenlib/tests/BLI_virtual_array_test.cc index 714e5e82860..b5851d5c5b3 100644 --- a/source/blender/blenlib/tests/BLI_virtual_array_test.cc +++ b/source/blender/blenlib/tests/BLI_virtual_array_test.cc @@ -225,7 +225,7 @@ TEST(virtual_array, MaterializeCompressed) TEST(virtual_array, Devirtualize) { - auto fn = [](auto in_indices, auto out_indices, auto in1, auto in2, MutableSpan<int> out1) { + auto fn = [](auto in_indices, auto out_indices, auto in1, auto in2, int *__restrict out1) { for (const int64_t i : IndexRange(in_indices.size())) { const int64_t in_i = in_indices[i]; const int64_t out_i = out_indices[i]; |