diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2018-10-07 22:27:15 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2018-10-07 22:36:00 +0200 |
commit | 7c2d6ef2100c9d410422a5c6fb30df88b363d73f (patch) | |
tree | 59f8981c90721afebafe8c8eaa9c6b0e119385f5 | |
parent | gl_shader_decompiler: Implement geometry shaders (diff) | |
download | yuzu-7c2d6ef2100c9d410422a5c6fb30df88b363d73f.tar yuzu-7c2d6ef2100c9d410422a5c6fb30df88b363d73f.tar.gz yuzu-7c2d6ef2100c9d410422a5c6fb30df88b363d73f.tar.bz2 yuzu-7c2d6ef2100c9d410422a5c6fb30df88b363d73f.tar.lz yuzu-7c2d6ef2100c9d410422a5c6fb30df88b363d73f.tar.xz yuzu-7c2d6ef2100c9d410422a5c6fb30df88b363d73f.tar.zst yuzu-7c2d6ef2100c9d410422a5c6fb30df88b363d73f.zip |
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 16 |
1 files 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 2363b9d87..740a1006a 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<u32>(element.first) - static_cast<u32>(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<u32>(index) - - static_cast<u32>(Attribute::Index::Attribute_0)) + - ") out vec4 " + GetOutputAttribute(index) + ';'); + const u32 idx = static_cast<u32>(index) - + static_cast<u32>(Attribute::Index::Attribute_0) + + GENERIC_VARYING_START_LOCATION; + declarations.AddLine("layout (location = " + std::to_string(idx) + ") out vec4 " + + GetOutputAttribute(index) + ';'); } declarations.AddNewLine(); } |