From 7425e71ae02898e3f1aebe26271c73c6f7146331 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Thu, 5 Dec 2024 08:40:40 +0100 Subject: [PATCH] aco/gfx12: disable vinterp ddx/ddy optimization This only seems to work on gfx11 and gfx11.5, and it's only faster on gfx11.5. We could continue to use vinterp, with constants copied to vgprs, but whether that's beneficial depends on the shader. Reviewed-by: Rhys Perry Fixes: bee487df48b ("aco/gfx11.5+: use vinterp for fddx/fddy") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12250 Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 1d18ae9ca09..65ce9814385 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -8387,8 +8387,12 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr) } else { aco_opcode subrev = instr->def.bit_size == 16 ? aco_opcode::v_subrev_f16 : aco_opcode::v_subrev_f32; + + /* v_interp with constant sources only works on GFX11/11.5, + * and it's only faster on GFX11.5. + */ bool use_interp = dpp_ctrl1 == dpp_quad_perm(0, 0, 0, 0) && instr->def.bit_size == 32 && - ctx->program->gfx_level >= GFX11_5; + ctx->program->gfx_level == GFX11_5; if (!nir_src_is_divergent(&instr->src[0])) { bld.vop2(subrev, Definition(dst), src, src); } else if (use_interp && dpp_ctrl2 == dpp_quad_perm(1, 1, 1, 1)) {