diff options
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 320babdb1..579a78702 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -2026,9 +2026,12 @@ private: break; } case OpCode::Id::TLDS: { - ASSERT(instr.tlds.GetTextureType() == Tegra::Shader::TextureType::Texture2D); - ASSERT(instr.tlds.IsArrayTexture() == false); std::string coord; + const Tegra::Shader::TextureType texture_type{instr.tlds.GetTextureType()}; + const bool is_array{instr.tlds.IsArrayTexture()}; + + ASSERT(texture_type == Tegra::Shader::TextureType::Texture2D); + ASSERT(is_array == false); ASSERT_MSG(!instr.tlds.UsesMiscMode(Tegra::Shader::TextureMiscMode::NODEP), "NODEP is not implemented"); @@ -2037,9 +2040,14 @@ private: ASSERT_MSG(!instr.tlds.UsesMiscMode(Tegra::Shader::TextureMiscMode::MZ), "MZ is not implemented"); - switch (instr.tlds.GetTextureType()) { + switch (texture_type) { + case Tegra::Shader::TextureType::Texture1D: { + const std::string x = regs.GetRegisterAsInteger(instr.gpr8); + coord = "int coords = " + x + ';'; + break; + } case Tegra::Shader::TextureType::Texture2D: { - if (instr.tlds.IsArrayTexture()) { + if (is_array) { LOG_CRITICAL(HW_GPU, "Unhandled 2d array texture"); UNREACHABLE(); } else { @@ -2051,11 +2059,11 @@ private: } default: LOG_CRITICAL(HW_GPU, "Unhandled texture type {}", - static_cast<u32>(instr.tlds.GetTextureType())); + static_cast<u32>(texture_type)); UNREACHABLE(); } - const std::string sampler = GetSampler(instr.sampler, instr.tlds.GetTextureType(), - instr.tlds.IsArrayTexture()); + + const std::string sampler = GetSampler(instr.sampler, texture_type, is_array); const std::string texture = "texelFetch(" + sampler + ", coords, 0)"; WriteTexsInstruction(instr, coord, texture); break; |