[Bf-blender-cvs] [96b9f0d021d] devirtualizer: progress

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


Commit: 96b9f0d021dd0554b37927aadb184467af3ab0e2
Author: Jacques Lucke
Date:   Sun Apr 10 14:42:41 2022 +0200
Branches: devirtualizer
https://developer.blender.org/rB96b9f0d021dd0554b37927aadb184467af3ab0e2

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 8c1213e3c0b..9dc25e3aa7e 100644
--- a/source/blender/blenlib/BLI_virtual_array_devirtualize.hh
+++ b/source/blender/blenlib/BLI_virtual_array_devirtualize.hh
@@ -102,9 +102,11 @@ template<typename Fn, typename... Args> class ArrayDevirtualizer {
   void try_execute_devirtualized_impl_call(std::tuple<Mode...> /* modes */,
                                            std::index_sequence<I...> /* indices */)
   {
-    fn_(mask_,
-        mask_,
-        this->get_execute_param<I, std::tuple_element_t<I, std::tuple<Mode...>>>()...);
+    mask_.to_best_mask_type([&](auto mask) {
+      fn_(mask,
+          mask,
+          this->get_execute_param<I, std::tuple_element_t<I, std::tuple<Mode...>>>()...);
+    });
     executed_ = true;
   }
 
diff --git a/source/blender/blenlib/tests/BLI_virtual_array_test.cc b/source/blender/blenlib/tests/BLI_virtual_array_test.cc
index 91df8b06540..95222e72bb0 100644
--- a/source/blender/blenlib/tests/BLI_virtual_array_test.cc
+++ b/source/blender/blenlib/tests/BLI_virtual_array_test.cc
@@ -246,8 +246,8 @@ TEST(virtual_array, Devirtualize)
   IndexMask mask(IndexRange(10));
   VArray<int> in1 = VArray<int>::ForSingle(3, 10);
   // VArray<int> in2 = VArray<int>::ForSingle(5, 10);
-  VArray<int> in2 = VArray<int>::ForContainer(Array<int>(10, 5));
-  // VArray<int> in2 = VArray<int>::ForFunc(10, [](int64_t i) { return (int)i; });
+  // VArray<int> in2 = VArray<int>::ForContainer(Array<int>(10, 5));
+  VArray<int> in2 = VArray<int>::ForFunc(10, [](int64_t i) { return (int)i; });
   std::array<int, 10> out1_array;
   MutableSpan<int> out1 = out1_array;
   out1.fill(-1);
@@ -255,7 +255,9 @@ TEST(virtual_array, Devirtualize)
   ArrayDevirtualizer<decltype(fn), SingleInputTag<int>, SingleInputTag<int>, SingleOutputTag<int>>
       devirtualizer{fn, &mask, &in1, &in2, &out1};
 
-  devirtualizer.try_execute_devirtualized();
+  if (!devirtualizer.try_execute_devirtualized()) {
+    devirtualizer.execute_fallback();
+  }
 
   EXPECT_EQ(out1[0], 8);
   EXPECT_EQ(out1[1], 8);



More information about the Bf-blender-cvs mailing list