[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