turnip/ir3: handle image load/stores produced by AtomicLoad/Store
authorDanylo Piliaiev <dpiliaiev@igalia.com>
Wed, 13 Jan 2021 14:39:41 +0000 (16:39 +0200)
committerMarge Bot <eric+marge@anholt.net>
Thu, 14 Jan 2021 05:43:56 +0000 (05:43 +0000)
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 <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8476>

.gitlab-ci/deqp-freedreno-a630-fails.txt
src/freedreno/ir3/ir3_image.c

index 3ead6bc..b92a6a1 100644 (file)
@@ -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
index eee4ef0..e2ee4e6 100644 (file)
@@ -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: