From 8d4899d6ead9413a6bf8f237508a1941dc12493d Mon Sep 17 00:00:00 2001 From: bunnei Date: Sun, 15 Apr 2018 20:26:45 -0400 Subject: gl_shader_decompiler: Allow vertex position to be used in fragment shader. --- .../renderer_opengl/gl_shader_decompiler.cpp | 28 ++++++++++------------ 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_shader_decompiler.cpp') diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 045ccdb0f..1d8057927 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -156,23 +156,27 @@ private: /// Generates code representing an input attribute register. std::string GetInputAttribute(Attribute::Index attribute) { - declr_input_attribute.insert(attribute); + switch (attribute) { + case Attribute::Index::Position: + return "position"; + default: + const u32 index{static_cast(attribute) - + static_cast(Attribute::Index::Attribute_0)}; + if (attribute >= Attribute::Index::Attribute_0) { + declr_input_attribute.insert(attribute); + return "input_attribute_" + std::to_string(index); + } - const u32 index{static_cast(attribute) - - static_cast(Attribute::Index::Attribute_0)}; - if (attribute >= Attribute::Index::Attribute_0) { - return "input_attribute_" + std::to_string(index); + LOG_CRITICAL(HW_GPU, "Unhandled input attribute: 0x%02x", index); + UNREACHABLE(); } - - LOG_CRITICAL(HW_GPU, "Unhandled input attribute: 0x%02x", index); - UNREACHABLE(); } /// Generates code representing an output attribute register. std::string GetOutputAttribute(Attribute::Index attribute) { switch (attribute) { case Attribute::Index::Position: - return "gl_Position"; + return "position"; default: const u32 index{static_cast(attribute) - static_cast(Attribute::Index::Attribute_0)}; @@ -381,12 +385,6 @@ private: } case OpCode::Id::IPA: { const auto& attribute = instr.attribute.fmt28; - - if (attribute.index == Attribute::Index::Position) { - LOG_CRITICAL(HW_GPU, "Unimplemented"); - break; - } - std::string dest = GetRegister(instr.gpr0); SetDest(attribute.element, dest, GetInputAttribute(attribute.index), 1, 4); break; -- cgit v1.2.3