[Bf-blender-cvs] [4f1de2be9d6] temp-geometry-nodes-evaluator-refactor: cleanup
Jacques Lucke
noreply at git.blender.org
Wed Aug 31 16:08:07 CEST 2022
Commit: 4f1de2be9d611781744ae9575b6868ea270922c9
Author: Jacques Lucke
Date: Wed Aug 24 13:33:52 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB4f1de2be9d611781744ae9575b6868ea270922c9
cleanup
===================================================================
M source/blender/nodes/NOD_geometry_exec.hh
M source/blender/nodes/NOD_geometry_nodes_log.hh
M source/blender/nodes/intern/geometry_nodes_log.cc
M source/blender/nodes/intern/geometry_nodes_to_lazy_function_graph.cc
===================================================================
diff --git a/source/blender/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh
index d608731d561..62181cc74a6 100644
--- a/source/blender/nodes/NOD_geometry_exec.hh
+++ b/source/blender/nodes/NOD_geometry_exec.hh
@@ -145,15 +145,8 @@ class GeoNodeExecParams {
const int index = this->get_output_index(identifier);
const bNodeSocket *socket = node_.output_by_identifier(identifier).bsocket();
- geo_eval_log::GeoTreeLogger &tree_log = this->get_local_tree_logger();
- StoredT *logged_value = static_cast<StoredT *>(
- tree_log.allocator.allocate(sizeof(StoredT), alignof(StoredT)));
- new (logged_value) StoredT(value);
- destruct_ptr<geo_eval_log::GenericValueLog> value_log =
- tree_log.allocator.construct<geo_eval_log::GenericValueLog>(logged_value);
- tree_log.output_socket_values.append({node_.name(), socket->identifier, value_log.get()});
- tree_log.socket_values_owner.append(std::move(value_log));
-
+ geo_eval_log::GeoTreeLogger &logger = this->get_local_tree_logger();
+ logger.log_value(*node_.bnode(), *socket, {&value});
params_.set_output(index, std::forward<T>(value));
}
}
diff --git a/source/blender/nodes/NOD_geometry_nodes_log.hh b/source/blender/nodes/NOD_geometry_nodes_log.hh
index 93314262e0f..1b78c7856f2 100644
--- a/source/blender/nodes/NOD_geometry_nodes_log.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_log.hh
@@ -81,6 +81,8 @@ class GeoTreeLogger {
Vector<std::tuple<std::string, std::string, ValueLog *>> input_socket_values;
Vector<std::tuple<std::string, std::string, ValueLog *>> output_socket_values;
Vector<std::tuple<std::string, TimePoint, TimePoint>> node_execution_times;
+
+ void log_value(const bNode &node, const bNodeSocket &socket, GPointer value);
};
class GeoNodeLog {
diff --git a/source/blender/nodes/intern/geometry_nodes_log.cc b/source/blender/nodes/intern/geometry_nodes_log.cc
index 3ff1ddc9203..18496b2254d 100644
--- a/source/blender/nodes/intern/geometry_nodes_log.cc
+++ b/source/blender/nodes/intern/geometry_nodes_log.cc
@@ -5,6 +5,19 @@
namespace blender::nodes::geo_eval_log {
+void GeoTreeLogger::log_value(const bNode &node, const bNodeSocket &socket, GPointer value)
+{
+ const CPPType &type = *value.type();
+ void *buffer = this->allocator.allocate(type.size(), type.alignment());
+ type.copy_construct(value.get(), buffer);
+ destruct_ptr<GenericValueLog> value_log = this->allocator.construct<GenericValueLog>(
+ GMutablePointer{type, buffer});
+ auto &socket_values = socket.in_out == SOCK_IN ? this->input_socket_values :
+ this->output_socket_values;
+ socket_values.append({node.name, socket.identifier, value_log.get()});
+ this->socket_values_owner.append(std::move(value_log));
+}
+
void GeoTreeLog::ensure_node_warnings()
{
if (reduced_node_warnings_) {
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 aedc88adb49..aaeaa7eb2bd 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
@@ -373,6 +373,7 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction {
const NodeMultiFunctions::Item fn_item_;
Vector<const ValueOrFieldCPPType *> input_types_;
Vector<const ValueOrFieldCPPType *> output_types_;
+ Vector<const OutputSocketRef *> output_sockets_;
public:
LazyFunctionForMultiFunctionNode(const NodeRef &node,
@@ -390,6 +391,7 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction {
for (const lf::Output &fn_output : outputs_) {
output_types_.append(dynamic_cast<const ValueOrFieldCPPType *>(fn_output.type));
}
+ output_sockets_ = r_used_outputs;
}
void execute_impl(lf::Params ¶ms, const lf::Context &context) const override
@@ -401,32 +403,19 @@ class LazyFunctionForMultiFunctionNode : public LazyFunction {
geo_eval_log::GeoTreeLogger &logger =
user_data->modifier_data->eval_log->get_local_tree_logger(*context_stack);
- Vector<const void *> inputs_values(inputs_.size());
- Vector<void *> outputs_values(outputs_.size());
+ Vector<const void *> input_values(inputs_.size());
+ Vector<void *> output_values(outputs_.size());
for (const int i : inputs_.index_range()) {
- inputs_values[i] = params.try_get_input_data_ptr(i);
+ input_values[i] = params.try_get_input_data_ptr(i);
}
for (const int i : outputs_.index_range()) {
- outputs_values[i] = params.get_output_data_ptr(i);
- }
- execute_multi_function_on_value_or_field(*fn_item_.fn,
- fn_item_.owned_fn,
- input_types_,
- output_types_,
- inputs_values,
- outputs_values);
+ output_values[i] = params.get_output_data_ptr(i);
+ }
+ execute_multi_function_on_value_or_field(
+ *fn_item_.fn, fn_item_.owned_fn, input_types_, output_types_, input_values, output_values);
for (const int i : outputs_.index_range()) {
const CPPType &type = *this->outputs_[i].type;
- void *buffer = logger.allocator.allocate(type.size(), type.alignment());
- type.copy_construct(outputs_values[i], buffer);
- destruct_ptr<geo_eval_log::GenericValueLog> value_log =
- logger.allocator.construct<geo_eval_log::GenericValueLog>(GMutablePointer{type, buffer});
- /* TODO: Take unavailable sockets into account. */
- const int index = i;
- logger.output_socket_values.append(
- {node_.name(), node_.output(index).identifier(), value_log.get()});
- logger.socket_values_owner.append(std::move(value_log));
-
+ logger.log_value(*node_.bnode(), *output_sockets_[i]->bsocket(), {type, output_values[i]});
params.output_set(i);
}
}
More information about the Bf-blender-cvs
mailing list