From f750108aa91ea5ae595e81a11cdee0b78ec7e21d 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 (cherry picked from commit 7425e71ae02898e3f1aebe26271c73c6f7146331) Part-of: --- .pick_status.json | 2 +- src/amd/compiler/aco_instruction_selection.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index fa462ebdf86..f56c334c4c3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -234,7 +234,7 @@ "description": "aco/gfx12: disable vinterp ddx/ddy optimization", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "bee487df48b19fc3bf792874aa6aff25104e281a", "notes": null diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 01c638f0e4e..f1515a1a304 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -8603,8 +8603,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)) {