summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/shader_ir.h
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2019-04-30 23:12:30 +0200
committerReinUsesLisp <reinuseslisp@airmail.cc>2019-05-03 02:46:25 +0200
commit71aa9d08772eb07ccae7b141e032e6e7e57871a1 (patch)
tree8cd11960894f23ff14b0129c247f2927dc0e815c /src/video_core/shader/shader_ir.h
parentgl_shader_decompiler: Abstract generic attribute operations (diff)
downloadyuzu-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.h20
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