From ad098553ee9ef1ce8c115454f26fb0d3fe272be3 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Wed, 13 Jan 2021 16:39:41 +0200 Subject: [PATCH] turnip/ir3: handle image load/stores produced by AtomicLoad/Store SpvOpAtomicLoad and SpvOpAtomicStore are translated into nir_intrinsic_image_deref_store/load instead of some separate atomic intrinsics, however they don't have src or dest type specified. Turnip doesn't support shaderImageFloat32Atomics so type is just integer. Fixes: dEQP-VK.memory_model.message_passing.core11.u32.coherent.fence_fence.atomicwrite.device.payload_local.image.guard_local.image.frag dEQP-VK.memory_model.message_passing.core11.u32.coherent.fence_fence.atomicwrite.workgroup.payload_local.buffer.guard_local.image.comp dEQP-VK.memory_model.write_after_read.core11.u32.coherent.fence_fence.atomicwrite.device.payload_local.buffer.guard_local.image.comp dEQP-VK.memory_model.write_after_read.core11.u32.coherent.fence_fence.atomicwrite.workgroup.payload_local.image.guard_local.image.comp dEQP-VK.memory_model.write_after_read.core11.u32.coherent.fence_fence.atomicwrite.workgroup.payload_nonlocal.workgroup.guard_local.image.comp Signed-off-by: Danylo Piliaiev Part-of: --- .gitlab-ci/deqp-freedreno-a630-fails.txt | 5 ----- src/freedreno/ir3/ir3_image.c | 6 ++++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci/deqp-freedreno-a630-fails.txt b/.gitlab-ci/deqp-freedreno-a630-fails.txt index 3ead6bc1220..b92a6a1bf30 100644 --- a/.gitlab-ci/deqp-freedreno-a630-fails.txt +++ b/.gitlab-ci/deqp-freedreno-a630-fails.txt @@ -25,11 +25,6 @@ dEQP-VK.image.subresource_layout.2d_array.all_levels.r8_snorm,Fail dEQP-VK.image.subresource_layout.3d.2_levels.r16g16_snorm,Fail dEQP-VK.image.subresource_layout.3d.2_levels.r8g8b8a8_snorm,Fail dEQP-VK.image.subresource_layout.3d.4_levels.r8g8_snorm,Fail -dEQP-VK.memory_model.message_passing.core11.u32.coherent.fence_fence.atomicwrite.device.payload_local.image.guard_local.image.frag,Crash -dEQP-VK.memory_model.message_passing.core11.u32.coherent.fence_fence.atomicwrite.workgroup.payload_local.buffer.guard_local.image.comp,Crash -dEQP-VK.memory_model.write_after_read.core11.u32.coherent.fence_fence.atomicwrite.device.payload_local.buffer.guard_local.image.comp,Crash -dEQP-VK.memory_model.write_after_read.core11.u32.coherent.fence_fence.atomicwrite.workgroup.payload_local.image.guard_local.image.comp,Crash -dEQP-VK.memory_model.write_after_read.core11.u32.coherent.fence_fence.atomicwrite.workgroup.payload_nonlocal.workgroup.guard_local.image.comp,Crash dEQP-VK.multiview.masks.max_multi_view_view_count,Fail dEQP-VK.multiview.renderpass2.masks.max_multi_view_view_count,Fail dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_compare_greater_equal_greater,Fail diff --git a/src/freedreno/ir3/ir3_image.c b/src/freedreno/ir3/ir3_image.c index eee4ef09282..e2ee4e6dfad 100644 --- a/src/freedreno/ir3/ir3_image.c +++ b/src/freedreno/ir3/ir3_image.c @@ -119,11 +119,17 @@ ir3_get_type_for_image_intrinsic(const nir_intrinsic_instr *instr) case nir_intrinsic_image_load: case nir_intrinsic_bindless_image_load: type = nir_alu_type_get_base_type(nir_intrinsic_dest_type(instr)); + /* SpvOpAtomicLoad doesn't have dest type */ + if (type == nir_type_invalid) + type = nir_type_uint; break; case nir_intrinsic_image_store: case nir_intrinsic_bindless_image_store: type = nir_alu_type_get_base_type(nir_intrinsic_src_type(instr)); + /* SpvOpAtomicStore doesn't have src type */ + if (type == nir_type_invalid) + type = nir_type_uint; break; case nir_intrinsic_image_atomic_add: