From 28f3e82f2d5a00005c2b68de025358cd233f4489 Mon Sep 17 00:00:00 2001 From: Nick Hamilton Date: Thu, 22 Jan 2026 13:32:18 +0000 Subject: [PATCH] pco: Fix for atomic operations on an image buffer Within the driver buffers are treated as 2D as sampling them as 1D will run into HW restrictions on max size. The compiler does the same however for atomic image ops the address is manually calculated and doing this via the 2D path leads to incorrect offsets. The fix is to treat buffers as 1D for atomic ops which calculates the correct offsets for the operations. Fix deqp: dEQP-VK.image.atomic_operations.add.buffer.* dEQP-VK.image.atomic_operations.and.buffer.* dEQP-VK.image.atomic_operations.compare_exchange.buffer.* dEQP-VK.image.atomic_operations.dec.buffer.* dEQP-VK.image.atomic_operations.exchange.buffer.* dEQP-VK.image.atomic_operations.inc.buffer.* dEQP-VK.image.atomic_operations.max.buffer.* dEQP-VK.image.atomic_operations.min.buffer.* dEQP-VK.image.atomic_operations.or.buffer.* dEQP-VK.image.atomic_operations.sub.buffer.* dEQP-VK.image.atomic_operations.xor.buffer.* Fixes: 6dc5e1e1094 ("pco: fully support Vulkan 1.2 image atomics") Signed-off-by: Nick Hamilton Reviewed-by: Simon Perretta Part-of: (cherry picked from commit 079377c767a424dff5b0eb088b26c83e0e7cacee) --- .pick_status.json | 2 +- src/imagination/ci/bxs-4-64-fails.txt | 88 --------------------------- src/imagination/pco/pco_nir_tex.c | 5 +- 3 files changed, 2 insertions(+), 93 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 04f448c65c1..70c0a39b56c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -244,7 +244,7 @@ "description": "pco: Fix for atomic operations on an image buffer", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "6dc5e1e1094554c291239b955a1dc39c6e4c017b", "notes": null diff --git a/src/imagination/ci/bxs-4-64-fails.txt b/src/imagination/ci/bxs-4-64-fails.txt index 0c314603428..6179a6d2567 100644 --- a/src/imagination/ci/bxs-4-64-fails.txt +++ b/src/imagination/ci/bxs-4-64-fails.txt @@ -26,94 +26,6 @@ dEQP-VK.binding_model.unused_invalid_descriptor.write.unused.storage_image,Crash dEQP-VK.binding_model.unused_invalid_descriptor.write.unused.uniform_buffer,Crash dEQP-VK.graphicsfuzz.cov-two-nested-loops-switch-case-matrix-array-increment,Fail dEQP-VK.graphicsfuzz.stable-binarysearch-tree-false-if-discard-loop,Fail -dEQP-VK.image.atomic_operations.add.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.add.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.add.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.add.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.add.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.add.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.add.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.add.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.and.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.and.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.and.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.and.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.and.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.and.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.and.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.and.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.compare_exchange.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.compare_exchange.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.compare_exchange.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.compare_exchange.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.compare_exchange.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.compare_exchange.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.compare_exchange.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.compare_exchange.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.dec.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.dec.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.dec.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.dec.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.dec.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.dec.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.dec.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.dec.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.exchange.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.exchange.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.exchange.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.exchange.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.exchange.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.exchange.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.exchange.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.exchange.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.inc.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.inc.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.inc.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.inc.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.inc.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.inc.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.inc.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.inc.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.max.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.max.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.max.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.max.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.max.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.max.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.max.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.max.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.min.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.min.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.min.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.min.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.min.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.min.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.min.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.min.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.or.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.or.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.or.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.or.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.or.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.or.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.or.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.or.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.sub.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.sub.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.sub.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.sub.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.sub.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.sub.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.sub.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.sub.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.xor.buffer.notransfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.xor.buffer.notransfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.xor.buffer.notransfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.xor.buffer.notransfer.normal_read.normal_img.r32ui_intermediate_values,Fail -dEQP-VK.image.atomic_operations.xor.buffer.transfer.normal_read.normal_img.r32i_end_result,Fail -dEQP-VK.image.atomic_operations.xor.buffer.transfer.normal_read.normal_img.r32i_intermediate_values,Fail -dEQP-VK.image.atomic_operations.xor.buffer.transfer.normal_read.normal_img.r32ui_end_result,Fail -dEQP-VK.image.atomic_operations.xor.buffer.transfer.normal_read.normal_img.r32ui_intermediate_values,Fail dEQP-VK.memory.concurrent_access.shader_and_host,Crash dEQP-VK.memory.mapping.dedicated_alloc.buffer.full.variable.implicit_unmap_map2,Timeout dEQP-VK.memory.mapping.dedicated_alloc.buffer.full.variable.implicit_unmap,Timeout diff --git a/src/imagination/pco/pco_nir_tex.c b/src/imagination/pco/pco_nir_tex.c index f6668902dcc..9d1b4beef44 100644 --- a/src/imagination/pco/pco_nir_tex.c +++ b/src/imagination/pco/pco_nir_tex.c @@ -1187,10 +1187,7 @@ static nir_def *lower_image(nir_builder *b, nir_instr *instr, void *cb_data) image_dim = GLSL_SAMPLER_DIM_2D; is_array = true; } else if (image_dim == GLSL_SAMPLER_DIM_BUF) { - image_dim = GLSL_SAMPLER_DIM_2D; - coords = nir_vec2(b, - nir_umod_imm(b, coords, 8192), - nir_udiv_imm(b, coords, 8192)); + image_dim = GLSL_SAMPLER_DIM_1D; } nir_def *twiddled_offset = NULL;