aco: disable zero offset optimization for strict WQM coords
authorRhys Perry <pendingchaos02@gmail.com>
Fri, 29 Sep 2023 15:12:09 +0000 (16:12 +0100)
committerMarge Bot <emma+marge@anholt.net>
Mon, 2 Oct 2023 10:11:37 +0000 (10:11 +0000)
If we try to do this, we end up using {undef,coordx} as the coordinates
for an image_sample instruction, because we can't shrink the linear VGPR.

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/9767
Fixes: 859e059aa912 ("radv: use fix_derivs_in_divergent_cf")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25477>

src/amd/compiler/aco_instruction_selection.cpp

index 287669f..30dea10 100644 (file)
@@ -9343,7 +9343,7 @@ visit_tex(isel_context* ctx, nir_tex_instr* instr)
          if (pack_const && pack != Temp())
             pack = bld.vop2(aco_opcode::v_or_b32, bld.def(v1), Operand::c32(pack_const), pack);
       }
-      if (pack_const && pack == Temp())
+      if ((pack_const || has_wqm_coord) && pack == Temp())
          offset = bld.copy(bld.def(v1), Operand::c32(pack_const));
       else if (pack == Temp())
          has_offset = false;