[Bf-blender-cvs] [58f1e62871c] master: Geometry Nodes: Parallelize deleting vertex group
Hans Goudey
noreply at git.blender.org
Wed Jan 4 18:21:16 CET 2023
Commit: 58f1e62871cc9f4be418c4f2397ae6bb86318d15
Author: Hans Goudey
Date: Wed Jan 4 12:19:58 2023 -0500
Branches: master
https://developer.blender.org/rB58f1e62871cc9f4be418c4f2397ae6bb86318d15
Geometry Nodes: Parallelize deleting vertex group
Since 78f28b55d39288926634, allocating on multiple threads is much
faster, making it a nice improvement to parallelize vertex group
operations. This patch adds multi-threading when removing a
vertex group from the "Remove Named Attribute" node.
On a Ryzen 3700x:
Before: `(Average: 15.6 ms, Min: 15.0 ms)`
After: `(Average: 8.1 ms, Min: 7.6 ms)`
Differential Revision: https://developer.blender.org/D16916
===================================================================
M source/blender/blenkernel/intern/geometry_component_mesh.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/geometry_component_mesh.cc b/source/blender/blenkernel/intern/geometry_component_mesh.cc
index 87ddb76171e..ac19fb43568 100644
--- a/source/blender/blenkernel/intern/geometry_component_mesh.cc
+++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc
@@ -1117,15 +1117,18 @@ class VertexGroupsAttributeProvider final : public DynamicAttributesProvider {
return true;
}
- for (MDeformVert &dvert : mesh->deform_verts_for_write()) {
- MDeformWeight *weight = BKE_defvert_find_index(&dvert, index);
- BKE_defvert_remove_group(&dvert, weight);
- for (MDeformWeight &weight : MutableSpan(dvert.dw, dvert.totweight)) {
- if (weight.def_nr > index) {
- weight.def_nr--;
+ MutableSpan<MDeformVert> dverts = mesh->deform_verts_for_write();
+ threading::parallel_for(dverts.index_range(), 1024, [&](IndexRange range) {
+ for (MDeformVert &dvert : dverts.slice(range)) {
+ MDeformWeight *weight = BKE_defvert_find_index(&dvert, index);
+ BKE_defvert_remove_group(&dvert, weight);
+ for (MDeformWeight &weight : MutableSpan(dvert.dw, dvert.totweight)) {
+ if (weight.def_nr > index) {
+ weight.def_nr--;
+ }
}
}
- }
+ });
return true;
}
More information about the Bf-blender-cvs
mailing list