[Bf-blender-cvs] [da5662cd0fc] temp-T96710-pbvh-pixels: Remove sorting and barycentric encoding.

Jeroen Bakker noreply at git.blender.org
Mon Apr 11 09:40:17 CEST 2022


Commit: da5662cd0fcc48c5c08561622c3b59e7ba6decad
Author: Jeroen Bakker
Date:   Mon Apr 11 09:07:04 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBda5662cd0fcc48c5c08561622c3b59e7ba6decad

Remove sorting and barycentric encoding.

===================================================================

M	source/blender/blenkernel/BKE_pbvh.hh
M	source/blender/blenkernel/intern/pbvh_pixels.cc
M	source/blender/blenkernel/intern/pbvh_pixels_seams.cc
M	source/blender/editors/sculpt_paint/sculpt_paint_image.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_pbvh.hh b/source/blender/blenkernel/BKE_pbvh.hh
index 42f745890bd..7dc511e68cc 100644
--- a/source/blender/blenkernel/BKE_pbvh.hh
+++ b/source/blender/blenkernel/BKE_pbvh.hh
@@ -17,15 +17,13 @@
 
 namespace blender::bke::pbvh::pixels {
 
-/* TODO(jbakker): move encoders to blenlib. */
-class EncodedBarycentricWeights;
-
 /** Barycentric weights. */
 class BarycentricWeights {
  private:
   float3 weights;
 
  public:
+  explicit BarycentricWeights() noexcept = default;
   explicit BarycentricWeights(const float2 v1, const float2 v2, const float2 v3, const float2 co)
   {
     barycentric_weights_v2(v1, v2, v3, co, weights);
@@ -66,40 +64,6 @@ class BarycentricWeights {
   {
     return weights;
   }
-
-  friend class EncodedBarycentricWeights;
-};
-
-/**
- * Barycentric weights encoded into 2 floats.
- *
- * The third coordinate can be extracted as all 3 coordinates should sum up to 1.
- *
- * \code{.cc}
- * co[2] = 1.0 - co[0] - co[1]
- * \endcode
- */
-class EncodedBarycentricWeights {
- private:
-  float2 encoded;
-
- public:
-  EncodedBarycentricWeights &operator=(const BarycentricWeights decoded)
-  {
-    encoded = float2(decoded.weights.x, decoded.weights.y);
-    return *this;
-  }
-
-  const BarycentricWeights decode() const
-  {
-    return BarycentricWeights(float3(encoded.x, encoded.y, 1.0 - encoded.x - encoded.y));
-  }
-
-  EncodedBarycentricWeights &operator-=(const float2 &other)
-  {
-    encoded -= other;
-    return *this;
-  }
 };
 
 /**
@@ -207,21 +171,17 @@ struct Triangles {
  * Encode multiple sequential pixels to reduce memory footprint.
  */
 struct PixelsPackage {
-  /** Barycentric coordinate of the first encoded pixel. */
-  EncodedBarycentricWeights start_barycentric_coord;
-  /** Image coordinate starting of the first encoded pixel. */
+  /** Barycentric coordinate of the first pixel. */
+  BarycentricWeights start_barycentric_coord;
+  /** Image coordinate starting of the first pixel. */
   ushort2 start_image_coordinate;
-  /** Number of sequetial pixels encoded in this package. */
+  /** Number of sequential pixels encoded in this package. */
   ushort num_pixels;
   /** Reference to the pbvh triangle index. */
   ushort triangle_index;
 };
 
-class PixelPackages : public Vector<PixelsPackage> {
- public:
-  /* Sort the packages to improve CPU cache utilization during painting. */
-  void sort();
-};
+using PixelPackages = Vector<PixelsPackage>;
 
 struct TileData {
   short tile_number;
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 35d72cf1741..f8afbdbd6f9 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -210,7 +210,6 @@ static void do_encode_pixels(void *__restrict userdata,
     }
 
     tile_data.tile_number = image_tile.get_tile_number();
-    tile_data.packages.sort();
     node_data->tiles.append(tile_data);
   }
 }
@@ -477,19 +476,6 @@ void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser &i
   }
 }
 
-void PixelPackages::sort()
-{
-  /* This fails when using GCC. (read out of bounds.) */
-  #if 0
-  std::sort(this->begin(), this->end(), [](const PixelsPackage &a, const PixelsPackage &b) {
-    if (a.start_image_coordinate[1] < b.start_image_coordinate[1]) {
-      return true;
-    }
-    return a.start_image_coordinate[0] < b.start_image_coordinate[0];
-  });
-  #endif
-}
-
 }  // namespace blender::bke::pbvh::pixels
 
 extern "C" {
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index 7345306876c..18deb632f2a 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -18,8 +18,8 @@ struct ExtendUVContext {
 };
 
 static bool intersect_uv_pixel(const ushort2 &pixel_coordinate,
-                        const ImBuf &image_buffer,
-                        const float2 triangle_uvs[3])
+                               const ImBuf &image_buffer,
+                               const float2 triangle_uvs[3])
 {
 
   float2 uv_bottom_left = float2(pixel_coordinate.x / float(image_buffer.x),
@@ -79,7 +79,7 @@ struct UVSeamExtenderRowPackage {
     BLI_assert(extend_xmin_len != 0);
     package->num_pixels += 1;
     package->start_image_coordinate[0] -= 1;
-    package->start_barycentric_coord -= float2(triangle_paint_data->add_barycentric_coord_x);
+    package->start_barycentric_coord -= triangle_paint_data->add_barycentric_coord_x;
     extend_xmin_len--;
   }
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index 759339ced17..60d0e2827a9 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -245,7 +245,7 @@ template<typename ImagePixelAccessor> class PaintingKernel {
   Pixel get_start_pixel(const TrianglePaintInput &triangle,
                         const PixelsPackage &encoded_pixels) const
   {
-    return init_pixel(triangle, encoded_pixels.start_barycentric_coord.decode());
+    return init_pixel(triangle, encoded_pixels.start_barycentric_coord);
   }
 
   /**
@@ -254,9 +254,8 @@ template<typename ImagePixelAccessor> class PaintingKernel {
                         const PixelsPackage &encoded_pixels,
                         const Pixel &start_pixel) const
   {
-    Pixel result = init_pixel(triangle,
-                              encoded_pixels.start_barycentric_coord.decode() +
-                                  triangle.add_barycentric_coord_x);
+    Pixel result = init_pixel(
+        triangle, encoded_pixels.start_barycentric_coord + triangle.add_barycentric_coord_x);
     return result - start_pixel;
   }



More information about the Bf-blender-cvs mailing list