Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2022-04-10 14:14:12 +0300
committerJacques Lucke <jacques@blender.org>2022-04-10 14:14:12 +0300
commit91fd4ff9249de39bd41e1e664b93e4f7b3aef7ca (patch)
tree82e831551e36de0de7a0b16e58e14bac6b91349e
parent594596d5aa2912f616a63946c30493b8a156c0bc (diff)
progress
-rw-r--r--source/blender/blenlib/BLI_virtual_array_devirtualize.hh13
-rw-r--r--source/blender/blenlib/tests/BLI_virtual_array_test.cc2
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];