[Bf-blender-cvs] [3bcb30b13b6] temp-varray-get-set-multiple: cleanup

Jacques Lucke noreply at git.blender.org
Sun Sep 26 15:09:35 CEST 2021


Commit: 3bcb30b13b6085c19e7173953beb899171d1e130
Author: Jacques Lucke
Date:   Sun Sep 26 13:39:27 2021 +0200
Branches: temp-varray-get-set-multiple
https://developer.blender.org/rB3bcb30b13b6085c19e7173953beb899171d1e130

cleanup

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

M	source/blender/blenlib/BLI_virtual_array.hh
M	source/blender/functions/intern/field.cc

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

diff --git a/source/blender/blenlib/BLI_virtual_array.hh b/source/blender/blenlib/BLI_virtual_array.hh
index 09741c0a42d..8c348625226 100644
--- a/source/blender/blenlib/BLI_virtual_array.hh
+++ b/source/blender/blenlib/BLI_virtual_array.hh
@@ -743,6 +743,10 @@ class VMutableArray_For_DerivedSpan : public VMutableArray<ElemT> {
       const ElemT *src_ptr = src_varray.get_internal_span().data();
       mask.foreach_index([&](const int64_t i) { SetFunc(data_[i], src_ptr[i]); });
     }
+    else if (src_varray.is_single()) {
+      const ElemT src_value = src_varray.get_internal_single();
+      mask.foreach_index([&](const int64_t i) { SetFunc(data_[i], src_value); });
+    }
     else {
       mask.foreach_index([&](const int64_t i) { SetFunc(data_[i], src_varray.get(i)); });
     }
@@ -750,7 +754,7 @@ class VMutableArray_For_DerivedSpan : public VMutableArray<ElemT> {
 
   virtual bool can_set_multiple_efficiently_impl(const VArray<ElemT> &src_varray) const
   {
-    return src_varray.is_span();
+    return src_varray.is_span() || src_varray.is_single();
   }
 };
 
diff --git a/source/blender/functions/intern/field.cc b/source/blender/functions/intern/field.cc
index 3930165b58f..c34182924cb 100644
--- a/source/blender/functions/intern/field.cc
+++ b/source/blender/functions/intern/field.cc
@@ -468,21 +468,7 @@ Vector<const GVArray *> evaluate_fields(ResourceScope &scope,
         /* The result has been written into the destination provided by the caller already. */
         continue;
       }
-      /* Still have to copy over the data in the destination provided by the caller. */
-      if (output_varray->is_span()) {
-        /* Materialize into a span. */
-        computed_varray->get_multiple_to_uninitialized(output_varray->get_internal_span().data(),
-                                                       mask);
-      }
-      else {
-        /* Slower materialize into a different structure. */
-        const CPPType &type = computed_varray->type();
-        BUFFER_FOR_CPP_TYPE_VALUE(type, buffer);
-        for (const int i : mask) {
-          computed_varray->get_to_uninitialized(i, buffer);
-          output_varray->set_by_relocate(i, buffer);
-        }
-      }
+      output_varray->set_multiple_by_copy(*computed_varray, mask);
       r_varrays[out_index] = output_varray;
     }
   }



More information about the Bf-blender-cvs mailing list