BLI: refactor IndexMask for better performance and memory usage #104629

Merged
Jacques Lucke merged 254 commits from JacquesLucke/blender:index-mask-refactor into main 2023-05-24 18:11:47 +02:00
3 changed files with 6 additions and 4 deletions
Showing only changes of commit 020fc51907 - Show all commits

View File

@ -865,6 +865,7 @@ inline Vector<std::variant<IndexRange, IndexMaskSegment>, N> IndexMask::to_spans
namespace blender {
using index_mask::IndexMask;
using index_mask::IndexMaskFromSegment;
using index_mask::IndexMaskMemory;
using index_mask::IndexMaskSegment;
} // namespace blender

View File

@ -497,9 +497,10 @@ class GVArrayImpl_For_SlicedGVArray : public GVArrayImpl {
void materialize_compressed_to_uninitialized(const IndexMask &mask, void *dst) const override
{
mask.foreach_range([&](const IndexRange range, const int64_t start) {
const IndexRange offset_mask_range = range.shift(offset_);
varray_.materialize_compressed_to_uninitialized(offset_mask_range,
IndexMaskFromSegment mask_from_segment;
mask.foreach_segment([&](const IndexMaskSegment segment, const int64_t start) {
mask_from_segment.update({segment.offset() + offset_, segment.base_span()});
varray_.materialize_compressed_to_uninitialized(mask_from_segment.mask,
POINTER_OFFSET(dst, type_->size() * start));
});
}

View File

@ -239,7 +239,7 @@ inline void execute_materialized(TypeSequence<ParamTags...> /* param_tags */,
}(),
...);
index_mask::IndexMaskFromSegment index_mask_from_segment;
IndexMaskFromSegment index_mask_from_segment;
const int64_t segment_offset = mask.offset();
/* Outer loop over all chunks. */