[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