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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs