diff options
Diffstat (limited to 'src/video_core/shader')
| -rw-r--r-- | src/video_core/shader/decode/texture.cpp | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/src/video_core/shader/decode/texture.cpp b/src/video_core/shader/decode/texture.cpp index ddb7755b8..3eac75bef 100644 --- a/src/video_core/shader/decode/texture.cpp +++ b/src/video_core/shader/decode/texture.cpp @@ -151,6 +151,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {          WriteTexsInstructionFloat(bb, instr, values);          break;      } +    case OpCode::Id::TXQ_B: +        is_bindless = true;      case OpCode::Id::TXQ: {          if (instr.txq.UsesMiscMode(TextureMiscMode::NODEP)) {              LOG_WARNING(HW_GPU, "TXQ.NODEP implementation is incomplete"); @@ -160,7 +162,10 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {          // Sadly, not all texture instructions specify the type of texture their sampler          // uses. This must be fixed at a later instance.          const auto& sampler = -            GetSampler(instr.sampler, Tegra::Shader::TextureType::Texture2D, false, false); +            !is_bindless +                ? GetSampler(instr.sampler, Tegra::Shader::TextureType::Texture2D, false, false) +                : GetBindlessSampler(instr.gpr8, Tegra::Shader::TextureType::Texture2D, false, +                                     false);          u32 indexer = 0;          switch (instr.txq.query_type) { @@ -171,7 +176,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {                  }                  MetaTexture meta{sampler, {}, {}, {}, {}, {}, {}, element};                  const Node value = -                    Operation(OperationCode::TextureQueryDimensions, meta, GetRegister(instr.gpr8)); +                    Operation(OperationCode::TextureQueryDimensions, meta, +                              GetRegister(instr.gpr8.Value() + (is_bindless ? 1 : 0)));                  SetTemporal(bb, indexer++, value);              }              for (u32 i = 0; i < indexer; ++i) {  | 
