From 7c2d6ef2100c9d410422a5c6fb30df88b363d73f Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Sun, 7 Oct 2018 17:27:15 -0300 Subject: [PATCH] gl_shader_decompiler: Move position varying location from 15 to 0 and apply an offset --- .../renderer_opengl/gl_shader_decompiler.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 2363b9d877..740a1006a0 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -30,7 +30,7 @@ using Tegra::Shader::SubOp; constexpr u32 PROGRAM_END = MAX_PROGRAM_CODE_LENGTH; constexpr u32 PROGRAM_HEADER_SIZE = sizeof(Tegra::Shader::Header); -constexpr u32 POSITION_VARYING_LOCATION = 15; +enum : u32 { POSITION_VARYING_LOCATION = 0, GENERIC_VARYING_START_LOCATION = 1 }; constexpr u32 MAX_GEOMETRY_BUFFERS = 6; constexpr u32 MAX_ATTRIBUTES = 0x100; // Size in vec4s, this value is untested @@ -559,7 +559,10 @@ private: // TODO(bunnei): Use proper number of elements for these u32 idx = static_cast(element.first) - static_cast(Attribute::Index::Attribute_0); - ASSERT(idx != POSITION_VARYING_LOCATION); + if (stage != Maxwell3D::Regs::ShaderStage::Vertex) { + // If inputs are varyings, add an offset + idx += GENERIC_VARYING_START_LOCATION; + } std::string attr{GetInputAttribute(element.first, element.second)}; if (stage == Maxwell3D::Regs::ShaderStage::Geometry) { @@ -580,10 +583,11 @@ private: } for (const auto& index : declr_output_attribute) { // TODO(bunnei): Use proper number of elements for these - declarations.AddLine("layout (location = " + - std::to_string(static_cast(index) - - static_cast(Attribute::Index::Attribute_0)) + - ") out vec4 " + GetOutputAttribute(index) + ';'); + const u32 idx = static_cast(index) - + static_cast(Attribute::Index::Attribute_0) + + GENERIC_VARYING_START_LOCATION; + declarations.AddLine("layout (location = " + std::to_string(idx) + ") out vec4 " + + GetOutputAttribute(index) + ';'); } declarations.AddNewLine(); }