[Bf-blender-cvs] [5f5ee2718e6] temp-viewport-compositor-compiler: Viewport Compositor: Move node operation to its own file
Omar Emara
noreply at git.blender.org
Fri Apr 8 18:20:28 CEST 2022
Commit: 5f5ee2718e63efad28c1951db17751df65817eea
Author: Omar Emara
Date: Fri Apr 8 18:19:51 2022 +0200
Branches: temp-viewport-compositor-compiler
https://developer.blender.org/rB5f5ee2718e63efad28c1951db17751df65817eea
Viewport Compositor: Move node operation to its own file
===================================================================
M source/blender/viewport_compositor/CMakeLists.txt
M source/blender/viewport_compositor/VPC_compositor_execute.hh
A source/blender/viewport_compositor/VPC_node_operation.hh
R080 source/blender/viewport_compositor/VPC_utils.hh source/blender/viewport_compositor/VPC_utilities.hh
M source/blender/viewport_compositor/intern/compositor_execute.cc
A source/blender/viewport_compositor/intern/node_operation.cc
M source/blender/viewport_compositor/intern/scheduler.cc
R058 source/blender/viewport_compositor/intern/utils.cc source/blender/viewport_compositor/intern/utilities.cc
===================================================================
diff --git a/source/blender/viewport_compositor/CMakeLists.txt b/source/blender/viewport_compositor/CMakeLists.txt
index 22be0bf174b..58cf7567d83 100644
--- a/source/blender/viewport_compositor/CMakeLists.txt
+++ b/source/blender/viewport_compositor/CMakeLists.txt
@@ -20,6 +20,7 @@ set(SRC
intern/context.cc
intern/conversion_processor_operation.cc
intern/domain.cc
+ intern/node_operation.cc
intern/operation.cc
intern/processor_operation.cc
intern/realize_on_domain_processor_operation.cc
@@ -27,13 +28,14 @@ set(SRC
intern/result.cc
intern/scheduler.cc
intern/texture_pool.cc
- intern/utils.cc
+ intern/utilities.cc
VPC_compositor_execute.hh
VPC_context.hh
VPC_conversion_processor_operation.hh
VPC_domain.hh
VPC_input_descriptor.hh
+ VPC_node_operation.hh
VPC_operation.hh
VPC_processor_operation.hh
VPC_realize_on_domain_processor_operation.hh
@@ -41,7 +43,7 @@ set(SRC
VPC_result.hh
VPC_scheduler.hh
VPC_texture_pool.hh
- VPC_utils.hh
+ VPC_utilities.hh
)
set(LIB
diff --git a/source/blender/viewport_compositor/VPC_compositor_execute.hh b/source/blender/viewport_compositor/VPC_compositor_execute.hh
index db3e648160a..b0c37017db1 100644
--- a/source/blender/viewport_compositor/VPC_compositor_execute.hh
+++ b/source/blender/viewport_compositor/VPC_compositor_execute.hh
@@ -23,6 +23,7 @@
#include "VPC_context.hh"
#include "VPC_domain.hh"
+#include "VPC_node_operation.hh"
#include "VPC_operation.hh"
#include "VPC_result.hh"
#include "VPC_scheduler.hh"
@@ -30,48 +31,8 @@
namespace blender::viewport_compositor {
-/* --------------------------------------------------------------------
- * Node Operation.
- */
-
using namespace nodes::derived_node_tree_types;
-/* The operation class that nodes should implement and instantiate in the bNodeType
- * get_compositor_operation, passing the given inputs to the constructor. */
-class NodeOperation : public Operation {
- private:
- /* The node that this operation represents. */
- DNode node_;
- /* A vector storing unique pointers to the results mapped to unlinked inputs. */
- Vector<std::unique_ptr<Result>> unlinked_inputs_results_;
- /* A mapping between each unlinked input in the node identified by its identifier and its
- * corresponding input socket. */
- Map<StringRef, DInputSocket> unlinked_inputs_sockets_;
-
- public:
- /* Initialize members by the given arguments, populate the output results based on the node
- * outputs, populate the input types maps based on the node inputs, and add results for unlinked
- * inputs. */
- NodeOperation(Context &context, DNode node);
-
- /* Returns a reference to the node this operations represents. */
- const bNode &node() const;
-
- protected:
- /* Returns true if the output identified by the given identifier is needed and should be
- * computed, otherwise returns false. */
- bool is_output_needed(StringRef identifier) const;
-
- /* Set the values of the results for unlinked inputs. */
- void pre_execute() override;
-
- private:
- /* For each unlinked input in the node, construct a new result of an appropriate type, add it to
- * the unlinked_inputs_results_ vector, map the input to it, and map the input to its
- * corresponding input socket through the unlinked_inputs_sockets_ map. */
- void populate_results_for_unlinked_inputs();
-};
-
/* --------------------------------------------------------------------
* GPU Material Node.
*/
diff --git a/source/blender/viewport_compositor/VPC_node_operation.hh b/source/blender/viewport_compositor/VPC_node_operation.hh
new file mode 100644
index 00000000000..ee4b3235982
--- /dev/null
+++ b/source/blender/viewport_compositor/VPC_node_operation.hh
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright 2022 Blender Foundation. All rights reserved. */
+
+#pragma once
+
+#include <memory>
+
+#include "BLI_map.hh"
+#include "BLI_string_ref.hh"
+#include "BLI_vector.hh"
+
+#include "DNA_node_types.h"
+
+#include "NOD_derived_node_tree.hh"
+
+#include "VPC_context.hh"
+#include "VPC_operation.hh"
+#include "VPC_result.hh"
+
+namespace blender::viewport_compositor {
+
+using namespace nodes::derived_node_tree_types;
+
+/* The operation class that nodes should implement and instantiate in the bNodeType
+ * get_compositor_operation, passing the given inputs to the constructor. */
+class NodeOperation : public Operation {
+ private:
+ /* The node that this operation represents. */
+ DNode node_;
+ /* A vector storing unique pointers to the results mapped to unlinked inputs. */
+ Vector<std::unique_ptr<Result>> unlinked_inputs_results_;
+ /* A mapping between each unlinked input in the node identified by its identifier and its
+ * corresponding input socket. */
+ Map<StringRef, DInputSocket> unlinked_inputs_sockets_;
+
+ public:
+ /* Initialize members by the given arguments, populate the output results based on the node
+ * outputs, populate the input types maps based on the node inputs, and add results for unlinked
+ * inputs. */
+ NodeOperation(Context &context, DNode node);
+
+ /* Returns a reference to the node this operations represents. */
+ const bNode &node() const;
+
+ protected:
+ /* Returns true if the output identified by the given identifier is needed and should be
+ * computed, otherwise returns false. */
+ bool is_output_needed(StringRef identifier) const;
+
+ /* Set the values of the results for unlinked inputs. */
+ void pre_execute() override;
+
+ private:
+ /* For each unlinked input in the node, construct a new result of an appropriate type, add it to
+ * the unlinked_inputs_results_ vector, map the input to it, and map the input to its
+ * corresponding input socket through the unlinked_inputs_sockets_ map. */
+ void populate_results_for_unlinked_inputs();
+};
+
+} // namespace blender::viewport_compositor
diff --git a/source/blender/viewport_compositor/VPC_utils.hh b/source/blender/viewport_compositor/VPC_utilities.hh
similarity index 80%
rename from source/blender/viewport_compositor/VPC_utils.hh
rename to source/blender/viewport_compositor/VPC_utilities.hh
index ac20c6ee1c4..c6c78c04b5c 100644
--- a/source/blender/viewport_compositor/VPC_utils.hh
+++ b/source/blender/viewport_compositor/VPC_utilities.hh
@@ -5,6 +5,8 @@
#include "NOD_derived_node_tree.hh"
+#include "VPC_result.hh"
+
namespace blender::viewport_compositor {
using namespace nodes::derived_node_tree_types;
@@ -15,4 +17,7 @@ using namespace nodes::derived_node_tree_types;
* to an unlinked input of a group input node. */
DSocket get_node_input_origin_socket(DInputSocket input);
+/* Get the result type that corresponds to the type of the given socket. */
+ResultType get_node_socket_result_type(const SocketRef *socket);
+
} // namespace blender::viewport_compositor
diff --git a/source/blender/viewport_compositor/intern/compositor_execute.cc b/source/blender/viewport_compositor/intern/compositor_execute.cc
index cc7d10c9148..73545bbf8cc 100644
--- a/source/blender/viewport_compositor/intern/compositor_execute.cc
+++ b/source/blender/viewport_compositor/intern/compositor_execute.cc
@@ -41,121 +41,20 @@
#include "VPC_context.hh"
#include "VPC_domain.hh"
#include "VPC_input_descriptor.hh"
+#include "VPC_node_operation.hh"
#include "VPC_operation.hh"
#include "VPC_result.hh"
#include "VPC_scheduler.hh"
#include "VPC_texture_pool.hh"
-#include "VPC_utils.hh"
-
-namespace blender::viewport_compositor {
+#include "VPC_utilities.hh"
/* --------------------------------------------------------------------
- * Node Operation.
+ * GPU Material Node.
*/
-using namespace nodes::derived_node_tree_types;
-
-static ResultType get_node_socket_result_type(const SocketRef *socket)
-{
- switch (socket->bsocket()->type) {
- case SOCK_FLOAT:
- return ResultType::Float;
- case SOCK_VECTOR:
- return ResultType::Vector;
- case SOCK_RGBA:
- return ResultType::Color;
- default:
- BLI_assert_unreachable();
- return ResultType::Float;
- }
-}
-
-NodeOperation::NodeOperation(Context &context, DNode node) : Operation(context), node_(node)
-{
- /* Populate the output results. */
- for (const OutputSocketRef *output : node->outputs()) {
- const ResultType result_type = get_node_socket_result_type(output);
- const Result result = Result(result_type, texture_pool());
- populate_result(output->identifier(), result);
- }
-
- /* Populate the input descriptors. */
- for (const InputSocketRef *input : node->inputs()) {
- InputDescriptor input_descriptor;
- input_descriptor.type = get_node_socket_result_type(input);
- const nodes::SocketDeclarationPtr &socket_declaration =
- input->node().declaration()->inputs()[input->index()];
- input_descriptor.domain_priority = socket_declaration->compositor_domain_priority();
- input_descriptor.expects_single_value = socket_declaration->compositor_expects_single_value();
- declare_input_descriptor(input->identifier(), input_descriptor);
- }
-
- populate_results_for_unlinked_inputs();
-}
-
-const bNode &NodeOperation::node() const
-{
- return *node_->bnode();
-}
-
-bool NodeOperation::is_output_needed(StringRef identifier) const
-{
- DOutputSocket output = node_.output_by_identifier(identifier);
- if (output->logically_linked_sockets().is_empty()) {
- return false;
- }
- return true;
-}
-
-void NodeOperation::pre_execute()
-{
- /* For each unlinked input socket, allocate a single value and set the value to the socket's
- * default value. */
- for (const Map<StringRef, DInputSocket>::Item &item : unlinked_inputs_sockets_.items()) {
- Result &result = get_input(item.key);
- DInputSocket input = item.value;
- result.allocate_single_value();
- switch (result.type()) {
- case ResultType::Float:
- result.set_float_value(input->default_value<bNodeSocketValueFloat>()->value);
- continue;
- case ResultType::Vector:
- result.set_vector_value(float3(input->default_value<bNodeSocketValueVector>()->value));
- continue;
- case ResultType::Color:
- result.set_color_value(float4(input->default_value<bNodeSocketValueRGBA>()->value));
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list