[Bf-blender-cvs] [a8a71d6b630] temp-geometry-nodes-evaluator-refactor: bring back used named attributes overlay

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


Commit: a8a71d6b63008d8206b420fbf25bbba3cd07f1c2
Author: Jacques Lucke
Date:   Thu Sep 8 11:39:36 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rBa8a71d6b63008d8206b420fbf25bbba3cd07f1c2

bring back used named attributes overlay

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

M	source/blender/editors/space_node/node_draw.cc
M	source/blender/nodes/NOD_geometry_nodes_log.hh
M	source/blender/nodes/intern/geometry_nodes_log.cc
M	source/blender/nodes/intern/node_geometry_exec.cc

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

diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index 12d023d83db..9acce34430b 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -1845,35 +1845,11 @@ static NodeExtraInfoRow row_from_used_named_attribute(
   return row;
 }
 
-static std::optional<NodeExtraInfoRow> node_get_accessed_attributes_row(const SpaceNode &snode,
-                                                                        const bNode &node)
+static std::optional<NodeExtraInfoRow> node_get_accessed_attributes_row(
+    TreeDrawContext &tree_draw_ctx, const bNode &node)
 {
-  UNUSED_VARS(snode);
-  if (node.type == NODE_GROUP) {
-    // const geo_log::TreeLog *root_tree_log =
-    // geo_log::ModifierLog::find_tree_by_node_editor_context(
-    //     snode);
-    // if (root_tree_log == nullptr) {
-    //   return std::nullopt;
-    // }
-    // const geo_log::TreeLog *tree_log = root_tree_log->lookup_child_log(node.name);
-    // if (tree_log == nullptr) {
-    //   return std::nullopt;
-    // }
-
-    Map<std::string, NamedAttributeUsage> usage_by_attribute;
-    // tree_log->foreach_node_log([&](const geo_log::NodeLog &node_log) {
-    //   for (const geo_log::UsedNamedAttribute &used_attribute : node_log.used_named_attributes())
-    //   {
-    //     usage_by_attribute.lookup_or_add_as(used_attribute.name,
-    //                                         used_attribute.usage) |= used_attribute.usage;
-    //   }
-    // });
-    if (usage_by_attribute.is_empty()) {
-      return std::nullopt;
-    }
-
-    return row_from_used_named_attribute(usage_by_attribute);
+  if (tree_draw_ctx.geo_tree_log == nullptr) {
+    return std::nullopt;
   }
   if (ELEM(node.type,
            GEO_NODE_STORE_NAMED_ATTRIBUTE,
@@ -1882,29 +1858,21 @@ static std::optional<NodeExtraInfoRow> node_get_accessed_attributes_row(const Sp
     /* Only show the overlay when the name is passed in from somewhere else. */
     LISTBASE_FOREACH (bNodeSocket *, socket, &node.inputs) {
       if (STREQ(socket->name, "Name")) {
-        if ((socket->flag & SOCK_IN_USE) == 0) {
+        if (!socket->is_directly_linked()) {
           return std::nullopt;
         }
       }
     }
-    // const geo_log::NodeLog *node_log = geo_log::ModifierLog::find_node_by_node_editor_context(
-    //     snode, node.name);
-    // if (node_log == nullptr) {
-    //   return std::nullopt;
-    // }
-    Map<std::string, NamedAttributeUsage> usage_by_attribute;
-    // for (const geo_log::UsedNamedAttribute &used_attribute : node_log->used_named_attributes())
-    // {
-    //   usage_by_attribute.lookup_or_add_as(used_attribute.name,
-    //                                       used_attribute.usage) |= used_attribute.usage;
-    // }
-    // if (usage_by_attribute.is_empty()) {
-    //   return std::nullopt;
-    // }
-    return row_from_used_named_attribute(usage_by_attribute);
   }
-
-  return std::nullopt;
+  tree_draw_ctx.geo_tree_log->ensure_used_named_attributes();
+  GeoNodeLog *node_log = tree_draw_ctx.geo_tree_log->nodes.lookup_ptr(node.name);
+  if (node_log == nullptr) {
+    return std::nullopt;
+  }
+  if (node_log->used_named_attributes.is_empty()) {
+    return std::nullopt;
+  }
+  return row_from_used_named_attribute(node_log->used_named_attributes);
 }
 
 static Vector<NodeExtraInfoRow> node_get_extra_info(TreeDrawContext &tree_draw_ctx,
@@ -1918,7 +1886,8 @@ static Vector<NodeExtraInfoRow> node_get_extra_info(TreeDrawContext &tree_draw_c
 
   if (snode.overlay.flag & SN_OVERLAY_SHOW_NAMED_ATTRIBUTES &&
       snode.edittree->type == NTREE_GEOMETRY) {
-    if (std::optional<NodeExtraInfoRow> row = node_get_accessed_attributes_row(snode, node)) {
+    if (std::optional<NodeExtraInfoRow> row = node_get_accessed_attributes_row(tree_draw_ctx,
+                                                                               node)) {
       rows.append(std::move(*row));
     }
   }
diff --git a/source/blender/nodes/NOD_geometry_nodes_log.hh b/source/blender/nodes/NOD_geometry_nodes_log.hh
index b8fb55abffb..199fb1991b6 100644
--- a/source/blender/nodes/NOD_geometry_nodes_log.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_log.hh
@@ -129,7 +129,10 @@ class GeoTreeLogger {
   Vector<std::tuple<std::string, std::string, ValueLog *>> output_socket_values;
   Vector<std::tuple<std::string, TimePoint, TimePoint>> node_execution_times;
   Vector<std::tuple<std::string, destruct_ptr<ViewerNodeLog>>, 0> viewer_node_logs_;
+  Vector<std::tuple<std::string, std::string, NamedAttributeUsage>, 0> used_named_attributes_;
 
+  GeoTreeLogger();
+  ~GeoTreeLogger();
   void log_value(const bNode &node, const bNodeSocket &socket, GPointer value);
   void log_viewer_node(const bNode &viewer_node, const GeometrySet &geometry, const GField &field);
 };
@@ -140,6 +143,10 @@ class GeoNodeLog {
   std::chrono::nanoseconds run_time{0};
   Map<std::string, ValueLog *> input_values_;
   Map<std::string, ValueLog *> output_values_;
+  Map<std::string, NamedAttributeUsage> used_named_attributes;
+
+  GeoNodeLog();
+  ~GeoNodeLog();
 };
 
 class GeoModifierLog;
@@ -153,6 +160,7 @@ class GeoTreeLog {
   bool reduced_socket_values_ = false;
   bool reduced_viewer_node_logs_ = false;
   bool reduced_existing_attributes_ = false;
+  bool reduced_used_named_attributes_ = false;
 
  public:
   Map<std::string, GeoNodeLog> nodes;
@@ -160,17 +168,17 @@ class GeoTreeLog {
   Vector<NodeWarning> all_warnings;
   std::chrono::nanoseconds run_time_sum{0};
   Vector<const GeometryAttributeInfo *> existing_attributes;
+  Map<std::string, NamedAttributeUsage> used_named_attributes;
 
-  GeoTreeLog(GeoModifierLog *modifier_log, Vector<GeoTreeLogger *> tree_loggers)
-      : modifier_log_(modifier_log), tree_loggers_(std::move(tree_loggers))
-  {
-  }
+  GeoTreeLog(GeoModifierLog *modifier_log, Vector<GeoTreeLogger *> tree_loggers);
+  ~GeoTreeLog();
 
   void ensure_node_warnings();
   void ensure_node_run_time();
   void ensure_socket_values();
   void ensure_viewer_node_logs();
   void ensure_existing_attributes();
+  void ensure_used_named_attributes();
 
   ValueLog *find_socket_value_log(const bNodeSocket &query_socket);
 };
diff --git a/source/blender/nodes/intern/geometry_nodes_log.cc b/source/blender/nodes/intern/geometry_nodes_log.cc
index c907f475771..5d86ceab0f9 100644
--- a/source/blender/nodes/intern/geometry_nodes_log.cc
+++ b/source/blender/nodes/intern/geometry_nodes_log.cc
@@ -114,6 +114,20 @@ GeometryInfoLog::GeometryInfoLog(const GeometrySet &geometry_set)
   }
 }
 
+/* Avoid generating these in every translation unit. */
+GeoTreeLogger::GeoTreeLogger() = default;
+GeoTreeLogger::~GeoTreeLogger() = default;
+
+GeoNodeLog::GeoNodeLog() = default;
+GeoNodeLog::~GeoNodeLog() = default;
+
+GeoTreeLog::GeoTreeLog(GeoModifierLog *modifier_log, Vector<GeoTreeLogger *> tree_loggers)
+    : modifier_log_(modifier_log), tree_loggers_(std::move(tree_loggers))
+{
+}
+
+GeoTreeLog::~GeoTreeLog() = default;
+
 void GeoTreeLogger::log_value(const bNode &node, const bNodeSocket &socket, const GPointer value)
 {
   const CPPType &type = *value.type();
@@ -182,15 +196,15 @@ void GeoTreeLog::ensure_node_warnings()
       this->all_warnings.append(warnings.second);
     }
     for (const ComputeContextHash &child_hash : tree_logger->children_hashes) {
-      GeoTreeLog &child_reduced_log = modifier_log_->get_tree_log(child_hash);
-      child_reduced_log.ensure_node_warnings();
+      GeoTreeLog &child_log = modifier_log_->get_tree_log(child_hash);
+      child_log.ensure_node_warnings();
       const std::optional<std::string> &group_node_name =
-          child_reduced_log.tree_loggers_[0]->group_node_name;
+          child_log.tree_loggers_[0]->group_node_name;
       if (group_node_name.has_value()) {
         this->nodes.lookup_or_add_default(*group_node_name)
-            .warnings.extend(child_reduced_log.all_warnings);
+            .warnings.extend(child_log.all_warnings);
       }
-      this->all_warnings.extend(child_reduced_log.all_warnings);
+      this->all_warnings.extend(child_log.all_warnings);
     }
   }
   reduced_node_warnings_ = true;
@@ -210,15 +224,14 @@ void GeoTreeLog::ensure_node_run_time()
       this->run_time_sum += duration;
     }
     for (const ComputeContextHash &child_hash : tree_logger->children_hashes) {
-      GeoTreeLog &child_reduced_log = modifier_log_->get_tree_log(child_hash);
-      child_reduced_log.ensure_node_run_time();
+      GeoTreeLog &child_log = modifier_log_->get_tree_log(child_hash);
+      child_log.ensure_node_run_time();
       const std::optional<std::string> &group_node_name =
-          child_reduced_log.tree_loggers_[0]->group_node_name;
+          child_log.tree_loggers_[0]->group_node_name;
       if (group_node_name.has_value()) {
-        this->nodes.lookup_or_add_default(*group_node_name).run_time +=
-            child_reduced_log.run_time_sum;
+        this->nodes.lookup_or_add_default(*group_node_name).run_time += child_log.run_time_sum;
       }
-      this->run_time_sum += child_reduced_log.run_time_sum;
+      this->run_time_sum += child_log.run_time_sum;
     }
   }
   reduced_node_run_times_ = true;
@@ -290,6 +303,39 @@ void GeoTreeLog::ensure_existing_attributes()
   reduced_existing_attributes_ = true;
 }
 
+void GeoTreeLog::ensure_used_named_attributes()
+{
+  if (reduced_used_named_attributes_) {
+    return;
+  }
+
+  auto add_attribute = [&](const StringRef node_name,
+                           const StringRef attribute_name,
+                           const NamedAttributeUsage &usage) {
+    this->nodes.lookup_or_add_as(node_name).used_named_attributes.lookup_or_add_as(attribute_name,
+                                                                                   usage) |= usage;
+    this->used_named_attributes.lookup_or_add_as(attribute_name, usage) |= usage;
+  };
+
+  for (GeoTreeLogger *tree_logger : tree_loggers_) {
+    for (const std::tuple<std::string, std::string, NamedAttributeUsage> &item :
+         tree_logger->used_named_attributes_) {
+      add_attribute(std::get<0>(item), std::get<1>(item), std::get<2>(item));
+    }
+    for (co

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list