[Bf-blender-cvs] [d2f4fb68f5d] master: Geometry Nodes: Parallelize "Set Spline Type"-node

Erik noreply at git.blender.org
Sat Nov 27 18:18:37 CET 2021


Commit: d2f4fb68f5d1747d1827dedbd4d2cf9e97379c6a
Author: Erik
Date:   Sat Nov 27 18:17:58 2021 +0100
Branches: master
https://developer.blender.org/rBd2f4fb68f5d1747d1827dedbd4d2cf9e97379c6a

Geometry Nodes: Parallelize "Set Spline Type"-node

Parallelizes the loop that converts splines.
It gives around a 2x speedup on curves with over 1k splines.

Differential Revision: https://developer.blender.org/D13389

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

M	release/scripts/addons
M	release/scripts/addons_contrib
M	source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc

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

diff --git a/release/scripts/addons b/release/scripts/addons
index 4de1bcce5a2..9030e2c6d1a 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 4de1bcce5a2caa31131c40cc19f0a1851c2eb635
+Subproject commit 9030e2c6d1aca714c7122aa5b52bf2424ee4b880
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 16467648282..7936dde9ece 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 16467648282500cc229c271f62201ef897f2c2c3
+Subproject commit 7936dde9ece881d531b1a2ee6c45ddb56d30038c
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc
index 1d859c8555f..0d4b9e9bdec 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc
@@ -261,24 +261,28 @@ static void node_geo_exec(GeoNodeExecParams params)
     const VArray<bool> &selection = selection_evaluator.get_evaluated<bool>(0);
 
     std::unique_ptr<CurveEval> new_curve = std::make_unique<CurveEval>();
-    for (const int i : curve.splines().index_range()) {
-      if (selection[i]) {
-        switch (output_type) {
-          case GEO_NODE_SPLINE_TYPE_POLY:
-            new_curve->add_spline(convert_to_poly_spline(*curve.splines()[i]));
-            break;
-          case GEO_NODE_SPLINE_TYPE_BEZIER:
-            new_curve->add_spline(convert_to_bezier(*curve.splines()[i], params));
-            break;
-          case GEO_NODE_SPLINE_TYPE_NURBS:
-            new_curve->add_spline(convert_to_nurbs(*curve.splines()[i]));
-            break;
+    new_curve->resize(curve.splines().size());
+
+    threading::parallel_for(curve.splines().index_range(), 512, [&](IndexRange range) {
+      for (const int i : range) {
+        if (selection[i]) {
+          switch (output_type) {
+            case GEO_NODE_SPLINE_TYPE_POLY:
+              new_curve->splines()[i] = convert_to_poly_spline(*curve.splines()[i]);
+              break;
+            case GEO_NODE_SPLINE_TYPE_BEZIER:
+              new_curve->splines()[i] = convert_to_bezier(*curve.splines()[i], params);
+              break;
+            case GEO_NODE_SPLINE_TYPE_NURBS:
+              new_curve->splines()[i] = convert_to_nurbs(*curve.splines()[i]);
+              break;
+          }
+        }
+        else {
+          new_curve->splines()[i] = curve.splines()[i]->copy();
         }
       }
-      else {
-        new_curve->add_spline(curve.splines()[i]->copy());
-      }
-    }
+    });
     new_curve->attributes = curve.attributes;
     geometry_set.replace_curve(new_curve.release());
   });



More information about the Bf-blender-cvs mailing list