From 46778f2b2a5a4a3b563aed226bb3ee526e443b10 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 27 Apr 2022 15:44:38 -0400 Subject: [PATCH] panvk: Lower image deref atomics Fixes dEQP-VK.image.atomic_operations.* Signed-off-by: Alyssa Rosenzweig Reviewed-by: Jason Ekstrand Part-of: --- src/panfrost/ci/deqp-panfrost-g52-vk.toml | 1 + src/panfrost/vulkan/panvk_vX_shader.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/panfrost/ci/deqp-panfrost-g52-vk.toml b/src/panfrost/ci/deqp-panfrost-g52-vk.toml index 0ca070ba955..317a2b402e5 100644 --- a/src/panfrost/ci/deqp-panfrost-g52-vk.toml +++ b/src/panfrost/ci/deqp-panfrost-g52-vk.toml @@ -13,6 +13,7 @@ include = [ "dEQP-VK.api.copy_and_blit.core.*", "dEQP-VK.compute.builtin_var.*", "dEQP-VK.draw.renderpass.instanced.draw_indexed_vk_*", + "dEQP-VK.image.atomic_operations.*", "dEQP-VK.glsl.builtin.function.*", "dEQP-VK.glsl.builtin.precision.frexp.*", "dEQP-VK.glsl.builtin.precision.ldexp.*", diff --git a/src/panfrost/vulkan/panvk_vX_shader.c b/src/panfrost/vulkan/panvk_vX_shader.c index 06c3b747d85..be3a7d541a7 100644 --- a/src/panfrost/vulkan/panvk_vX_shader.c +++ b/src/panfrost/vulkan/panvk_vX_shader.c @@ -221,7 +221,20 @@ lower_intrinsic(nir_builder *b, nir_intrinsic_instr *intr, lower_load_vulkan_descriptor(b, intr); return true; case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_load: { + case nir_intrinsic_image_deref_load: + case nir_intrinsic_image_deref_atomic_add: + case nir_intrinsic_image_deref_atomic_imin: + case nir_intrinsic_image_deref_atomic_umin: + case nir_intrinsic_image_deref_atomic_imax: + case nir_intrinsic_image_deref_atomic_umax: + case nir_intrinsic_image_deref_atomic_and: + case nir_intrinsic_image_deref_atomic_or: + case nir_intrinsic_image_deref_atomic_xor: + case nir_intrinsic_image_deref_atomic_exchange: + case nir_intrinsic_image_deref_atomic_comp_swap: + case nir_intrinsic_image_deref_atomic_fadd: + case nir_intrinsic_image_deref_size: + case nir_intrinsic_image_deref_samples: { nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); b->cursor = nir_before_instr(&intr->instr);