From b80a5f9b7db3894f7f232b0eedd35462475075ae Mon Sep 17 00:00:00 2001 From: Nick Hamilton Date: Wed, 15 Apr 2026 15:11:28 +0100 Subject: [PATCH] pco: fix clamping the array index when shaderImageGatherExtended is enabled The array index value is a signed integer but the compiler was using the unsigned version of the clamp helper function meaning the value was not been clamped to 0 when its value was < 0. Fix the following deqp test cases when shaderImageGatherExtended is enabled dEQP-VK.glsl.texture_gather.basic.2d_array.* dEQP-VK.glsl.texture_gather.offset.*.2d_array.* dEQP-VK.glsl.texture_gather.offset_dynamic.*.2d_array.* dEQP-VK.glsl.texture_gather.offsets.*.2d_array.* Fixes: 854563f0f82 ("pco: fully switch over to common smp emission code") Signed-off-by: Nick Hamilton Reviewed-by: Frank Binns Part-of: --- src/imagination/pco/pco_nir_tex.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/imagination/pco/pco_nir_tex.c b/src/imagination/pco/pco_nir_tex.c index eef7a42886c..c2db95997b9 100644 --- a/src/imagination/pco/pco_nir_tex.c +++ b/src/imagination/pco/pco_nir_tex.c @@ -661,7 +661,7 @@ static bool lower_tex(nir_builder *b, nir_tex_instr *tex, void *cb_data) assert(array_index); nir_def *array_max = usclib_tex_state_array_max(b, tex_state); - array_index = nir_uclamp(b, array_index, nir_imm_int(b, 0), array_max); + array_index = nir_iclamp(b, array_index, nir_imm_int(b, 0), array_max); if (is_cube_array) array_index = nir_imul_imm(b, array_index, 6); @@ -1183,7 +1183,7 @@ lower_image(nir_builder *b, nir_intrinsic_instr *intr, void *cb_data) if (is_array) { assert(array_index); nir_def *array_max = usclib_tex_state_array_max(b, tex_state); - array_index = nir_uclamp(b, array_index, nir_imm_int(b, 0), array_max); + array_index = nir_iclamp(b, array_index, nir_imm_int(b, 0), array_max); nir_def *tex_meta = nir_load_tex_meta_pco(b, PCO_IMAGE_META_COUNT, @@ -1366,7 +1366,7 @@ lower_image(nir_builder *b, nir_intrinsic_instr *intr, void *cb_data) assert(array_index); nir_def *array_max = usclib_tex_state_array_max(b, tex_state); - array_index = nir_uclamp(b, array_index, nir_imm_int(b, 0), array_max); + array_index = nir_iclamp(b, array_index, nir_imm_int(b, 0), array_max); nir_def *tex_meta = nir_load_tex_meta_pco(b, PCO_IMAGE_META_COUNT,