[Bf-blender-cvs] [91a57c9cc29] temp-geometry-nodes-evaluator-refactor: cleanup

Jacques Lucke noreply at git.blender.org
Thu Sep 8 17:22:32 CEST 2022


Commit: 91a57c9cc29333196b8b4c47605d864265ec7739
Author: Jacques Lucke
Date:   Thu Sep 8 13:18:30 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB91a57c9cc29333196b8b4c47605d864265ec7739

cleanup

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

M	source/blender/functions/FN_lazy_function.hh
M	source/blender/functions/intern/lazy_function.cc
M	source/blender/functions/tests/FN_lazy_function_test.cc
M	source/blender/modifiers/intern/MOD_nodes.cc
M	source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
M	source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc

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

diff --git a/source/blender/functions/FN_lazy_function.hh b/source/blender/functions/FN_lazy_function.hh
index 3a332df34ce..8ec914e5dd5 100644
--- a/source/blender/functions/FN_lazy_function.hh
+++ b/source/blender/functions/FN_lazy_function.hh
@@ -116,7 +116,7 @@ struct Output {
 
 class LazyFunction {
  protected:
-  const char *static_name_ = "Unnamed Function";
+  const char *debug_name_ = "Unnamed Function";
   Vector<Input> inputs_;
   Vector<Output> outputs_;
 
diff --git a/source/blender/functions/intern/lazy_function.cc b/source/blender/functions/intern/lazy_function.cc
index 7de733d5a35..6d0dab40a3c 100644
--- a/source/blender/functions/intern/lazy_function.cc
+++ b/source/blender/functions/intern/lazy_function.cc
@@ -12,7 +12,7 @@ namespace blender::fn::lazy_function {
 
 std::string LazyFunction::name() const
 {
-  return static_name_;
+  return debug_name_;
 }
 
 std::string LazyFunction::input_name(int index) const
diff --git a/source/blender/functions/tests/FN_lazy_function_test.cc b/source/blender/functions/tests/FN_lazy_function_test.cc
index c8e0809b334..fcea334fcba 100644
--- a/source/blender/functions/tests/FN_lazy_function_test.cc
+++ b/source/blender/functions/tests/FN_lazy_function_test.cc
@@ -15,7 +15,7 @@ class AddLazyFunction : public LazyFunction {
  public:
   AddLazyFunction()
   {
-    static_name_ = "Add";
+    debug_name_ = "Add";
     inputs_.append({"A", CPPType::get<int>()});
     inputs_.append({"B", CPPType::get<int>()});
     outputs_.append({"Result", CPPType::get<int>()});
@@ -37,7 +37,7 @@ class StoreValueFunction : public LazyFunction {
  public:
   StoreValueFunction(int *dst1, int *dst2) : dst1_(dst1), dst2_(dst2)
   {
-    static_name_ = "Store Value";
+    debug_name_ = "Store Value";
     inputs_.append({"A", CPPType::get<int>()});
     inputs_.append({"B", CPPType::get<int>(), ValueUsage::Maybe});
   }
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 8396aff1156..6a51b566a37 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -845,12 +845,12 @@ static Vector<SpaceSpreadsheet *> find_spreadsheet_editors(Main *bmain)
 static const lf::FunctionNode &find_viewer_lf_node(const bNode &viewer_bnode)
 {
   return *blender::nodes::ensure_geometry_nodes_lazy_function_graph(viewer_bnode.owner_tree())
-              .mapping.viewer_node_map.lookup(&viewer_bnode);
+              ->mapping.viewer_node_map.lookup(&viewer_bnode);
 }
 static const lf::FunctionNode &find_group_lf_node(const bNode &group_bnode)
 {
   return *blender::nodes::ensure_geometry_nodes_lazy_function_graph(group_bnode.owner_tree())
-              .mapping.group_node_map.lookup(&group_bnode);
+              ->mapping.group_node_map.lookup(&group_bnode);
 }
 
 static void find_side_effect_nodes_for_spreadsheet(
@@ -1118,15 +1118,14 @@ static void store_output_attributes(GeometrySet &geometry,
 /**
  * Evaluate a node group to compute the output geometry.
  */
-static GeometrySet compute_geometry(const bNodeTree &btree,
-                                    const bNode &output_node,
-                                    GeometrySet input_geometry_set,
-                                    NodesModifierData *nmd,
-                                    const ModifierEvalContext *ctx)
+static GeometrySet compute_geometry(
+    const bNodeTree &btree,
+    const blender::nodes::GeometryNodesLazyFunctionGraphInfo &lf_graph_info,
+    const bNode &output_node,
+    GeometrySet input_geometry_set,
+    NodesModifierData *nmd,
+    const ModifierEvalContext *ctx)
 {
-
-  const blender::nodes::GeometryNodesLazyFunctionGraphInfo &lf_graph_info =
-      blender::nodes::ensure_geometry_nodes_lazy_function_graph(btree);
   const blender::nodes::GeometryNodeLazyFunctionMapping &mapping = lf_graph_info.mapping;
 
   Vector<const lf::OutputSocket *> graph_inputs;
@@ -1284,13 +1283,6 @@ static void modifyGeometry(ModifierData *md,
   tree.ensure_topology_cache();
   check_property_socket_sync(ctx->object, md);
 
-  /* Todo: Check for link cycles recursively. */
-  if (tree.has_link_cycle()) {
-    BKE_modifier_set_error(ctx->object, md, "Node group has cycles");
-    geometry_set.clear();
-    return;
-  }
-
   const bNode *output_node = tree.group_output_node();
   if (output_node == nullptr) {
     BKE_modifier_set_error(ctx->object, md, "Node group must have a group output node");
@@ -1312,6 +1304,14 @@ static void modifyGeometry(ModifierData *md,
     return;
   }
 
+  const blender::nodes::GeometryNodesLazyFunctionGraphInfo *lf_graph_info =
+      blender::nodes::ensure_geometry_nodes_lazy_function_graph(tree);
+  if (lf_graph_info == nullptr) {
+    BKE_modifier_set_error(ctx->object, md, "Cannot evaluate node group");
+    geometry_set.clear();
+    return;
+  }
+
   bool use_orig_index_verts = false;
   bool use_orig_index_edges = false;
   bool use_orig_index_polys = false;
@@ -1322,7 +1322,8 @@ static void modifyGeometry(ModifierData *md,
     use_orig_index_polys = CustomData_has_layer(&mesh.pdata, CD_ORIGINDEX);
   }
 
-  geometry_set = compute_geometry(tree, *output_node, std::move(geometry_set), nmd, ctx);
+  geometry_set = compute_geometry(
+      tree, *lf_graph_info, *output_node, std::move(geometry_set), nmd, ctx);
 
   if (geometry_set.has_mesh()) {
     /* Add #CD_ORIGINDEX layers if they don't exist already. This is required because the
diff --git a/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh b/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
index 8b05d56e596..a81d8689a69 100644
--- a/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_to_lazy_function_graph.hh
@@ -85,7 +85,7 @@ class GeometryNodesLazyFunctionSideEffectProvider
       const lf::Context &context) const override;
 };
 
-const GeometryNodesLazyFunctionGraphInfo &ensure_geometry_nodes_lazy_function_graph(
+const GeometryNodesLazyFunctionGraphInfo *ensure_geometry_nodes_lazy_function_graph(
     const bNodeTree &btree);
 
 }  // namespace blender::nodes
diff --git a/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc b/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
index 2c7c5cc932f..1f8dadc22de 100644
--- a/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
+++ b/source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
@@ -73,7 +73,6 @@ static void lazy_function_interface_from_node(const bNode &node,
     if (socket->is_multi_input() && !is_muted) {
       type = get_vector_type(*type);
     }
-    /* TODO: Name may not be static. */
     r_inputs.append({socket->identifier, *type, input_usage});
     r_used_inputs.append(socket);
   }
@@ -103,7 +102,7 @@ class LazyFunctionForGeometryNode : public LazyFunction {
                               Vector<const bNodeSocket *> &r_used_outputs)
       : node_(node)
   {
-    static_name_ = node.name;
+    debug_name_ = node.name;
     lazy_function_interface_from_node(node, r_used_inputs, r_used_outputs, inputs_, outputs_);
   }
 
@@ -137,7 +136,7 @@ class LazyFunctionForMultiInput : public LazyFunction {
  public:
   LazyFunctionForMultiInput(const bNodeSocket &socket)
   {
-    static_name_ = "Multi Input";
+    debug_name_ = "Multi Input";
     base_type_ = get_socket_cpp_type(socket);
     BLI_assert(base_type_ != nullptr);
     BLI_assert(socket.is_multi_input());
@@ -178,7 +177,7 @@ class LazyFunctionForRerouteNode : public LazyFunction {
  public:
   LazyFunctionForRerouteNode(const CPPType &type)
   {
-    static_name_ = "Reroute";
+    debug_name_ = "Reroute";
     inputs_.append({"Input", type});
     outputs_.append({"Output", type});
   }
@@ -272,7 +271,7 @@ class LazyFunctionForMutedNode : public LazyFunction {
                            Vector<const bNodeSocket *> &r_used_inputs,
                            Vector<const bNodeSocket *> &r_used_outputs)
   {
-    static_name_ = "Muted";
+    debug_name_ = "Muted";
     lazy_function_interface_from_node(node, r_used_inputs, r_used_outputs, inputs_, outputs_);
     for (lf::Input &fn_input : inputs_) {
       fn_input.usage = lf::ValueUsage::Maybe;
@@ -354,7 +353,7 @@ class LazyFunctionForMultiFunctionConversion : public LazyFunction {
                                          Vector<const bNodeSocket *> &&target_sockets)
       : fn_(fn), from_type_(from), to_type_(to), target_sockets_(std::move(target_sockets))
   {
-    static_name_ = "Convert";
+    debug_name_ = "Convert";
     inputs_.append({"From", from});
     outputs_.append({"To", to});
   }
@@ -389,7 +388,7 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction {
       : node_(node), fn_item_(std::move(fn_item))
   {
     BLI_assert(fn_item_.fn != nullptr);
-    static_name_ = node.name;
+    debug_name_ = node.name;
     lazy_function_interface_from_node(node, r_used_inputs, r_used_outputs, inputs_, outputs_);
     for (const lf::Input &fn_input : inputs_) {
       input_types_.append(dynamic_cast<const ValueOrFieldCPPType *>(fn_input.type));
@@ -426,7 +425,7 @@ class LazyFunctionForComplexInput : public LazyFunction {
   LazyFunctionForComplexInput(const CPPType &type, std::function<void(void *)> init_fn)
       : init_fn_(std::move(init_fn))
   {
-    static_name_ = "Input";
+    debug_name_ = "Input";
     outputs_.append({"Output", type});
   }
 
@@ -447,7 +446,7 @@ class LazyFunctionForViewerNode : public LazyFunction {
   LazyFunctionForViewerNode(const bNode &bnode, Vector<const bNodeSocket *> &r_used_inputs)
       : bnode_(bnode)
   {
-    static_name_ = "Viewer";
+    debug_name_ = "Viewer";
     Vector<const bNodeSocket *> dummy_used_outputs;
     lazy_function_interface_from_node(bnode, r_used_inputs, dummy_used_outputs, inputs_, outputs_);
     if (!r_used_inputs[1]->is_directly_linked()) {
@@ -488,19 +487,17 @@ class LazyFunctionForGroupNode : public LazyFunction {
 
  public:
   LazyFunctionForGroupNode(const bNode &group_node,
+                           const GeometryNodesLazyFunctionGraphInfo &lf_graph_info,
                            Vector<const bNodeSocket *> &r_used_inputs,
                        

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list