Explorar o código

shader: Add physical attributes commentaries

ReinUsesLisp %!s(int64=7) %!d(string=hai) anos
pai
achega
fe700e1856

+ 2 - 0
src/video_core/renderer_opengl/gl_shader_decompiler.cpp

@@ -895,6 +895,8 @@ private:
             target = GetRegister(gpr->GetIndex());
             target = GetRegister(gpr->GetIndex());
 
 
         } else if (const auto abuf = std::get_if<AbufNode>(dest)) {
         } else if (const auto abuf = std::get_if<AbufNode>(dest)) {
+            UNIMPLEMENTED_IF(abuf->IsPhysicalBuffer());
+
             target = [&]() -> std::string {
             target = [&]() -> std::string {
                 switch (const auto attribute = abuf->GetIndex(); abuf->GetIndex()) {
                 switch (const auto attribute = abuf->GetIndex(); abuf->GetIndex()) {
                 case Attribute::Index::Position:
                 case Attribute::Index::Position:

+ 1 - 1
src/video_core/shader/decode/memory.cpp

@@ -253,7 +253,7 @@ u32 ShaderIR::DecodeMemory(NodeBlock& bb, u32 pc) {
         SetRegister(bb, instr.gpr0, fake_address);
         SetRegister(bb, instr.gpr0, fake_address);
 
 
         // Signal the shader IR to declare all possible attributes and varyings
         // Signal the shader IR to declare all possible attributes and varyings
-        use_physical_attributes = true;
+        uses_physical_attributes = true;
         break;
         break;
     }
     }
     default:
     default:

+ 1 - 1
src/video_core/shader/shader_ir.cpp

@@ -95,7 +95,7 @@ Node ShaderIR::GetInputAttribute(Attribute::Index index, u64 element, Node buffe
 }
 }
 
 
 Node ShaderIR::GetPhysicalInputAttribute(Tegra::Shader::Register physical_address, Node buffer) {
 Node ShaderIR::GetPhysicalInputAttribute(Tegra::Shader::Register physical_address, Node buffer) {
-    use_physical_attributes = true;
+    uses_physical_attributes = true;
     return StoreNode(AbufNode(GetRegister(physical_address), buffer));
     return StoreNode(AbufNode(GetRegister(physical_address), buffer));
 }
 }
 
 

+ 4 - 2
src/video_core/shader/shader_ir.h

@@ -465,10 +465,12 @@ private:
 /// Attribute buffer memory (known as attributes or varyings in GLSL terms)
 /// Attribute buffer memory (known as attributes or varyings in GLSL terms)
 class AbufNode final {
 class AbufNode final {
 public:
 public:
+    // Initialize for standard attributes (index is explicit).
     explicit constexpr AbufNode(Tegra::Shader::Attribute::Index index, u32 element,
     explicit constexpr AbufNode(Tegra::Shader::Attribute::Index index, u32 element,
                                 Node buffer = {})
                                 Node buffer = {})
         : buffer{buffer}, index{index}, element{element} {}
         : buffer{buffer}, index{index}, element{element} {}
 
 
+    // Initialize for physical attributes (index is a variable value).
     explicit constexpr AbufNode(Node physical_address, Node buffer = {})
     explicit constexpr AbufNode(Node physical_address, Node buffer = {})
         : physical_address{physical_address}, buffer{buffer} {}
         : physical_address{physical_address}, buffer{buffer} {}
 
 
@@ -618,7 +620,7 @@ public:
     }
     }
 
 
     bool HasPhysicalAttributes() const {
     bool HasPhysicalAttributes() const {
-        return use_physical_attributes;
+        return uses_physical_attributes;
     }
     }
 
 
     const Tegra::Shader::Header& GetHeader() const {
     const Tegra::Shader::Header& GetHeader() const {
@@ -885,7 +887,7 @@ private:
     std::set<Sampler> used_samplers;
     std::set<Sampler> used_samplers;
     std::array<bool, Tegra::Engines::Maxwell3D::Regs::NumClipDistances> used_clip_distances{};
     std::array<bool, Tegra::Engines::Maxwell3D::Regs::NumClipDistances> used_clip_distances{};
     std::map<GlobalMemoryBase, GlobalMemoryUsage> used_global_memory;
     std::map<GlobalMemoryBase, GlobalMemoryUsage> used_global_memory;
-    bool use_physical_attributes{}; // Shader uses AL2P or physical attribute read/writes
+    bool uses_physical_attributes{}; // Shader uses AL2P or physical attribute read/writes
 
 
     Tegra::Shader::Header header;
     Tegra::Shader::Header header;
 };
 };