[Bf-blender-cvs] [b96035aabdd] temp-viewport-compositor-compiler: Viewport Compositor: Move GPU material node to its own file

Omar Emara noreply at git.blender.org
Mon Apr 11 11:16:09 CEST 2022


Commit: b96035aabdd46f6d1c99eee310a215a1fef8ac7d
Author: Omar Emara
Date:   Mon Apr 11 09:44:27 2022 +0200
Branches: temp-viewport-compositor-compiler
https://developer.blender.org/rBb96035aabdd46f6d1c99eee310a215a1fef8ac7d

Viewport Compositor: Move GPU material node 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_gpu_material_node.hh
M	source/blender/viewport_compositor/intern/compositor_execute.cc
A	source/blender/viewport_compositor/intern/gpu_material_node.cc

===================================================================

diff --git a/source/blender/viewport_compositor/CMakeLists.txt b/source/blender/viewport_compositor/CMakeLists.txt
index 58cf7567d83..19ddb3e2141 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/gpu_material_node.cc
   intern/node_operation.cc
   intern/operation.cc
   intern/processor_operation.cc
@@ -34,6 +35,7 @@ set(SRC
   VPC_context.hh
   VPC_conversion_processor_operation.hh
   VPC_domain.hh
+  VPC_gpu_material_node.hh
   VPC_input_descriptor.hh
   VPC_node_operation.hh
   VPC_operation.hh
diff --git a/source/blender/viewport_compositor/VPC_compositor_execute.hh b/source/blender/viewport_compositor/VPC_compositor_execute.hh
index b0c37017db1..76748ccf67d 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_gpu_material_node.hh"
 #include "VPC_node_operation.hh"
 #include "VPC_operation.hh"
 #include "VPC_result.hh"
@@ -33,57 +34,6 @@ namespace blender::viewport_compositor {
 
 using namespace nodes::derived_node_tree_types;
 
-/* --------------------------------------------------------------------
- * GPU Material Node.
- */
-
-/* A class that represents a node in a GPU material. The GPU node stacks for inputs and outputs are
- * stored and populated during construction. Derived class should implement the compile method to
- * implement the node and link it to the GPU material. The GPU material compiler is expected to
- * initialize the input links of node before invoking the compile method. */
-class GPUMaterialNode {
- private:
-  /* The node that this operation represents. */
-  DNode node_;
-  /* The GPU node stacks of the inputs of the node. Those are populated during construction in the
-   * populate_inputs method. The links of the inputs are initialized by the GPU material compiler
-   * prior to calling the compile method. There is an extra stack at the end to mark the end of the
-   * array, as this is what the GPU module functions expect. */
-  Vector<GPUNodeStack> inputs_;
-  /* The GPU node stacks of the outputs of the node. Those are populated during construction in the
-   * populate_outputs method. There is an extra stack at the end to mark the end of the array, as
-   * this is what the GPU module functions expect. */
-  Vector<GPUNodeStack> outputs_;
-
- public:
-  /* Construct the node by populating both its inputs and outputs. */
-  GPUMaterialNode(DNode node);
-
-  virtual ~GPUMaterialNode() = default;
-
-  /* Compile the node by adding the appropriate GPU material graph nodes and linking the
-   * appropriate resources. */
-  virtual void compile(GPUMaterial *material) = 0;
-
-  /* Returns a contiguous array containing the GPU node stacks of each input. */
-  GPUNodeStack *get_inputs_array();
-
-  /* Returns a contiguous array containing the GPU node stacks of each output. */
-  GPUNodeStack *get_outputs_array();
-
- protected:
-  /* Returns a reference to the node this operations represents. */
-  bNode &node() const;
-
- private:
-  /* Populate the inputs of the node. The input link is set to nullptr and is expected to be
-   * initialized by the GPU material compiler before calling the compile method. */
-  void populate_inputs();
-  /* Populate the outputs of the node. The output link is set to nullptr and is expected to be
-   * initialized by the compile method. */
-  void populate_outputs();
-};
-
 /* --------------------------------------------------------------------
  * GPU Material Operation.
  */
diff --git a/source/blender/viewport_compositor/VPC_gpu_material_node.hh b/source/blender/viewport_compositor/VPC_gpu_material_node.hh
new file mode 100644
index 00000000000..3358c3f15db
--- /dev/null
+++ b/source/blender/viewport_compositor/VPC_gpu_material_node.hh
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright 2022 Blender Foundation. All rights reserved. */
+
+#pragma once
+
+#include "BLI_vector.hh"
+
+#include "DNA_node_types.h"
+
+#include "GPU_material.h"
+
+#include "NOD_derived_node_tree.hh"
+
+namespace blender::viewport_compositor {
+
+using namespace nodes::derived_node_tree_types;
+
+/* A class that represents a node in a GPU material. The GPU node stacks for inputs and outputs are
+ * stored and populated during construction. Derived class should implement the compile method to
+ * implement the node and link it to the GPU material. The GPU material compiler is expected to
+ * initialize the input links of node before invoking the compile method. */
+class GPUMaterialNode {
+ private:
+  /* The node that this operation represents. */
+  DNode node_;
+  /* The GPU node stacks of the inputs of the node. Those are populated during construction in the
+   * populate_inputs method. The links of the inputs are initialized by the GPU material compiler
+   * prior to calling the compile method. There is an extra stack at the end to mark the end of the
+   * array, as this is what the GPU module functions expect. */
+  Vector<GPUNodeStack> inputs_;
+  /* The GPU node stacks of the outputs of the node. Those are populated during construction in the
+   * populate_outputs method. There is an extra stack at the end to mark the end of the array, as
+   * this is what the GPU module functions expect. */
+  Vector<GPUNodeStack> outputs_;
+
+ public:
+  /* Construct the node by populating both its inputs and outputs. */
+  GPUMaterialNode(DNode node);
+
+  virtual ~GPUMaterialNode() = default;
+
+  /* Compile the node by adding the appropriate GPU material graph nodes and linking the
+   * appropriate resources. */
+  virtual void compile(GPUMaterial *material) = 0;
+
+  /* Returns a contiguous array containing the GPU node stacks of each input. */
+  GPUNodeStack *get_inputs_array();
+
+  /* Returns a contiguous array containing the GPU node stacks of each output. */
+  GPUNodeStack *get_outputs_array();
+
+ protected:
+  /* Returns a reference to the node this operations represents. */
+  bNode &node() const;
+
+ private:
+  /* Populate the inputs of the node. The input link is set to nullptr and is expected to be
+   * initialized by the GPU material compiler before calling the compile method. */
+  void populate_inputs();
+  /* Populate the outputs of the node. The output link is set to nullptr and is expected to be
+   * initialized by the compile method. */
+  void populate_outputs();
+};
+
+}  // 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 73545bbf8cc..2d966267d8a 100644
--- a/source/blender/viewport_compositor/intern/compositor_execute.cc
+++ b/source/blender/viewport_compositor/intern/compositor_execute.cc
@@ -40,6 +40,7 @@
 #include "VPC_compositor_execute.hh"
 #include "VPC_context.hh"
 #include "VPC_domain.hh"
+#include "VPC_gpu_material_node.hh"
 #include "VPC_input_descriptor.hh"
 #include "VPC_node_operation.hh"
 #include "VPC_operation.hh"
@@ -48,125 +49,10 @@
 #include "VPC_texture_pool.hh"
 #include "VPC_utilities.hh"
 
-/* --------------------------------------------------------------------
- * GPU Material Node.
- */
-
 namespace blender::viewport_compositor {
 
 using namespace nodes::derived_node_tree_types;
 
-GPUMaterialNode::GPUMaterialNode(DNode node) : node_(node)
-{
-  populate_inputs();
-  populate_outputs();
-}
-
-GPUNodeStack *GPUMaterialNode::get_inputs_array()
-{
-  return inputs_.data();
-}
-
-GPUNodeStack *GPUMaterialNode::get_outputs_array()
-{
-  return outputs_.data();
-}
-
-bNode &GPUMaterialNode::node() const
-{
-  return *node_->bnode();
-}
-
-static eGPUType gpu_type_from_socket_type(eNodeSocketDatatype type)
-{
-  switch (type) {
-    case SOCK_FLOAT:
-      return GPU_FLOAT;
-    case SOCK_VECTOR:
-      return GPU_VEC3;
-    case SOCK_RGBA:
-      return GPU_VEC4;
-    default:
-      BLI_assert_unreachable();
-      return GPU_NONE;
-  }
-}
-
-static void gpu_stack_vector_from_socket(float *vector, const SocketRef *socket)
-{
-  switch (socket->bsocket()->type) {
-    case SOCK_FLOAT:
-      vector[0] = socket->default_value<bNodeSocketValueFloat>()->value;
-      return;
-    case SOCK_VECTOR:
-      copy_v3_v3(vector, socket->default_value<bNodeSocketValueVector>()->value);
-      return;
-    case SOCK_RGBA:
-      copy_v4_v4(vector, socket->default_value<bNodeSocketValueRGBA>()->value);
-      return;
-    default:
-      BLI_assert_unreachable();
-  }
-}
-
-static void populate_gpu_node_stack(DSocket socket, GPUNodeStack &stack)
-{
-  /* Make sure this stack is not marked as the end of the stack array. */
-  stack.end = false;
-  /* This will be initialized later by the GPU material compiler or the compile method. */
-  stack.link = nullptr;
-  /* Socket type and its corresponding GPU type. */
-  stack.sockettype = socket->bsocket()->type;
-  stack.type = gpu_type_from_socket_type((eNodeSocketDatatype)socket->bsocket()->type);
-
-  if (socket->is_input()) {
-    /* Get the origin socket connected to the input if any. */
-    const DInputSocket input{socket.context(), &socket->as_input()};
-    DSocket origin = get_node_input_origin_socket(input);
-    /* The input is linked if the origin socket is not null and is an output socket. Had it been an
-     * input socket, then it is an unlinked input of a group input node. */
-    stack.hasinput = origin->is_output();
-    /* Get the socket value from the origin if it is an input, because then it would be an unlinked
-     * input of a group input node, otherwise, get the value from the socket itself. */
-    if (origin->is_input()) {
-      gpu_stack_vector_from_socket(stack.vec, origin.socket_ref());
-    }
-    else {
-      gpu_stack_vector_from_socket(stack.vec, socket.socket_ref());
-    }
-  }
-  else {
-    stack.hasoutput = socket->is_logically_linked();
-    /* Populate the stack vector even for outputs because some nodes store their properties in the
-     * default values of t

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list