[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