From d096a8e962f4575c8edf5f754784f583d86486cc Mon Sep 17 00:00:00 2001 From: Lorenzo Rossi Date: Mon, 6 Apr 2026 12:00:07 +0200 Subject: [PATCH] panfrost: Move lower_res_indices before postproc Signed-off-by: Lorenzo Rossi Reviewed-by: Christoph Pillmayer Reviewed-by: Faith Ekstrand Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- .../drivers/panfrost/pan_nir_lower_res_indices.c | 13 +++++++++---- src/gallium/drivers/panfrost/pan_shader.c | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_nir_lower_res_indices.c b/src/gallium/drivers/panfrost/pan_nir_lower_res_indices.c index db4937c998d..4c767941902 100644 --- a/src/gallium/drivers/panfrost/pan_nir_lower_res_indices.c +++ b/src/gallium/drivers/panfrost/pan_nir_lower_res_indices.c @@ -91,11 +91,13 @@ static bool lower_ssbo_intrin(nir_builder *b, nir_intrinsic_instr *intrin) { b->cursor = nir_before_instr(&intrin->instr); + bool is_store = intrin->intrinsic == nir_intrinsic_store_ssbo; + nir_src *handle = &intrin->src[is_store ? 1 : 0]; - nir_def *new_offset = nir_ior_imm(b, intrin->src[0].ssa, + nir_def *new_handle = nir_ior_imm(b, handle->ssa, pan_res_handle(PAN_TABLE_SSBO, 0)); - nir_src_rewrite(&intrin->src[0], new_offset); + nir_src_rewrite(handle, new_handle); return true; } @@ -107,7 +109,8 @@ lower_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, switch (intrin->intrinsic) { case nir_intrinsic_image_load: case nir_intrinsic_image_store: - case nir_intrinsic_image_texel_address: + case nir_intrinsic_image_atomic: + case nir_intrinsic_image_atomic_swap: return lower_image_intrin(b, intrin); case nir_intrinsic_load_input: case nir_intrinsic_load_interpolated_input: @@ -115,7 +118,9 @@ lower_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, case nir_intrinsic_load_ubo: return lower_load_ubo_intrin(b, intrin); case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_ssbo_address: + case nir_intrinsic_store_ssbo: + case nir_intrinsic_ssbo_atomic: + case nir_intrinsic_ssbo_atomic_swap: return lower_ssbo_intrin(b, intrin); default: return false; diff --git a/src/gallium/drivers/panfrost/pan_shader.c b/src/gallium/drivers/panfrost/pan_shader.c index a186fb04962..057af378eb9 100644 --- a/src/gallium/drivers/panfrost/pan_shader.c +++ b/src/gallium/drivers/panfrost/pan_shader.c @@ -184,10 +184,10 @@ panfrost_shader_compile(struct panfrost_screen *screen, const nir_shader *ir, panfrost_device_gpu_prod_id(dev) < 0x700); } - pan_postprocess_nir(s, panfrost_device_gpu_id(dev)); - /* Lower resource indices */ NIR_PASS(_, s, panfrost_nir_lower_res_indices, &inputs); + + pan_postprocess_nir(s, panfrost_device_gpu_id(dev)); pan_nir_lower_texture_late(s, inputs.gpu_id); if (s->info.stage == MESA_SHADER_VERTEX) {