[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