diff options
| author | bunnei <bunneidev@gmail.com> | 2018-09-30 21:53:38 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-09-30 21:53:38 -0400 | 
| commit | bc679c9b8c05d3db46da8cef77e729b31c6dbff5 (patch) | |
| tree | a96752a0ddefec9a857fa3423fd91b88ef19967d | |
| parent | 7c61f0c32207a77c08d210f65b1a95878087bbd3 (diff) | |
| parent | b92b4bbeaf4de0200044c7fb24875b2b91d508c9 (diff) | |
Merge pull request #1330 from raven02/tlds
TLDS: Add 1D sampler
| -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; | 
