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 <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8476>
This commit is contained in:
Danylo Piliaiev
2021-01-13 16:39:41 +02:00
committed by Marge Bot
parent 9c54928f77
commit ad098553ee
2 changed files with 6 additions and 5 deletions

View 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

View 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: