diff --git a/src/video_core/shader/node.h b/src/video_core/shader/node.h
index 1e7a5f69923477e90edfcbec644a064a13e1ff18..c002f90f90c93176708e850024e5f0541d2f6caa 100644
--- a/src/video_core/shader/node.h
+++ b/src/video_core/shader/node.h
@@ -18,25 +18,6 @@
 
 namespace VideoCommon::Shader {
 
-class OperationNode;
-class ConditionalNode;
-class GprNode;
-class ImmediateNode;
-class InternalFlagNode;
-class PredicateNode;
-class AbufNode; ///< Attribute buffer
-class CbufNode; ///< Constant buffer
-class LmemNode; ///< Local memory
-class GmemNode; ///< Global memory
-class CommentNode;
-
-using NodeData =
-    std::variant<OperationNode, ConditionalNode, GprNode, ImmediateNode, InternalFlagNode,
-                 PredicateNode, AbufNode, CbufNode, LmemNode, GmemNode, CommentNode>;
-using Node = std::shared_ptr<NodeData>;
-using Node4 = std::array<Node, 4>;
-using NodeBlock = std::vector<Node>;
-
 enum class OperationCode {
     Assign, /// (float& dest, float src) -> void
 
@@ -193,21 +174,40 @@ enum class InternalFlag {
     Amount = 4,
 };
 
+class OperationNode;
+class ConditionalNode;
+class GprNode;
+class ImmediateNode;
+class InternalFlagNode;
+class PredicateNode;
+class AbufNode;
+class CbufNode;
+class LmemNode;
+class GmemNode;
+class CommentNode;
+
+using NodeData =
+    std::variant<OperationNode, ConditionalNode, GprNode, ImmediateNode, InternalFlagNode,
+                 PredicateNode, AbufNode, CbufNode, LmemNode, GmemNode, CommentNode>;
+using Node = std::shared_ptr<NodeData>;
+using Node4 = std::array<Node, 4>;
+using NodeBlock = std::vector<Node>;
+
 class Sampler {
 public:
-    // Use this constructor for bounded Samplers
+    /// This constructor is for bound samplers
     explicit Sampler(std::size_t offset, std::size_t index, Tegra::Shader::TextureType type,
                      bool is_array, bool is_shadow)
         : offset{offset}, index{index}, type{type}, is_array{is_array}, is_shadow{is_shadow},
           is_bindless{false} {}
 
-    // Use this constructor for bindless Samplers
+    /// This constructor is for bindless samplers
     explicit Sampler(u32 cbuf_index, u32 cbuf_offset, std::size_t index,
                      Tegra::Shader::TextureType type, bool is_array, bool is_shadow)
         : offset{(static_cast<u64>(cbuf_index) << 32) | cbuf_offset}, index{index}, type{type},
           is_array{is_array}, is_shadow{is_shadow}, is_bindless{true} {}
 
-    // Use this only for serialization/deserialization
+    /// This constructor is for serialization/deserialization
     explicit Sampler(std::size_t offset, std::size_t index, Tegra::Shader::TextureType type,
                      bool is_array, bool is_shadow, bool is_bindless)
         : offset{offset}, index{index}, type{type}, is_array{is_array}, is_shadow{is_shadow},
@@ -267,21 +267,24 @@ struct GlobalMemoryBase {
     }
 };
 
+/// Parameters describing an arithmetic operation
 struct MetaArithmetic {
-    bool precise{};
+    bool precise{}; ///< Whether the operation can be constraint or not
 };
 
+/// Parameters describing a texture sampler
 struct MetaTexture {
     const Sampler& sampler;
-    Node array{};
-    Node depth_compare{};
+    Node array;
+    Node depth_compare;
     std::vector<Node> aoffi;
-    Node bias{};
-    Node lod{};
+    Node bias;
+    Node lod;
     Node component{};
     u32 element{};
 };
 
+/// Parameters that modify an operation but are not part of any particular operand
 using Meta = std::variant<MetaArithmetic, MetaTexture, Tegra::Shader::HalfType>;
 
 /// Holds any kind of operation that can be done in the IR
@@ -328,9 +331,9 @@ private:
 class ConditionalNode final {
 public:
     explicit ConditionalNode(Node condition, std::vector<Node>&& code)
-        : condition{condition}, code{std::move(code)} {}
+        : condition{std::move(condition)}, code{std::move(code)} {}
 
-    Node GetCondition() const {
+    const Node& GetCondition() const {
         return condition;
     }
 
@@ -339,7 +342,7 @@ public:
     }
 
 private:
-    const Node condition;   ///< Condition to be satisfied
+    Node condition;         ///< Condition to be satisfied
     std::vector<Node> code; ///< Code to execute
 };
 
@@ -353,7 +356,7 @@ public:
     }
 
 private:
-    const Tegra::Shader::Register index;
+    Tegra::Shader::Register index{};
 };
 
 /// A 32-bits value that represents an immediate value
@@ -366,7 +369,7 @@ public:
     }
 
 private:
-    const u32 value;
+    u32 value{};
 };
 
 /// One of Maxwell's internal flags
@@ -379,7 +382,7 @@ public:
     }
 
 private:
-    const InternalFlag flag;
+    InternalFlag flag{};
 };
 
 /// A predicate register, it can be negated without additional nodes
@@ -397,8 +400,8 @@ public:
     }
 
 private:
-    const Tegra::Shader::Pred index;
-    const bool negated;
+    Tegra::Shader::Pred index{};
+    bool negated{};
 };
 
 /// Attribute buffer memory (known as attributes or varyings in GLSL terms)
@@ -410,7 +413,7 @@ public:
 
     // Initialize for physical attributes (index is a variable value).
     explicit AbufNode(Node physical_address, Node buffer = {})
-        : physical_address{physical_address}, buffer{std::move(buffer)} {}
+        : physical_address{std::move(physical_address)}, buffer{std::move(buffer)} {}
 
     Tegra::Shader::Attribute::Index GetIndex() const {
         return index;
@@ -420,7 +423,7 @@ public:
         return element;
     }
 
-    Node GetBuffer() const {
+    const Node& GetBuffer() const {
         return buffer;
     }
 
@@ -442,45 +445,46 @@ private:
 /// Constant buffer node, usually mapped to uniform buffers in GLSL
 class CbufNode final {
 public:
-    explicit CbufNode(u32 index, Node offset) : index{index}, offset{offset} {}
+    explicit CbufNode(u32 index, Node offset) : index{index}, offset{std::move(offset)} {}
 
     u32 GetIndex() const {
         return index;
     }
 
-    Node GetOffset() const {
+    const Node& GetOffset() const {
         return offset;
     }
 
 private:
-    const u32 index;
-    const Node offset;
+    u32 index{};
+    Node offset;
 };
 
 /// Local memory node
 class LmemNode final {
 public:
-    explicit LmemNode(Node address) : address{address} {}
+    explicit LmemNode(Node address) : address{std::move(address)} {}
 
-    Node GetAddress() const {
+    const Node& GetAddress() const {
         return address;
     }
 
 private:
-    const Node address;
+    Node address;
 };
 
 /// Global memory node
 class GmemNode final {
 public:
     explicit GmemNode(Node real_address, Node base_address, const GlobalMemoryBase& descriptor)
-        : real_address{real_address}, base_address{base_address}, descriptor{descriptor} {}
+        : real_address{std::move(real_address)}, base_address{std::move(base_address)},
+          descriptor{descriptor} {}
 
-    Node GetRealAddress() const {
+    const Node& GetRealAddress() const {
         return real_address;
     }
 
-    Node GetBaseAddress() const {
+    const Node& GetBaseAddress() const {
         return base_address;
     }
 
@@ -489,9 +493,9 @@ public:
     }
 
 private:
-    const Node real_address;
-    const Node base_address;
-    const GlobalMemoryBase descriptor;
+    Node real_address;
+    Node base_address;
+    GlobalMemoryBase descriptor;
 };
 
 /// Commentary, can be dropped