[Bf-blender-cvs] [facf4463424] temp-T101739-fix-seam-bleeding-non-manifold: Enable threading during pixel copy-ing.
Jeroen Bakker
noreply at git.blender.org
Tue Jan 17 15:28:17 CET 2023
Commit: facf4463424bd8563e3b9a9de36d892f909ec914
Author: Jeroen Bakker
Date: Tue Jan 17 15:27:48 2023 +0100
Branches: temp-T101739-fix-seam-bleeding-non-manifold
https://developer.blender.org/rBfacf4463424bd8563e3b9a9de36d892f909ec914
Enable threading during pixel copy-ing.
===================================================================
M source/blender/blenkernel/BKE_pbvh_pixels.hh
M source/blender/blenkernel/intern/pbvh_pixels_copy.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index 90cade4efa7..c40df2c8e50 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -370,15 +370,15 @@ struct CopyPixelTile {
{
}
- void copy_pixels(ImBuf &tile_buffer) const
+ void copy_pixels(ImBuf &tile_buffer, IndexRange group_range) const
{
if (tile_buffer.rect_float) {
ImageBufferAccessor<float4> accessor(tile_buffer);
- copy_pixels<float4>(accessor);
+ copy_pixels<float4>(accessor, group_range);
}
else {
ImageBufferAccessor<int> accessor(tile_buffer);
- copy_pixels<int>(accessor);
+ copy_pixels<int>(accessor, group_range);
}
}
@@ -395,9 +395,11 @@ struct CopyPixelTile {
}
private:
- template<typename T> void copy_pixels(ImageBufferAccessor<T> &image_buffer) const
+ template<typename T>
+ void copy_pixels(ImageBufferAccessor<T> &image_buffer, IndexRange group_range) const
{
- for (const CopyPixelGroup &group : groups) {
+ for (const int64_t group_index : group_range) {
+ const CopyPixelGroup &group = groups[group_index];
CopyPixelCommand copy_command(group);
for (const DeltaCopyPixelCommand &item : Span<const DeltaCopyPixelCommand>(
&command_deltas[group.start_delta_index], group.num_deltas)) {
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_copy.cc b/source/blender/blenkernel/intern/pbvh_pixels_copy.cc
index bac3c2fdf87..4e94f002244 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_copy.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_copy.cc
@@ -5,6 +5,7 @@
#include "BLI_bit_vector.hh"
#include "BLI_math.h"
#include "BLI_math_vector.hh"
+#include "BLI_task.hh"
#include "BLI_vector.hh"
#include "IMB_imbuf.h"
@@ -652,7 +653,12 @@ void BKE_pbvh_pixels_copy_pixels(PBVH &pbvh,
/* No tile buffer found to copy. */
return;
}
- pixel_tile->get().copy_pixels(*tile_buffer);
+
+ CopyPixelTile &tile = pixel_tile->get();
+ const int grain_size = 128;
+ threading::parallel_for(tile.groups.index_range(), grain_size, [&](IndexRange range) {
+ tile.copy_pixels(*tile_buffer, range);
+ });
BKE_image_release_ibuf(&image, tile_buffer, nullptr);
// TIMEIT_END(pbvh_pixels_copy_pixels);
More information about the Bf-blender-cvs
mailing list