[Bf-blender-cvs] [91fd4ff9249] devirtualizer: progress

Jacques Lucke noreply at git.blender.org
Sun Apr 10 16:00:25 CEST 2022


Commit: 91fd4ff9249de39bd41e1e664b93e4f7b3aef7ca
Author: Jacques Lucke
Date:   Sun Apr 10 13:14:12 2022 +0200
Branches: devirtualizer
https://developer.blender.org/rB91fd4ff9249de39bd41e1e664b93e4f7b3aef7ca

progress

===================================================================

M	source/blender/blenlib/BLI_virtual_array_devirtualize.hh
M	source/blender/blenlib/tests/BLI_virtual_array_test.cc

===================================================================

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];



More information about the Bf-blender-cvs mailing list