[Bf-blender-cvs] [318e2dd00f3] temp-varray-get-set-multiple: progress

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


Commit: 318e2dd00f3e0b0462e5e707fd2c54c41c012c56
Author: Jacques Lucke
Date:   Sat Sep 25 15:22:07 2021 +0200
Branches: temp-varray-get-set-multiple
https://developer.blender.org/rB318e2dd00f3e0b0462e5e707fd2c54c41c012c56

progress

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

M	source/blender/blenkernel/intern/geometry_component_curve.cc
M	source/blender/blenkernel/intern/spline_nurbs.cc
M	source/blender/blenlib/BLI_virtual_array.hh
M	source/blender/functions/FN_generic_virtual_array.hh
M	source/blender/functions/intern/generic_virtual_array.cc
M	source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
M	source/blender/nodes/geometry/nodes/node_geo_join_geometry.cc

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

diff --git a/source/blender/blenkernel/intern/geometry_component_curve.cc b/source/blender/blenkernel/intern/geometry_component_curve.cc
index eac7818ab33..3b671e672ef 100644
--- a/source/blender/blenkernel/intern/geometry_component_curve.cc
+++ b/source/blender/blenkernel/intern/geometry_component_curve.cc
@@ -294,27 +294,6 @@ template<typename T> class VArray_For_SplineToPoint final : public VArray<T> {
     return original_data_[indices.spline_index];
   }
 
-  void materialize_impl(const IndexMask mask, MutableSpan<T> r_span) const final
-  {
-    const int total_size = offsets_.last();
-    if (mask.is_range() && mask.as_range() == IndexRange(total_size)) {
-      for (const int spline_index : original_data_.index_range()) {
-        const int offset = offsets_[spline_index];
-        const int next_offset = offsets_[spline_index + 1];
-        r_span.slice(offset, next_offset - offset).fill(original_data_[spline_index]);
-      }
-    }
-    else {
-      int spline_index = 0;
-      for (const int dst_index : mask) {
-        while (offsets_[spline_index] < dst_index) {
-          spline_index++;
-        }
-        r_span[dst_index] = original_data_[spline_index];
-      }
-    }
-  }
-
   void materialize_to_uninitialized_impl(const IndexMask mask, MutableSpan<T> r_span) const final
   {
     T *dst = r_span.data();
@@ -610,11 +589,6 @@ template<typename T> class VArray_For_SplinePoints : public VArray<T> {
     return data_[indices.spline_index][indices.point_index];
   }
 
-  void materialize_impl(const IndexMask mask, MutableSpan<T> r_span) const final
-  {
-    point_attribute_materialize(data_.as_span(), offsets_, mask, r_span);
-  }
-
   void materialize_to_uninitialized_impl(const IndexMask mask, MutableSpan<T> r_span) const final
   {
     point_attribute_materialize_to_uninitialized(data_.as_span(), offsets_, mask, r_span);
@@ -647,11 +621,6 @@ template<typename T> class VMutableArray_For_SplinePoints final : public VMutabl
     data_[indices.spline_index][indices.point_index] = value;
   }
 
-  void materialize_impl(const IndexMask mask, MutableSpan<T> r_span) const final
-  {
-    point_attribute_materialize({(Span<T> *)data_.data(), data_.size()}, offsets_, mask, r_span);
-  }
-
   void materialize_to_uninitialized_impl(const IndexMask mask, MutableSpan<T> r_span) const final
   {
     point_attribute_materialize_to_uninitialized(
@@ -723,12 +692,6 @@ class VMutableArray_For_SplinePosition final : public VMutableArray<float3> {
     return spans;
   }
 
-  void materialize_impl(const IndexMask mask, MutableSpan<float3> r_span) const final
-  {
-    Array<Span<float3>> spans = this->get_position_spans();
-    point_attribute_materialize(spans.as_span(), offsets_, mask, r_span);
-  }
-
   void materialize_to_uninitialized_impl(const IndexMask mask,
                                          MutableSpan<float3> r_span) const final
   {
diff --git a/source/blender/blenkernel/intern/spline_nurbs.cc b/source/blender/blenkernel/intern/spline_nurbs.cc
index 6d30d8ba916..6f29ee9715f 100644
--- a/source/blender/blenkernel/intern/spline_nurbs.cc
+++ b/source/blender/blenkernel/intern/spline_nurbs.cc
@@ -449,7 +449,7 @@ Span<float3> NURBSpline::evaluated_positions() const
 
   /* TODO: Avoid copying the evaluated data from the temporary array. */
   GVArray_Typed<float3> evaluated = Spline::interpolate_to_evaluated(positions_.as_span());
-  evaluated->materialize(evaluated_position_cache_);
+  evaluated->get_multiple(evaluated_position_cache_);
 
   position_cache_dirty_ = false;
   return evaluated_position_cache_;
diff --git a/source/blender/blenlib/BLI_virtual_array.hh b/source/blender/blenlib/BLI_virtual_array.hh
index 3b4b7df42d4..aa29b15846b 100644
--- a/source/blender/blenlib/BLI_virtual_array.hh
+++ b/source/blender/blenlib/BLI_virtual_array.hh
@@ -45,6 +45,7 @@ namespace blender {
 
 template<typename T> class VMutableArray;
 template<typename T> class VArray_For_Span;
+template<typename T> class VMutableArray_For_MutableSpan;
 
 /* An immutable virtual array. */
 template<typename T> class VArray {
@@ -71,6 +72,12 @@ template<typename T> class VArray {
     this->get_multiple(dst_varray, IndexMask(size_));
   }
 
+  void get_multiple(MutableSpan<T> dst) const
+  {
+    VMutableArray_For_MutableSpan<T> varray(dst);
+    return this->get_multiple(varray);
+  }
+
   void get_multiple(VMutableArray<T> &dst_varray, const IndexMask mask) const
   {
     BLI_assert(mask.min_array_size() <= size_);
@@ -155,19 +162,6 @@ template<typename T> class VArray {
     return this->get(index);
   }
 
-  /* Copy the entire virtual array into a span. */
-  void materialize(MutableSpan<T> r_span) const
-  {
-    this->materialize(IndexMask(size_), r_span);
-  }
-
-  /* Copy some indices of the virtual array into a span. */
-  void materialize(IndexMask mask, MutableSpan<T> r_span) const
-  {
-    BLI_assert(mask.min_array_size() <= size_);
-    this->materialize_impl(mask, r_span);
-  }
-
   void materialize_to_uninitialized(MutableSpan<T> r_span) const
   {
     this->materialize_to_uninitialized(IndexMask(size_), r_span);
@@ -217,22 +211,6 @@ template<typename T> class VArray {
     return T();
   }
 
-  virtual void materialize_impl(IndexMask mask, MutableSpan<T> r_span) const
-  {
-    T *dst = r_span.data();
-    if (this->is_span()) {
-      const T *src = this->get_internal_span().data();
-      mask.foreach_index([&](const int64_t i) { dst[i] = src[i]; });
-    }
-    else if (this->is_single()) {
-      const T single = this->get_internal_single();
-      mask.foreach_index([&](const int64_t i) { dst[i] = single; });
-    }
-    else {
-      mask.foreach_index([&](const int64_t i) { dst[i] = this->get(i); });
-    }
-  }
-
   virtual void materialize_to_uninitialized_impl(IndexMask mask, MutableSpan<T> r_span) const
   {
     T *dst = r_span.data();
@@ -293,7 +271,7 @@ template<typename T> class VMutableArray : public VArray<T> {
 
   bool _can_set_multiple_efficiently(const VArray<T> &src_varray) const
   {
-    return this->can_get_multiple_efficiently_impl(src_varray);
+    return this->can_set_multiple_efficiently_impl(src_varray);
   }
 
   MutableSpan<T> get_internal_span()
@@ -565,12 +543,6 @@ template<typename T, typename GetFunc> class VArray_For_Func final : public VArr
     return get_func_(index);
   }
 
-  void materialize_impl(IndexMask mask, MutableSpan<T> r_span) const override
-  {
-    T *dst = r_span.data();
-    mask.foreach_index([&](const int64_t i) { dst[i] = get_func_(i); });
-  }
-
   void materialize_to_uninitialized_impl(IndexMask mask, MutableSpan<T> r_span) const override
   {
     T *dst = r_span.data();
@@ -594,12 +566,6 @@ class VArray_For_DerivedSpan : public VArray<ElemT> {
     return GetFunc(data_[index]);
   }
 
-  void materialize_impl(IndexMask mask, MutableSpan<ElemT> r_span) const override
-  {
-    ElemT *dst = r_span.data();
-    mask.foreach_index([&](const int64_t i) { dst[i] = GetFunc(data_[i]); });
-  }
-
   void materialize_to_uninitialized_impl(IndexMask mask, MutableSpan<ElemT> r_span) const override
   {
     ElemT *dst = r_span.data();
@@ -632,12 +598,6 @@ class VMutableArray_For_DerivedSpan : public VMutableArray<ElemT> {
     SetFunc(data_[index], std::move(value));
   }
 
-  void materialize_impl(IndexMask mask, MutableSpan<ElemT> r_span) const override
-  {
-    ElemT *dst = r_span.data();
-    mask.foreach_index([&](const int64_t i) { dst[i] = GetFunc(data_[i]); });
-  }
-
   void materialize_to_uninitialized_impl(IndexMask mask, MutableSpan<ElemT> r_span) const override
   {
     ElemT *dst = r_span.data();
diff --git a/source/blender/functions/FN_generic_virtual_array.hh b/source/blender/functions/FN_generic_virtual_array.hh
index e8a31f8f44a..83f76079620 100644
--- a/source/blender/functions/FN_generic_virtual_array.hh
+++ b/source/blender/functions/FN_generic_virtual_array.hh
@@ -87,6 +87,7 @@ class GVArray {
   }
 
   void get_multiple(GVMutableArray &dst_varray) const;
+  void get_multiple(GMutableSpan dst) const;
   void get_multiple(GVMutableArray &dst_varray, const IndexMask mask) const;
   void _get_multiple(GVMutableArray &dst_varray, const IndexMask mask) const;
   bool _can_get_multiple_efficiently(const GVMutableArray &dst_varray) const;
@@ -140,9 +141,6 @@ class GVArray {
     this->get_internal_single(r_value);
   }
 
-  void materialize(void *dst) const;
-  void materialize(const IndexMask mask, void *dst) const;
-
   void materialize_to_uninitialized(void *dst) const;
   void materialize_to_uninitialized(const IndexMask mask, void *dst) const;
 
@@ -173,7 +171,6 @@ class GVArray {
   virtual bool is_single_impl() const;
   virtual void get_internal_single_impl(void *UNUSED(r_value)) const;
 
-  virtual void materialize_impl(const IndexMask mask, void *dst) const;
   virtual void materialize_to_uninitialized_impl(const IndexMask mask, void *dst) const;
 
   virtual const void *try_get_internal_varray_impl() const;
@@ -391,11 +388,6 @@ template<typename T> class GVArray_For_VArray : public GVArray {
     *(T *)r_value = varray_->get_internal_single();
   }
 
-  void materialize_impl(const IndexMask mask, void *dst) const override
-  {
-    varray_->materialize(mask, MutableSpan((T *)dst, mask.min_array_size()));
-  }
-
   void materialize_to_uninitialized_impl(const IndexMask mask, void *dst) const override
   {
     varray_->materialize_to_uninitialized(mask, MutableSpan((T *)dst, mask.min_array_size()));
@@ -571,11 +563,6 @@ template<typename T> class GVMutableArray_For_VMutableArray : public GVMutableAr
     varray_->set(index, std::move(value_));
   }
 
-  void materialize_impl(const IndexMask mask, void *dst) const override
-  {
-    varray_->materialize(mask, MutableSpan((T *)dst, mask.min_array_size()));
-  }
-
   void materialize_to_uninitialized_impl(const IndexMask mask, void *dst) const override
   {
     varray_->materialize_to_uninitialized(mask, MutableSpan((T *)dst, mask.min_array_size()));
diff --git a/source/blender/functions/intern/generic_virtual_array.cc b/source/blender/functions/intern/generic_virtual_array.cc
index ba7886dd001..1e81f0661ad 100644
--- a/source/blender/functions/intern/generic_virtual_array.cc
+++ b/source/blender/functions/inte

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list