[Bf-blender-cvs] [7b71ab3fe0d] temp-geometry-nodes-evaluator-refactor: progress

Jacques Lucke noreply at git.blender.org
Tue Sep 6 20:09:57 CEST 2022


Commit: 7b71ab3fe0d3a1a4c61dce66936a59a8bfb5b445
Author: Jacques Lucke
Date:   Tue Sep 6 20:06:44 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB7b71ab3fe0d3a1a4c61dce66936a59a8bfb5b445

progress

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

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/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 60e82d67855..b562f47d0a9 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -1137,9 +1137,11 @@ static GeometrySet compute_geometry(const bNodeTree &btree,
   Array<bool> param_set_outputs(graph_outputs.size(), false);
 
   blender::nodes::GeometryNodesLazyFunctionLogger lf_logger(lf_graph_info);
+  blender::nodes::GeometryNodesLazyFunctionSideEffectProvider lf_side_effect_provider(
+      lf_graph_info);
 
   lf::GraphExecutor graph_executor{
-      lf_graph_info.graph, graph_inputs, graph_outputs, &lf_logger, nullptr};
+      lf_graph_info.graph, graph_inputs, graph_outputs, &lf_logger, &lf_side_effect_provider};
 
   blender::nodes::GeoNodesModifierData geo_nodes_modifier_data;
   geo_nodes_modifier_data.depsgraph = ctx->depsgraph;
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 dfd978c7ff4..2e7b08fbad6 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
@@ -118,6 +118,22 @@ class GeometryNodesLazyFunctionLogger : public fn::lazy_function::GraphExecutor:
                         GPointer value) const override;
 };
 
+class GeometryNodesLazyFunctionSideEffectProvider
+    : public fn::lazy_function::GraphExecutor::SideEffectProvider {
+ private:
+  const GeometryNodesLazyFunctionGraphInfo &lf_graph_info_;
+
+ public:
+  GeometryNodesLazyFunctionSideEffectProvider(
+      const GeometryNodesLazyFunctionGraphInfo &lf_graph_info)
+      : lf_graph_info_(lf_graph_info)
+  {
+  }
+
+  Vector<const lf::FunctionNode *> get_nodes_with_side_effects(
+      const lf::Context &context) const override;
+};
+
 const GeometryNodesLazyFunctionGraphInfo &ensure_geometry_nodes_lazy_function_graph(
     const bNodeTree &btree);
 
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 c99499d9c2f..3162fb1066f 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
@@ -457,6 +457,7 @@ class LazyFunctionForGroupNode : public LazyFunction {
  private:
   const bNode &group_node_;
   std::optional<GeometryNodesLazyFunctionLogger> lf_logger_;
+  std::optional<GeometryNodesLazyFunctionSideEffectProvider> lf_side_effect_provider_;
   std::optional<lf::GraphExecutor> graph_executor_;
 
  public:
@@ -495,11 +496,12 @@ class LazyFunctionForGroupNode : public LazyFunction {
     // std::cout << lf_graph_info.graph.to_dot() << "\n";
 
     lf_logger_.emplace(lf_graph_info);
+    lf_side_effect_provider_.emplace(lf_graph_info);
     graph_executor_.emplace(lf_graph_info.graph,
                             std::move(graph_inputs),
                             std::move(graph_outputs),
                             &*lf_logger_,
-                            nullptr);
+                            &*lf_side_effect_provider_);
   }
 
   void execute_impl(lf::Params &params, const lf::Context &context) const override
@@ -1135,4 +1137,26 @@ void GeometryNodesLazyFunctionLogger::log_socket_value(const fn::lazy_function::
   }
 }
 
+Vector<const lf::FunctionNode *> GeometryNodesLazyFunctionSideEffectProvider::
+    get_nodes_with_side_effects(const lf::Context &context) const
+{
+  GeoNodesLFUserData *user_data = dynamic_cast<GeoNodesLFUserData *>(context.user_data);
+  BLI_assert(user_data != nullptr);
+  const GeoNodesModifierData &modifier_data = *user_data->modifier_data;
+
+  Vector<const lf::FunctionNode *> side_effect_nodes;
+
+  /* TODO: Get nodes from context. */
+  for (const lf::Node *node : lf_graph_info_.graph.nodes()) {
+    if (node->is_function()) {
+      const lf::FunctionNode &function_node = *static_cast<const lf::FunctionNode *>(node);
+      if (dynamic_cast<const LazyFunctionForViewerNode *>(&function_node.function())) {
+        side_effect_nodes.append(&function_node);
+      }
+    }
+  }
+
+  return side_effect_nodes;
+}
+
 }  // namespace blender::nodes



More information about the Bf-blender-cvs mailing list