diff --git a/src/shader_recompiler/ir_opt/texture_pass.cpp b/src/shader_recompiler/ir_opt/texture_pass.cpp index 100437f0e5..ef1ef63500 100644 --- a/src/shader_recompiler/ir_opt/texture_pass.cpp +++ b/src/shader_recompiler/ir_opt/texture_pass.cpp @@ -327,14 +327,31 @@ std::optional TryGetConstBuffer(const IR::Inst* inst, Environme }; } +// TODO:xbzk: shall be dropped when Track method cover all bindless stuff +static ConstBufferAddr last_valid_addr = ConstBufferAddr{ + .index = 0, + .offset = 0, + .shift_left = 0, + .secondary_index = 0, + .secondary_offset = 0, + .secondary_shift_left = 0, + .dynamic_offset = {}, + .count = 1, + .has_secondary = false, +}; + TextureInst MakeInst(Environment& env, IR::Block* block, IR::Inst& inst) { ConstBufferAddr addr; if (IsBindless(inst)) { const std::optional track_addr{Track(inst.Arg(0), env)}; + if (!track_addr) { - throw NotImplementedException("Failed to track bindless texture constant buffer"); + //throw NotImplementedException("Failed to track bindless texture constant buffer"); + addr = last_valid_addr; // TODO:xbzk: shall be dropped when Track method cover all bindless stuff + } else { + addr = *track_addr; + last_valid_addr = addr; // TODO:xbzk: shall be dropped when Track method cover all bindless stuff } - addr = *track_addr; } else { addr = ConstBufferAddr{ .index = env.TextureBoundBuffer(),