[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 &params, 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