[Bf-blender-cvs] [d39fde3662c] refactor-mesh-hide-generic: Parallelize flag copying

Hans Goudey noreply at git.blender.org
Fri Jul 22 01:35:27 CEST 2022


Commit: d39fde3662c792800945270a19612f81a4b8e8fd
Author: Hans Goudey
Date:   Thu Jul 21 18:35:16 2022 -0500
Branches: refactor-mesh-hide-generic
https://developer.blender.org/rBd39fde3662c792800945270a19612f81a4b8e8fd

Parallelize flag copying

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

M	source/blender/blenkernel/intern/mesh_legacy_convert.cc

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

diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
index 56f548884c1..601c2675b2b 100644
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@ -18,6 +18,7 @@
 #include "BLI_math.h"
 #include "BLI_memarena.h"
 #include "BLI_polyfill_2d.h"
+#include "BLI_task.hh"
 #include "BLI_utildefines.h"
 
 #include "BKE_attribute.hh"
@@ -889,23 +890,29 @@ void BKE_mesh_legacy_convert_hide_layers_to_flags(Mesh *mesh)
   MutableSpan<MVert> vertices(mesh->mvert, mesh->totvert);
   const VArray<bool> hide_vert = attributes.lookup_or_default<bool>(
       ".hide_vert", ATTR_DOMAIN_POINT, false);
-  for (const int i : vertices.index_range()) {
-    SET_FLAG_FROM_TEST(vertices[i].flag, hide_vert[i], ME_HIDE);
-  }
+  threading::parallel_for(vertices.index_range(), 4096, [&](IndexRange range) {
+    for (const int i : range) {
+      SET_FLAG_FROM_TEST(vertices[i].flag, hide_vert[i], ME_HIDE);
+    }
+  });
 
   MutableSpan<MEdge> edges(mesh->medge, mesh->totedge);
   const VArray<bool> hide_edge = attributes.lookup_or_default<bool>(
       ".hide_edge", ATTR_DOMAIN_EDGE, false);
-  for (const int i : edges.index_range()) {
-    SET_FLAG_FROM_TEST(edges[i].flag, hide_edge[i], ME_HIDE);
-  }
+  threading::parallel_for(edges.index_range(), 4096, [&](IndexRange range) {
+    for (const int i : range) {
+      SET_FLAG_FROM_TEST(edges[i].flag, hide_edge[i], ME_HIDE);
+    }
+  });
 
   MutableSpan<MPoly> polygons(mesh->mpoly, mesh->totpoly);
   const VArray<bool> hide_face = attributes.lookup_or_default<bool>(
       ".hide_face", ATTR_DOMAIN_FACE, false);
-  for (const int i : polygons.index_range()) {
-    SET_FLAG_FROM_TEST(polygons[i].flag, hide_face[i], ME_HIDE);
-  }
+  threading::parallel_for(polygons.index_range(), 4096, [&](IndexRange range) {
+    for (const int i : range) {
+      SET_FLAG_FROM_TEST(polygons[i].flag, hide_face[i], ME_HIDE);
+    }
+  });
 }
 
 void BKE_mesh_legacy_convert_flags_to_hide_layers(Mesh *mesh)
@@ -920,9 +927,11 @@ void BKE_mesh_legacy_convert_flags_to_hide_layers(Mesh *mesh)
       })) {
     SpanAttributeWriter<bool> hide_vert = attributes.lookup_or_add_for_write_only_span<bool>(
         ".hide_vert", ATTR_DOMAIN_POINT);
-    for (const int i : vertices.index_range()) {
-      hide_vert.span[i] = vertices[i].flag & ME_HIDE;
-    }
+    threading::parallel_for(vertices.index_range(), 4096, [&](IndexRange range) {
+      for (const int i : range) {
+        hide_vert.span[i] = vertices[i].flag & ME_HIDE;
+      }
+    });
     hide_vert.finish();
   }
 
@@ -931,9 +940,11 @@ void BKE_mesh_legacy_convert_flags_to_hide_layers(Mesh *mesh)
           edges.begin(), edges.end(), [](const MEdge &edge) { return edge.flag & ME_HIDE; })) {
     SpanAttributeWriter<bool> hide_edge = attributes.lookup_or_add_for_write_only_span<bool>(
         ".hide_edge", ATTR_DOMAIN_EDGE);
-    for (const int i : edges.index_range()) {
-      hide_edge.span[i] = edges[i].flag & ME_HIDE;
-    }
+    threading::parallel_for(edges.index_range(), 4096, [&](IndexRange range) {
+      for (const int i : range) {
+        hide_edge.span[i] = edges[i].flag & ME_HIDE;
+      }
+    });
     hide_edge.finish();
   }
 
@@ -943,9 +954,11 @@ void BKE_mesh_legacy_convert_flags_to_hide_layers(Mesh *mesh)
       })) {
     SpanAttributeWriter<bool> hide_face = attributes.lookup_or_add_for_write_only_span<bool>(
         ".hide_face", ATTR_DOMAIN_FACE);
-    for (const int i : polygons.index_range()) {
-      hide_face.span[i] = polygons[i].flag & ME_HIDE;
-    }
+    threading::parallel_for(polygons.index_range(), 4096, [&](IndexRange range) {
+      for (const int i : range) {
+        hide_face.span[i] = polygons[i].flag & ME_HIDE;
+      }
+    });
     hide_face.finish();
   }
 }



More information about the Bf-blender-cvs mailing list