diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-04-30 23:12:30 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-05-03 02:46:25 +0200 |
commit | 71aa9d08772eb07ccae7b141e032e6e7e57871a1 (patch) | |
tree | 8cd11960894f23ff14b0129c247f2927dc0e815c /src/video_core/shader/shader_ir.h | |
parent | gl_shader_decompiler: Abstract generic attribute operations (diff) | |
download | yuzu-71aa9d08772eb07ccae7b141e032e6e7e57871a1.tar yuzu-71aa9d08772eb07ccae7b141e032e6e7e57871a1.tar.gz yuzu-71aa9d08772eb07ccae7b141e032e6e7e57871a1.tar.bz2 yuzu-71aa9d08772eb07ccae7b141e032e6e7e57871a1.tar.lz yuzu-71aa9d08772eb07ccae7b141e032e6e7e57871a1.tar.xz yuzu-71aa9d08772eb07ccae7b141e032e6e7e57871a1.tar.zst yuzu-71aa9d08772eb07ccae7b141e032e6e7e57871a1.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/shader/shader_ir.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/video_core/shader/shader_ir.h b/src/video_core/shader/shader_ir.h index 6aff64394..3a1164d4f 100644 --- a/src/video_core/shader/shader_ir.h +++ b/src/video_core/shader/shader_ir.h @@ -469,6 +469,9 @@ public: Node buffer = {}) : buffer{buffer}, index{index}, element{element} {} + explicit constexpr AbufNode(Node physical_address, Node buffer = {}) + : physical_address{physical_address}, buffer{buffer} {} + Tegra::Shader::Attribute::Index GetIndex() const { return index; } @@ -481,10 +484,19 @@ public: return buffer; } + bool IsPhysicalBuffer() const { + return physical_address != nullptr; + } + + Node GetPhysicalAddress() const { + return physical_address; + } + private: - const Node buffer; - const Tegra::Shader::Attribute::Index index; - const u32 element; + Node physical_address{}; + Node buffer{}; + Tegra::Shader::Attribute::Index index{}; + u32 element{}; }; /// Constant buffer node, usually mapped to uniform buffers in GLSL @@ -691,6 +703,8 @@ private: Node GetPredicate(bool immediate); /// Generates a node representing an input attribute. Keeps track of used attributes. Node GetInputAttribute(Tegra::Shader::Attribute::Index index, u64 element, Node buffer = {}); + /// Generates a node representing a physical input attribute. + Node GetPhysicalInputAttribute(Tegra::Shader::Register physical_address, Node buffer = {}); /// Generates a node representing an output attribute. Keeps track of used attributes. Node GetOutputAttribute(Tegra::Shader::Attribute::Index index, u64 element, Node buffer); /// Generates a node representing an internal flag |