From 7677d9bcbf2b7f2fbaef78ad77876db7eabd65fb Mon Sep 17 00:00:00 2001 From: Arkadiusz Sarwa Date: Thu, 9 Nov 2017 18:02:32 +0100 Subject: [PATCH] Subgroups tests upgrade: reduce time of execution. Affects: dEQP-VK.subgroups.* Components: Vulkan VK-GL-CTS issue: 797 Change-Id: I835985b06bbe6f912ff33225125810caf48879df --- android/cts/master/vk-master.txt | 5692 +++++--------------- .../subgroups/vktSubgroupsArithmeticTests.cpp | 625 +-- .../subgroups/vktSubgroupsBallotBroadcastTests.cpp | 515 +- .../subgroups/vktSubgroupsBallotOtherTests.cpp | 358 +- .../vulkan/subgroups/vktSubgroupsBallotTests.cpp | 458 +- .../vulkan/subgroups/vktSubgroupsBasicTests.cpp | 1208 ++--- .../subgroups/vktSubgroupsBuiltinMaskVarTests.cpp | 374 +- .../subgroups/vktSubgroupsBuiltinVarTests.cpp | 899 ++-- .../subgroups/vktSubgroupsClusteredTests.cpp | 549 +- .../vulkan/subgroups/vktSubgroupsQuadTests.cpp | 604 +-- .../vulkan/subgroups/vktSubgroupsShapeTests.cpp | 376 +- .../vulkan/subgroups/vktSubgroupsShuffleTests.cpp | 649 +-- .../vulkan/subgroups/vktSubgroupsTestsUtils.cpp | 1899 +++---- .../vulkan/subgroups/vktSubgroupsTestsUtils.hpp | 45 +- .../vulkan/subgroups/vktSubgroupsVoteTests.cpp | 618 +-- external/vulkancts/mustpass/1.1.0/vk-default.txt | 5692 +++++--------------- 16 files changed, 6811 insertions(+), 13750 deletions(-) diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index a9632f3..abe450c 100755 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -253430,4941 +253430,2125 @@ dEQP-VK.multiview.index.tesellation_shader.15_15_15_15 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count -dEQP-VK.subgroups.builtin_var.subgroupsize_tess_eval -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_tess_eval -dEQP-VK.subgroups.builtin_var.subgroupsize_tess_control -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_tess_control -dEQP-VK.subgroups.builtin_var.subgroupsize_geometry -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_geometry -dEQP-VK.subgroups.builtin_var.subgroupsize_vertex -dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_vertex -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_vertex_framebuffer -dEQP-VK.subgroups.builtin_var.subgroupsize_fragment -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_fragment +dEQP-VK.subgroups.builtin_var.subgroupsize_graphic dEQP-VK.subgroups.builtin_var.subgroupsize_compute +dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer +dEQP-VK.subgroups.builtin_var.subgroupinvocationid_graphic dEQP-VK.subgroups.builtin_var.subgroupinvocationid_compute +dEQP-VK.subgroups.builtin_var.subgroupinvocationid_vertex_framebuffer dEQP-VK.subgroups.builtin_var.numsubgroups_compute dEQP-VK.subgroups.builtin_var.subgroupid_compute -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_fragment -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_fragment -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_fragment -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_fragment -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_fragment +dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_graphic dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_compute +dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_vertex_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_graphic dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_compute +dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_vertex_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_graphic dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_compute +dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_vertex_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_graphic dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_compute +dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_vertex_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_graphic dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_compute -dEQP-VK.subgroups.basic.subgroupelect_tess_eval -dEQP-VK.subgroups.basic.subgroupbarrier_tess_eval -dEQP-VK.subgroups.basic.subgroupmemorybarrier_tess_eval -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_tess_eval -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_tess_eval -dEQP-VK.subgroups.basic.subgroupelect_tess_control -dEQP-VK.subgroups.basic.subgroupbarrier_tess_control -dEQP-VK.subgroups.basic.subgroupmemorybarrier_tess_control -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_tess_control -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_tess_control -dEQP-VK.subgroups.basic.subgroupelect_geometry -dEQP-VK.subgroups.basic.subgroupbarrier_geometry -dEQP-VK.subgroups.basic.subgroupmemorybarrier_geometry -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_geometry -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_geometry -dEQP-VK.subgroups.basic.subgroupelect_vertex -dEQP-VK.subgroups.basic.subgroupelect_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupbarrier_vertex -dEQP-VK.subgroups.basic.subgroupbarrier_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrier_vertex -dEQP-VK.subgroups.basic.subgroupmemorybarrier_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_vertex -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_vertex -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupelect_fragment -dEQP-VK.subgroups.basic.subgroupbarrier_fragment -dEQP-VK.subgroups.basic.subgroupbarrier_fragment_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrier_fragment -dEQP-VK.subgroups.basic.subgroupmemorybarrier_fragment_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_fragment -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_fragment_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_fragment -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_fragment_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupelect_compute +dEQP-VK.subgroups.basic.subgroupelect_graphic +dEQP-VK.subgroups.basic.subgroupelect_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupbarrier_compute +dEQP-VK.subgroups.basic.subgroupbarrier_graphic +dEQP-VK.subgroups.basic.subgroupbarrier_fragment_framebuffer +dEQP-VK.subgroups.basic.subgroupbarrier_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupmemorybarrier_compute +dEQP-VK.subgroups.basic.subgroupmemorybarrier_graphic +dEQP-VK.subgroups.basic.subgroupmemorybarrier_fragment_framebuffer +dEQP-VK.subgroups.basic.subgroupmemorybarrier_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_compute +dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_graphic +dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_fragment_framebuffer +dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupmemorybarriershared_compute dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_compute -dEQP-VK.subgroups.vote.subgroupallequal_int_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_tess_eval -dEQP-VK.subgroups.vote.subgroupall_uint_tess_eval -dEQP-VK.subgroups.vote.subgroupany_uint_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_uint_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_float_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_vec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_vec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_vec4_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_double_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_bool_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_int_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_tess_control -dEQP-VK.subgroups.vote.subgroupall_uint_tess_control -dEQP-VK.subgroups.vote.subgroupany_uint_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_uint_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_float_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_vec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_vec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_vec4_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_double_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_bool_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_int_geometry -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_geometry -dEQP-VK.subgroups.vote.subgroupall_uint_geometry -dEQP-VK.subgroups.vote.subgroupany_uint_geometry -dEQP-VK.subgroups.vote.subgroupallequal_uint_geometry -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_geometry -dEQP-VK.subgroups.vote.subgroupallequal_float_geometry -dEQP-VK.subgroups.vote.subgroupallequal_vec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_vec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_vec4_geometry -dEQP-VK.subgroups.vote.subgroupallequal_double_geometry -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_geometry -dEQP-VK.subgroups.vote.subgroupallequal_bool_geometry -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_geometry -dEQP-VK.subgroups.vote.subgroupallequal_int_vertex -dEQP-VK.subgroups.vote.subgroupallequal_int_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupall_uint_vertex -dEQP-VK.subgroups.vote.subgroupall_uint_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupany_uint_vertex -dEQP-VK.subgroups.vote.subgroupany_uint_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_uint_vertex -dEQP-VK.subgroups.vote.subgroupallequal_uint_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_float_vertex -dEQP-VK.subgroups.vote.subgroupallequal_float_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_vec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_vec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_vec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_vec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_vec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_vec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_double_vertex -dEQP-VK.subgroups.vote.subgroupallequal_double_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_bool_vertex -dEQP-VK.subgroups.vote.subgroupallequal_bool_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_int_fragment -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_fragment -dEQP-VK.subgroups.vote.subgroupall_uint_fragment -dEQP-VK.subgroups.vote.subgroupany_uint_fragment -dEQP-VK.subgroups.vote.subgroupallequal_uint_fragment -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_fragment -dEQP-VK.subgroups.vote.subgroupallequal_float_fragment -dEQP-VK.subgroups.vote.subgroupallequal_vec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_vec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_vec4_fragment -dEQP-VK.subgroups.vote.subgroupallequal_double_fragment -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_fragment -dEQP-VK.subgroups.vote.subgroupallequal_bool_fragment -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_fragment +dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_graphic +dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_fragment_framebuffer +dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_int_compute +dEQP-VK.subgroups.vote.subgroupallequal_int_graphic +dEQP-VK.subgroups.vote.subgroupallequal_int_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_ivec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_ivec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_ivec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_ivec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_ivec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_ivec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_ivec4_compute +dEQP-VK.subgroups.vote.subgroupallequal_ivec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_ivec4_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupall_uint_compute +dEQP-VK.subgroups.vote.subgroupall_uint_graphic +dEQP-VK.subgroups.vote.subgroupall_uint_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupany_uint_compute +dEQP-VK.subgroups.vote.subgroupany_uint_graphic +dEQP-VK.subgroups.vote.subgroupany_uint_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_uint_compute +dEQP-VK.subgroups.vote.subgroupallequal_uint_graphic +dEQP-VK.subgroups.vote.subgroupallequal_uint_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_uvec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_uvec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_uvec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_uvec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_uvec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_uvec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_uvec4_compute +dEQP-VK.subgroups.vote.subgroupallequal_uvec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_uvec4_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_float_compute +dEQP-VK.subgroups.vote.subgroupallequal_float_graphic +dEQP-VK.subgroups.vote.subgroupallequal_float_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_vec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_vec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_vec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_vec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_vec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_vec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_vec4_compute +dEQP-VK.subgroups.vote.subgroupallequal_vec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_vec4_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_double_compute +dEQP-VK.subgroups.vote.subgroupallequal_double_graphic +dEQP-VK.subgroups.vote.subgroupallequal_double_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_dvec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_dvec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_dvec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_dvec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_dvec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_dvec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_dvec4_compute +dEQP-VK.subgroups.vote.subgroupallequal_dvec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_dvec4_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_bool_compute +dEQP-VK.subgroups.vote.subgroupallequal_bool_graphic +dEQP-VK.subgroups.vote.subgroupallequal_bool_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_bvec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_bvec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_bvec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_bvec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_bvec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_bvec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_bvec4_compute -dEQP-VK.subgroups.ballot.tess_eval -dEQP-VK.subgroups.ballot.tess_control -dEQP-VK.subgroups.ballot.geometry -dEQP-VK.subgroups.ballot.vertex -dEQP-VK.subgroups.ballot.vertex_framebuffer -dEQP-VK.subgroups.ballot.fragment +dEQP-VK.subgroups.vote.subgroupallequal_bvec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_bvec4_vertex_framebuffer dEQP-VK.subgroups.ballot.compute -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_fragment +dEQP-VK.subgroups.ballot.graphic +dEQP-VK.subgroups.ballot.vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_compute -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_tess_control -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_geometry -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_vertex -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_fragment +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupinverseballot_compute +dEQP-VK.subgroups.ballot_other.subgroupinverseballot_graphic +dEQP-VK.subgroups.ballot_other.subgroupinverseballot_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_compute +dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_compute +dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_compute +dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_compute +dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_compute +dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_int_vertex +dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_vertex_framebuffer +dEQP-VK.subgroups.arithmetic.subgroupadd_int_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_int_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_int_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_int_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_int_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_int_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_int_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_int_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_int_compute +dEQP-VK.subgroups.arithmetic.subgroupand_int_graphic dEQP-VK.subgroups.arithmetic.subgroupand_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupand_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupand_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_float_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_float_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_float_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_float_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_float_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_float_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_float_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_float_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_double_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_double_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_double_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_double_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_double_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_double_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_double_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_double_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupand_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupand_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_int_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_int_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_int_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_int_compute -dEQP-VK.subgroups.arithmetic.subgroupand_int_compute -dEQP-VK.subgroups.arithmetic.subgroupor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupand_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_float_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_float_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_float_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_float_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_double_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_double_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_double_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_double_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupand_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_compute -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_fragment dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_fragment +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_int_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_int_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_int_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_float_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_float_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_float_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_double_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_double_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_double_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_compute -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_fragment +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_compute -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_fragment +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_compute -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_fragment +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_compute -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_fragment +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_compute -dEQP-VK.subgroups.shape.clustered_tess_eval -dEQP-VK.subgroups.shape.quad_tess_eval -dEQP-VK.subgroups.shape.clustered_tess_control -dEQP-VK.subgroups.shape.quad_tess_control -dEQP-VK.subgroups.shape.clustered_geometry -dEQP-VK.subgroups.shape.quad_geometry -dEQP-VK.subgroups.shape.clustered_vertex -dEQP-VK.subgroups.shape.clustered_vertex_framebuffer -dEQP-VK.subgroups.shape.quad_vertex -dEQP-VK.subgroups.shape.quad_vertex_framebuffer -dEQP-VK.subgroups.shape.clustered_fragment -dEQP-VK.subgroups.shape.quad_fragment +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_vertex_framebuffer dEQP-VK.subgroups.shape.clustered_compute +dEQP-VK.subgroups.shape.clustered_graphic +dEQP-VK.subgroups.shape.clustered_vertex_framebuffer dEQP-VK.subgroups.shape.quad_compute +dEQP-VK.subgroups.shape.quad_graphic +dEQP-VK.subgroups.shape.quad_vertex_framebuffer dEQP-VK.ycbcr.format.g8b8g8r8_422_unorm.vertex_optimal dEQP-VK.ycbcr.format.g8b8g8r8_422_unorm.vertex_linear dEQP-VK.ycbcr.format.g8b8g8r8_422_unorm.vertex_linear_mapped diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp index 5a3e88d..46d84e3 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsArithmeticTests.cpp @@ -79,27 +79,6 @@ static bool checkVertexPipelineStages(std::vector datas, return true; } -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[x * height + y]; - - if (0x3 != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -592,39 +571,36 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) break; } - std::ostringstream bdy; - - bdy << indexVars - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " ref = " - << getIdentity(caseDef.opType, caseDef.format) << ";\n" - << " uint tempResult = 0;\n" - << " for (uint index = start; index < end; index++)\n" - << " {\n" - << " if (subgroupBallotBitExtract(mask, index))\n" - << " {\n" - << " ref = " << getOpTypeOperation(caseDef.opType, caseDef.format, "ref", "data[index]") << ";\n" - << " }\n" - << " }\n" - << " tempResult = " << getCompare(caseDef.opType, caseDef.format, "ref", - getOpTypeName(caseDef.opType) + "(data[gl_SubgroupInvocationID])") << " ? 0x1 : 0;\n" - << " if (1 == (gl_SubgroupInvocationID % 2))\n" - << " {\n" - << " mask = subgroupBallot(true);\n" - << " ref = " << getIdentity(caseDef.opType, caseDef.format) << ";\n" - << " for (uint index = start; index < end; index++)\n" - << " {\n" - << " if (subgroupBallotBitExtract(mask, index))\n" - << " {\n" - << " ref = " << getOpTypeOperation(caseDef.opType, caseDef.format, "ref", "data[index]") << ";\n" - << " }\n" - << " }\n" - << " tempResult |= " << getCompare(caseDef.opType, caseDef.format, "ref", - getOpTypeName(caseDef.opType) + "(data[gl_SubgroupInvocationID])") << " ? 0x2 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " tempResult |= 0x2;\n" - << " }\n"; + const string bdy = + indexVars + + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " ref = " + + getIdentity(caseDef.opType, caseDef.format) + ";\n" + " uint tempResult = 0;\n" + " for (uint index = start; index < end; index++)\n" + " {\n" + " if (subgroupBallotBitExtract(mask, index))\n" + " {\n" + " ref = " + getOpTypeOperation(caseDef.opType, caseDef.format, "ref", "data[index]") + ";\n" + " }\n" + " }\n" + " tempResult = " + getCompare(caseDef.opType, caseDef.format, "ref", getOpTypeName(caseDef.opType) + "(data[gl_SubgroupInvocationID])") + " ? 0x1 : 0;\n" + " if (1 == (gl_SubgroupInvocationID % 2))\n" + " {\n" + " mask = subgroupBallot(true);\n" + " ref = " + getIdentity(caseDef.opType, caseDef.format) + ";\n" + " for (uint index = start; index < end; index++)\n" + " {\n" + " if (subgroupBallotBitExtract(mask, index))\n" + " {\n" + " ref = " + getOpTypeOperation(caseDef.opType, caseDef.format, "ref", "data[index]") + ";\n" + " }\n" + " }\n" + " tempResult |= " + getCompare(caseDef.opType, caseDef.format, "ref", getOpTypeName(caseDef.opType) + "(data[gl_SubgroupInvocationID])") + " ? 0x2 : 0;\n" + " }\n" + " else\n" + " {\n" + " tempResult |= 0x2;\n" + " }\n"; if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { @@ -651,196 +627,181 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) "gl_GlobalInvocationID.z) + gl_GlobalInvocationID.y) + " "gl_GlobalInvocationID.x;\n" << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() + << bdy << " result[offset] = tempResult;\n" << "}\n"; programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(location = 0) out uint result;\n" - << "layout(set = 0, binding = 0, std430) readonly buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str())<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_VertexIndex] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveIDIn] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveID] = tempResult;\n" - << "}\n"; + { + const std::string vertex = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy+ + " result[gl_VertexIndex] = tempResult;\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + programCollection.glslSources.add("vert") + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + { + const std::string tesc = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy + + " result[gl_PrimitiveID] = tempResult;\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + programCollection.glslSources.add("tesc") + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); + { + const std::string tese = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy + + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + programCollection.glslSources.add("tese") + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - std::ostringstream src; + { + const std::string geometry = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy + + " result[gl_PrimitiveIDIn] = tempResult;\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" - << "}\n"; + { + const std::string fragment = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_arithmetic: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(location = 0) out uint result;\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy + + " result = tempResult;\n" + "}\n"; + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + subgroups::addNoSubgroupShader(programCollection); } } -tcu::TestStatus test(Context& context, const CaseDefinition caseDef) +bool checkShaderStages (Context& context, const CaseDefinition& caseDef) { - if (!subgroups::isSubgroupSupported(context)) - TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( context, caseDef.shaderStage)) { if (subgroups::areSubgroupOperationsRequiredForStage( caseDef.shaderStage)) { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); + return false; } else { TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); } } + return true; +} + +tcu::TestStatus test(Context& context, const CaseDefinition caseDef) +{ + if (!subgroups::isSubgroupSupported(context)) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_ARITHMETIC_BIT)) { TCU_THROW(NotSupportedError, "Device does not support subgroup arithmetic operations"); } - if (subgroups::isDoubleFormat(caseDef.format) && - !subgroups::isDoubleSupportedForDevice(context)) + if (subgroups::isDoubleFormat(caseDef.format) && !subgroups::isDoubleSupportedForDevice(context)) { TCU_THROW(NotSupportedError, "Device does not support subgroup double operations"); } @@ -848,6 +809,13 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { + if(!checkShaderStages(context,caseDef)) + { + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); + } subgroups::SSBOData inputData; inputData.format = caseDef.format; inputData.numElements = subgroups::maxSupportedSubgroupSize(); @@ -856,78 +824,56 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, &inputData, 1, checkVertexPipelineStages); } - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if(!checkShaderStages(context,caseDef)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } - } - - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData; inputData.format = caseDef.format; inputData.numElements = subgroups::maxSupportedSubgroupSize(); inputData.initializeType = subgroups::SSBOData::InitializeNonZero; - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkFragment); + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, &inputData, 1, checkCompute); } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) + else { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkCompute); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if ( VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.format = caseDef.format; + inputData.numElements = subgroups::maxSupportedSubgroupSize(); + inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.binding = 4u; + inputData.stages = stages; - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else - { - TCU_THROW(InternalError, "Unhandled shader stage"); + return subgroups::allStages(context, VK_FORMAT_R32_UINT, &inputData, + 1, checkVertexPipelineStages, stages); } } } @@ -941,16 +887,6 @@ tcu::TestCaseGroup* createSubgroupsArithmeticTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "arithmetic", "Subgroup arithmetic category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - const VkFormat formats[] = { VK_FORMAT_R32_SINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32B32_SINT, @@ -964,89 +900,92 @@ tcu::TestCaseGroup* createSubgroupsArithmeticTests(tcu::TestContext& testCtx) VK_FORMAT_R8G8B8_USCALED, VK_FORMAT_R8G8B8A8_USCALED, }; - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; + const VkFormat format = formats[formatIndex]; - for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - const VkFormat format = formats[formatIndex]; + bool isBool = false; + bool isFloat = false; - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) + switch (format) { - bool isBool = false; - bool isFloat = false; - - switch (format) - { - default: - break; - case VK_FORMAT_R32_SFLOAT: - case VK_FORMAT_R32G32_SFLOAT: - case VK_FORMAT_R32G32B32_SFLOAT: - case VK_FORMAT_R32G32B32A32_SFLOAT: - case VK_FORMAT_R64_SFLOAT: - case VK_FORMAT_R64G64_SFLOAT: - case VK_FORMAT_R64G64B64_SFLOAT: - case VK_FORMAT_R64G64B64A64_SFLOAT: - isFloat = true; - break; - case VK_FORMAT_R8_USCALED: - case VK_FORMAT_R8G8_USCALED: - case VK_FORMAT_R8G8B8_USCALED: - case VK_FORMAT_R8G8B8A8_USCALED: - isBool = true; - break; - } - - bool isBitwiseOp = false; + default: + break; + case VK_FORMAT_R32_SFLOAT: + case VK_FORMAT_R32G32_SFLOAT: + case VK_FORMAT_R32G32B32_SFLOAT: + case VK_FORMAT_R32G32B32A32_SFLOAT: + case VK_FORMAT_R64_SFLOAT: + case VK_FORMAT_R64G64_SFLOAT: + case VK_FORMAT_R64G64B64_SFLOAT: + case VK_FORMAT_R64G64B64A64_SFLOAT: + isFloat = true; + break; + case VK_FORMAT_R8_USCALED: + case VK_FORMAT_R8G8_USCALED: + case VK_FORMAT_R8G8B8_USCALED: + case VK_FORMAT_R8G8B8A8_USCALED: + isBool = true; + break; + } - switch (opTypeIndex) - { - default: - break; - case OPTYPE_AND: - case OPTYPE_INCLUSIVE_AND: - case OPTYPE_EXCLUSIVE_AND: - case OPTYPE_OR: - case OPTYPE_INCLUSIVE_OR: - case OPTYPE_EXCLUSIVE_OR: - case OPTYPE_XOR: - case OPTYPE_INCLUSIVE_XOR: - case OPTYPE_EXCLUSIVE_XOR: - isBitwiseOp = true; - break; - } + bool isBitwiseOp = false; - if (isFloat && isBitwiseOp) - { - // Skip float with bitwise category. - continue; - } + switch (opTypeIndex) + { + default: + break; + case OPTYPE_AND: + case OPTYPE_INCLUSIVE_AND: + case OPTYPE_EXCLUSIVE_AND: + case OPTYPE_OR: + case OPTYPE_INCLUSIVE_OR: + case OPTYPE_EXCLUSIVE_OR: + case OPTYPE_XOR: + case OPTYPE_INCLUSIVE_XOR: + case OPTYPE_EXCLUSIVE_XOR: + isBitwiseOp = true; + break; + } - if (isBool && !isBitwiseOp) - { - // Skip bool when its not the bitwise category. - continue; - } + if (isFloat && isBitwiseOp) + { + // Skip float with bitwise category. + continue; + } - CaseDefinition caseDef = {opTypeIndex, stage, format, false}; + if (isBool && !isBitwiseOp) + { + // Skip bool when its not the bitwise category. + continue; + } + std::string op = getOpTypeName(opTypeIndex); - std::string op = getOpTypeName(opTypeIndex); + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, format, false}; + addFunctionCaseWithPrograms(group.get(), + de::toLower(op) + "_" + + subgroups::getFormatNameForGLSL(format) + + "_" + getShaderStageName(caseDef.shaderStage), + "", initPrograms, test, caseDef); + } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_ALL_GRAPHICS, format, false}; addFunctionCaseWithPrograms(group.get(), de::toLower(op) + "_" + subgroups::getFormatNameForGLSL(format) + - "_" + getShaderStageName(stage), + "_graphic", "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), de::toLower(op) + "_" + subgroups::getFormatNameForGLSL(format) + - "_" + getShaderStageName(stage) + "_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, format, true}; + addFunctionCaseWithPrograms(group.get(), de::toLower(op) + "_" + subgroups::getFormatNameForGLSL(format) + + "_" + getShaderStageName(caseDef.shaderStage) + "_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } } } diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp index 6842a72..abc4140 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotBroadcastTests.cpp @@ -60,27 +60,6 @@ static bool checkVertexPipelineStages(std::vector datas, return true; } -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[x * height + y]; - - if (0x3 != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -165,23 +144,20 @@ void initFrameBufferPrograms(SourceCollections& programCollection, CaseDefinitio if (OPTYPE_BROADCAST == caseDef.opType) { - bdy << " tempResult = 0x3;\n"; - - for (deUint32 i = 0; i < subgroups::maxSupportedSubgroupSize(); i++) - { - bdy << " {\n" - << " const uint id = " << i << ";\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) - << " op = subgroupBroadcast(data1[gl_SubgroupInvocationID], id);\n" - << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" - << " {\n" - << " if (op != data1[id])\n" - << " {\n" - << " tempResult = 0;\n" - << " }\n" - << " }\n" - << " }\n"; - } + bdy << " tempResult = 0x3;\n" + << " for (int i = 0; i < " << subgroups::maxSupportedSubgroupSize() << "; i++)\n" + << " {\n" + << " const uint id = i;\n" + << " " << subgroups::getFormatNameForGLSL(caseDef.format) + << " op = subgroupBroadcast(data1[gl_SubgroupInvocationID], id);\n" + << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" + << " {\n" + << " if (op != data1[id])\n" + << " {\n" + << " tempResult = 0;\n" + << " }\n" + << " }\n" + << " }\n"; } else { @@ -263,23 +239,20 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) if (OPTYPE_BROADCAST == caseDef.opType) { - bdy << " tempResult = 0x3;\n"; - - for (deUint32 i = 0; i < subgroups::maxSupportedSubgroupSize(); i++) - { - bdy << " {\n" - << " const uint id = " << i << ";\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) - << " op = subgroupBroadcast(data1[gl_SubgroupInvocationID], id);\n" - << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" - << " {\n" - << " if (op != data1[id])\n" - << " {\n" - << " tempResult = 0;\n" - << " }\n" - << " }\n" - << " }\n"; - } + bdy << " tempResult = 0x3;\n" + << " for (int i = 0; i < " << subgroups::maxSupportedSubgroupSize() << "; i++)\n" + << " {\n" + << " const uint id = i;\n" + << " " << subgroups::getFormatNameForGLSL(caseDef.format) + << " op = subgroupBroadcast(data1[gl_SubgroupInvocationID], id);\n" + << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" + << " {\n" + << " if (op != data1[id])\n" + << " {\n" + << " tempResult = 0;\n" + << " }\n" + << " }\n" + << " }\n"; } else { @@ -344,152 +317,128 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(location = 0) out uint result;\n" - << "layout(set = 0, binding = 0, std430) readonly buffer Buffer1\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_VertexIndex] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveIDIn] = tempResult;\n" - << "}\n"; + const string vertex = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result[gl_VertexIndex] = tempResult;\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + + const std::string tesc = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result[gl_PrimitiveID] = tempResult;\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + + const std::string tese = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + + const std::string geometry = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result[gl_PrimitiveIDIn] = tempResult;\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + + const string fragment = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(location = 0) out uint result;\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer1\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result = tempResult;\n" + "}\n"; + + subgroups::addNoSubgroupShader(programCollection); - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveID] = tempResult;\n" - << "}\n"; - + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" - << "}\n"; - + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } } @@ -498,22 +447,6 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (subgroups::areSubgroupOperationsRequiredForStage( - caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_BALLOT_BIT)) { @@ -529,6 +462,20 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + if (subgroups::areSubgroupOperationsRequiredForStage(caseDef.shaderStage)) + { + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); + } + else + { + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); + } + } subgroups::SSBOData inputData[1]; inputData[0].format = caseDef.format; inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); @@ -537,78 +484,62 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, inputData, 1, checkVertexPipelineStages); } - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + if (subgroups::areSubgroupOperationsRequiredForStage(caseDef.shaderStage)) + { + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); + } + else + { + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); + } } - } - - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData[1]; inputData[0].format = caseDef.format; inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkFragment); + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, inputData, 1, checkCompute); } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) + else { - subgroups::SSBOData inputData[1]; - inputData[0].format = caseDef.format; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkCompute); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData[1]; - inputData[0].format = caseDef.format; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData[1]; - inputData[0].format = caseDef.format; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData[1]; - inputData[0].format = caseDef.format; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData[1]; - inputData[0].format = caseDef.format; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + if ( VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkVertexPipelineStages); - } - else - { - TCU_THROW(InternalError, "Unhandled shader stage"); + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); + + subgroups::SSBOData inputData; + inputData.format = caseDef.format; + inputData.numElements = subgroups::maxSupportedSubgroupSize(); + inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.binding = 4u; + inputData.stages = stages; + + return subgroups::allStages(context, VK_FORMAT_R32_UINT, &inputData, 1, checkVertexPipelineStages, stages); } } } @@ -622,16 +553,6 @@ tcu::TestCaseGroup* createSubgroupsBallotBroadcastTests(tcu::TestContext& testCt de::MovePtr group(new tcu::TestCaseGroup( testCtx, "ballot_broadcast", "Subgroup ballot broadcast category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - const VkFormat formats[] = { VK_FORMAT_R32_SINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32B32_SINT, @@ -645,34 +566,28 @@ tcu::TestCaseGroup* createSubgroupsBallotBroadcastTests(tcu::TestContext& testCt VK_FORMAT_R8G8B8_USCALED, VK_FORMAT_R8G8B8A8_USCALED, }; - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; + const VkFormat format = formats[formatIndex]; - for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - const VkFormat format = formats[formatIndex]; + const std::string op = de::toLower(getOpTypeName(opTypeIndex)); + const std::string name = op + "_" + subgroups::getFormatNameForGLSL(format) + "_"; - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - CaseDefinition caseDef = {opTypeIndex, stage, format, false}; - - std::ostringstream name; - - std::string op = getOpTypeName(opTypeIndex); - - name << de::toLower(op) << "_" << subgroups::getFormatNameForGLSL(format) - << "_" << getShaderStageName(stage); + CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, format, false}; + addFunctionCaseWithPrograms(group.get(), name + getShaderStageName(caseDef.shaderStage), "", initPrograms, test, caseDef); + } - addFunctionCaseWithPrograms(group.get(), name.str(), - "", initPrograms, test, caseDef); + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_ALL_GRAPHICS, format, false}; + addFunctionCaseWithPrograms(group.get(), name + "graphic" , "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage ) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, format, true}; + addFunctionCaseWithPrograms(group.get(), name + getShaderStageName(caseDef.shaderStage) + "_framebuffer", "", initFrameBufferPrograms, test, caseDef); } } } diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp index 27bcd5b..284ed50 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotOtherTests.cpp @@ -65,27 +65,6 @@ static bool checkVertexPipelineStages(std::vector datas, return true; } -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[x * height + y]; - - if (0xf != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -511,127 +490,103 @@ void initPrograms (SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(location = 0) out uint result;\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_VertexIndex] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + const string vertex = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result[gl_VertexIndex] = tempResult;\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + + const string tesc = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result[gl_PrimitiveID] = tempResult;\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + + const string tese = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + + const string geometry = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result[gl_PrimitiveIDIn] = tempResult;\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + + const string fragment = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(location = 0) out uint result;\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result = tempResult;\n" + "}\n"; + + subgroups::addNoSubgroupShader(programCollection); - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveIDIn] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveID] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" - << "}\n"; - + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } } @@ -640,23 +595,6 @@ tcu::TestStatus test (Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (subgroups::areSubgroupOperationsRequiredForStage( - caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } - if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_BALLOT_BIT)) { TCU_THROW(NotSupportedError, "Device does not support subgroup ballot operations"); @@ -664,49 +602,51 @@ tcu::TestStatus test (Context& context, const CaseDefinition caseDef) if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); + } return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); } - //Tests which don't use the SSBO - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkCompute); } - - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkFragment); - } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) - { - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkCompute); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) + else { - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkVertexPipelineStages); + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if ( VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); + + return subgroups::allStages(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages, stages); } return tcu::TestStatus::pass("OK"); } @@ -721,41 +661,25 @@ tcu::TestCaseGroup* createSubgroupsBallotOtherTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "ballot_other", "Subgroup ballot other category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; + const string op = de::toLower(getOpTypeName(opTypeIndex)); - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - CaseDefinition caseDef = {opTypeIndex, stage, false}; - - std::ostringstream name; - - std::string op = getOpTypeName(opTypeIndex); - - name << de::toLower(op) << "_" << getShaderStageName(stage); - - addFunctionCaseWithPrograms(group.get(), name.str(), - "", initPrograms, test, caseDef); + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, false}; + addFunctionCaseWithPrograms(group.get(), op + "_" + getShaderStageName(caseDef.shaderStage), "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT & stage ) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), name.str() + "_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_ALL_GRAPHICS, false}; + addFunctionCaseWithPrograms(group.get(), op + "_graphic", "", initPrograms, test, caseDef); + } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, true}; + addFunctionCaseWithPrograms(group.get(), op + "_" + getShaderStageName(caseDef.shaderStage) + "_framebuffer", "", initFrameBufferPrograms, test, caseDef); } + } return group.release(); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp index 595c8d8..4759fa3 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBallotTests.cpp @@ -53,27 +53,6 @@ static bool checkVertexPipelineStages(std::vector datas, return true; } -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[x * height + y]; - - if (0x7 != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -215,167 +194,143 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(location = 0) out uint result;\n" - << "layout(set = 0, binding = 0, std430) readonly buffer Buffer1\n" - << "{\n" - << " uint data[];\n" - << "};\n" - << "void main (void)\n" - << "{\n" - << " uint tempResult = 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" - << " bool bData = data[gl_SubgroupInvocationID] != 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" - << " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" - << " result = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " uint data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uint tempResult = 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" - << " bool bData = data[gl_SubgroupInvocationID] != 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" - << " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" - << " result[gl_VertexIndex] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; + const string vertex = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " uint data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uint tempResult = 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" + " bool bData = data[gl_SubgroupInvocationID] != 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" + " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" + " result[gl_VertexIndex] = tempResult;\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + + const string tesc = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " uint data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uint tempResult = 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" + " bool bData = data[gl_SubgroupInvocationID] != 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" + " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" + " result[gl_PrimitiveID] = tempResult;\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + + const string tese = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " uint data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uint tempResult = 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" + " bool bData = data[gl_SubgroupInvocationID] != 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" + " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + + const string geometry = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " uint data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uint tempResult = 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" + " bool bData = data[gl_SubgroupInvocationID] != 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" + " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" + " result[gl_PrimitiveIDIn] = tempResult;\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + + const string fragment = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(location = 0) out uint result;\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer1\n" + "{\n" + " uint data[];\n" + "};\n" + "void main (void)\n" + "{\n" + " uint tempResult = 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" + " bool bData = data[gl_SubgroupInvocationID] != 0;\n" + " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" + " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" + " result = tempResult;\n" + "}\n"; + + subgroups::addNoSubgroupShader(programCollection); - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " uint data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uint tempResult = 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" - << " bool bData = data[gl_SubgroupInvocationID] != 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" - << " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" - << " result[gl_PrimitiveIDIn] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " uint data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uint tempResult = 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" - << " bool bData = data[gl_SubgroupInvocationID] != 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" - << " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" - << " result[gl_PrimitiveID] = tempResult;\n" - << "}\n"; - + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " uint data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uint tempResult = 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(true)) ? 0x1 : 0;\n" - << " bool bData = data[gl_SubgroupInvocationID] != 0;\n" - << " tempResult |= !bool(uvec4(0) == subgroupBallot(bData)) ? 0x2 : 0;\n" - << " tempResult |= uvec4(0) == subgroupBallot(false) ? 0x4 : 0;\n" - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" - << "}\n"; - + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } } @@ -384,23 +339,6 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (subgroups::areSubgroupOperationsRequiredForStage( - caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } - if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_BALLOT_BIT)) { TCU_THROW(NotSupportedError, "Device does not support subgroup ballot operations"); @@ -409,6 +347,10 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); + } subgroups::SSBOData inputData[1]; inputData[0].format = VK_FORMAT_R32_UINT; inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); @@ -417,78 +359,55 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, inputData, 1, checkVertexPipelineStages); } - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } - } - - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData[1]; inputData[0].format = VK_FORMAT_R32_UINT; inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkFragment); + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, inputData, 1, checkCompute); } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) + else { - subgroups::SSBOData inputData[1]; - inputData[0].format = VK_FORMAT_R32_UINT; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkCompute); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData[1]; - inputData[0].format = VK_FORMAT_R32_UINT; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData[1]; - inputData[0].format = VK_FORMAT_R32_UINT; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData[1]; - inputData[0].format = VK_FORMAT_R32_UINT; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData[1]; - inputData[0].format = VK_FORMAT_R32_UINT; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + if ( VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, - inputData, 1, checkVertexPipelineStages); - } - else - { - TCU_THROW(InternalError, "Unhandled shader stage"); + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); + + subgroups::SSBOData inputData; + inputData.format = VK_FORMAT_R32_UINT; + inputData.numElements = subgroups::maxSupportedSubgroupSize(); + inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.binding = 4u; + inputData.stages = stages; + + return subgroups::allStages(context, VK_FORMAT_R32_UINT, &inputData, 1, checkVertexPipelineStages, stages); } } } @@ -502,35 +421,20 @@ tcu::TestCaseGroup* createSubgroupsBallotTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "ballot", "Subgroup ballot category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; - - CaseDefinition caseDef = {stage, false}; - - std::ostringstream name; - - name << getShaderStageName(stage); + const CaseDefinition caseDef = {VK_SHADER_STAGE_COMPUTE_BIT, false}; + addFunctionCaseWithPrograms(group.get(), getShaderStageName(caseDef.shaderStage), "", initPrograms, test, caseDef); + } - addFunctionCaseWithPrograms(group.get(), name.str(), - "", initPrograms, test, caseDef); + { + const CaseDefinition caseDef = {VK_SHADER_STAGE_ALL_GRAPHICS, false}; + addFunctionCaseWithPrograms(group.get(), "graphic", "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage ) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {VK_SHADER_STAGE_VERTEX_BIT, true}; + addFunctionCaseWithPrograms(group.get(), getShaderStageName(caseDef.shaderStage)+"_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } return group.release(); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp index 33f082d..b2e02f2 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBasicTests.cpp @@ -39,64 +39,6 @@ static const deUint32 ELECTED_VALUE = 42u; static const deUint32 UNELECTED_VALUE = 13u; static const vk::VkDeviceSize SHADER_BUFFER_SIZE = 4096ull; // min(maxUniformBufferRange, maxImageDimension1D) -static bool checkFragmentSubgroupElect(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* const resultData = - reinterpret_cast(datas[0]); - deUint32 poisonValuesFound = 0; - - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = resultData[y * width + x]; - - switch (val) - { - default: - // some garbage value was found! - return false; - case UNELECTED_VALUE: - break; - case ELECTED_VALUE: - poisonValuesFound++; - break; - } - } - } - - // we used an atomicly incremented counter to note how many subgroups we used for the fragment shader - const deUint32 numSubgroupsUsed = - *reinterpret_cast(datas[1]); - - return numSubgroupsUsed == poisonValuesFound; -} - -static bool checkFragmentSubgroupBarriers(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* const resultData = reinterpret_cast(datas[0]); - - // We used this SSBO to generate our unique value! - const deUint32 ref = *reinterpret_cast(datas[3]); - - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = resultData[x * height + y]; - - if (val != ref) - { - return false; - } - } - } - - return true; -} - static bool checkFragmentSubgroupBarriersNoSSBO(std::vector datas, deUint32 width, deUint32 height, deUint32) { @@ -195,9 +137,7 @@ static bool checkVertexPipelineStagesSubgroupBarriers(std::vector d deUint32 val = resultData[x]; if (val != ref) - { return false; - } } return true; @@ -214,15 +154,12 @@ static bool checkVertexPipelineStagesSubgroupBarriersNoSSBO(std::vector subgroups::getSubgroupSize(context)); return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, - &inputDatas[0], inputDatasCount, checkVertexPipelineStagesSubgroupBarriersNoSSBO); + &inputDatas[0], inputDatasCount, checkVertexPipelineStagesSubgroupBarriersNoSSBO); } } @@ -1166,69 +1059,22 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) inputDatas[2].isImage = true; } - return subgroups::makeFragmentFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, - &inputDatas[0], inputDatasCount, checkFragmentSubgroupBarriersNoSSBO); - } - } - - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) - { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) - { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return subgroups::makeFragmentFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT, &inputDatas[0], inputDatasCount, checkFragmentSubgroupBarriersNoSSBO); } } - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isFragmentSSBOSupportedForDevice(context)) - { - TCU_THROW(NotSupportedError, "Subgroup basic operation require that the fragment stage be able to write to SSBOs!"); - } - - if (OPTYPE_ELECT == caseDef.opType) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - subgroups::SSBOData inputData; - inputData.format = VK_FORMAT_R32_UINT; - inputData.numElements = 1; - inputData.initializeType = subgroups::SSBOData::InitializeZero; - - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkFragmentSubgroupElect); + return tcu::TestStatus::fail("Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } - else - { - const deUint32 inputDatasCount = 4; - subgroups::SSBOData inputDatas[inputDatasCount]; - inputDatas[0].format = VK_FORMAT_R32_UINT; - inputDatas[0].numElements = SHADER_BUFFER_SIZE; - inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero; - - inputDatas[1].format = VK_FORMAT_R32_UINT; - inputDatas[1].numElements = 1; - inputDatas[1].initializeType = subgroups::SSBOData::InitializeZero; - - inputDatas[2].format = VK_FORMAT_R32_UINT; - inputDatas[2].numElements = 1; - inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero; - inputDatas[3].format = VK_FORMAT_R32_UINT; - inputDatas[3].numElements = SHADER_BUFFER_SIZE; - inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone; - inputDatas[3].isImage = true; - - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - inputDatas, inputDatasCount, checkFragmentSubgroupBarriers); - - } - } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) - { if (OPTYPE_ELECT == caseDef.opType) { - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkComputeSubgroupElect); + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkComputeSubgroupElect); } else { @@ -1247,162 +1093,122 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) inputDatas[2].initializeType = subgroups::SSBOData::InitializeNone; inputDatas[2].isImage = true; - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, - inputDatas, inputDatasCount, checkComputeSubgroupBarriers); + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, inputDatas, inputDatasCount, checkComputeSubgroupBarriers); } } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) + else { - if (OPTYPE_ELECT == caseDef.opType) + if (!subgroups::isFragmentSSBOSupportedForDevice(context)) { - subgroups::SSBOData inputData; - inputData.format = VK_FORMAT_R32_UINT; - inputData.numElements = 1; - inputData.initializeType = subgroups::SSBOData::InitializeZero; - - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkVertexPipelineStagesSubgroupElect); + TCU_THROW(NotSupportedError, "Subgroup basic operation require that the fragment stage be able to write to SSBOs!"); } - else - { - const deUint32 inputDatasCount = 4; - subgroups::SSBOData inputDatas[inputDatasCount]; - inputDatas[0].format = VK_FORMAT_R32_UINT; - inputDatas[0].numElements = SHADER_BUFFER_SIZE; - inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero; - inputDatas[1].format = VK_FORMAT_R32_UINT; - inputDatas[1].numElements = 1; - inputDatas[1].initializeType = subgroups::SSBOData::InitializeZero; + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; - inputDatas[2].format = VK_FORMAT_R32_UINT; - inputDatas[2].numElements = 1; - inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; - inputDatas[3].format = VK_FORMAT_R32_UINT; - inputDatas[3].numElements = SHADER_BUFFER_SIZE; - inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone; - inputDatas[3].isImage = true; + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, - inputDatas, inputDatasCount, checkVertexPipelineStagesSubgroupBarriers); - } - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - if (OPTYPE_ELECT == caseDef.opType) - { - subgroups::SSBOData inputData; - inputData.format = VK_FORMAT_R32_UINT; - inputData.numElements = 1; - inputData.initializeType = subgroups::SSBOData::InitializeZero; + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkVertexPipelineStagesSubgroupElect); - } - else + if ( VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) { - const deUint32 inputDatasCount = 4; - subgroups::SSBOData inputDatas[inputDatasCount]; - inputDatas[0].format = VK_FORMAT_R32_UINT; - inputDatas[0].numElements = SHADER_BUFFER_SIZE; - inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero; - - inputDatas[1].format = VK_FORMAT_R32_UINT; - inputDatas[1].numElements = 1; - inputDatas[1].initializeType = subgroups::SSBOData::InitializeZero; - - inputDatas[2].format = VK_FORMAT_R32_UINT; - inputDatas[2].numElements = 1; - inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero; - - inputDatas[3].format = VK_FORMAT_R32_UINT; - inputDatas[3].numElements = SHADER_BUFFER_SIZE; - inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone; - inputDatas[3].isImage = true; - - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, - inputDatas, inputDatasCount, checkVertexPipelineStagesSubgroupBarriers); - } - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - if (OPTYPE_ELECT == caseDef.opType) - { - subgroups::SSBOData inputData; - inputData.format = VK_FORMAT_R32_UINT; - inputData.numElements = 1; - inputData.initializeType = subgroups::SSBOData::InitializeZero; - - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkVertexPipelineStagesSubgroupElect); + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; } - else - { - const deUint32 inputDatasCount = 4; - subgroups::SSBOData inputDatas[inputDatasCount]; - inputDatas[0].format = VK_FORMAT_R32_UINT; - inputDatas[0].numElements = SHADER_BUFFER_SIZE; - inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero; - - inputDatas[1].format = VK_FORMAT_R32_UINT; - inputDatas[1].numElements = 1; - inputDatas[1].initializeType = subgroups::SSBOData::InitializeZero; - - inputDatas[2].format = VK_FORMAT_R32_UINT; - inputDatas[2].numElements = 1; - inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero; - inputDatas[3].format = VK_FORMAT_R32_UINT; - inputDatas[3].numElements = SHADER_BUFFER_SIZE; - inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone; - inputDatas[3].isImage = true; + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, - inputDatas, inputDatasCount, checkVertexPipelineStagesSubgroupBarriers); - } - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { if (OPTYPE_ELECT == caseDef.opType) { - subgroups::SSBOData inputData; - inputData.format = VK_FORMAT_R32_UINT; - inputData.numElements = 1; - inputData.initializeType = subgroups::SSBOData::InitializeZero; - - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkVertexPipelineStagesSubgroupElect); + const deUint32 inputCount = 5u; + subgroups::SSBOData inputData[inputCount]; + + inputData[0].format = VK_FORMAT_R32_UINT; + inputData[0].numElements = 1; + inputData[0].initializeType = subgroups::SSBOData::InitializeZero; + inputData[0].binding = 4u; + inputData[0].stages = VK_SHADER_STAGE_VERTEX_BIT; + + inputData[1].format = VK_FORMAT_R32_UINT; + inputData[1].numElements = 1; + inputData[1].initializeType = subgroups::SSBOData::InitializeZero; + inputData[1].binding = 5u; + inputData[1].stages = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT; + + inputData[2].format = VK_FORMAT_R32_UINT; + inputData[2].numElements = 1; + inputData[2].initializeType = subgroups::SSBOData::InitializeZero; + inputData[2].binding = 6u; + inputData[2].stages = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT; + + inputData[3].format = VK_FORMAT_R32_UINT; + inputData[3].numElements = 1; + inputData[3].initializeType = subgroups::SSBOData::InitializeZero; + inputData[3].binding = 7u; + inputData[3].stages = VK_SHADER_STAGE_GEOMETRY_BIT; + + inputData[4].format = VK_FORMAT_R32_UINT; + inputData[4].numElements = 1; + inputData[4].initializeType = subgroups::SSBOData::InitializeZero; + inputData[4].binding = 8u; + inputData[4].stages = VK_SHADER_STAGE_FRAGMENT_BIT; + + return subgroups::allStages(context, VK_FORMAT_R32_UINT, inputData, inputCount, checkVertexPipelineStagesSubgroupElect, stages); } else { - const deUint32 inputDatasCount = 4; + const VkShaderStageFlagBits stagesBits[] = + { + VK_SHADER_STAGE_VERTEX_BIT, + VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, + VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, + VK_SHADER_STAGE_GEOMETRY_BIT, + VK_SHADER_STAGE_FRAGMENT_BIT, + }; + + const deUint32 inputDatasCount = DE_LENGTH_OF_ARRAY(stagesBits) * 4u; subgroups::SSBOData inputDatas[inputDatasCount]; - inputDatas[0].format = VK_FORMAT_R32_UINT; - inputDatas[0].numElements = SHADER_BUFFER_SIZE; - inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero; - inputDatas[1].format = VK_FORMAT_R32_UINT; - inputDatas[1].numElements = 1; - inputDatas[1].initializeType = subgroups::SSBOData::InitializeZero; - - inputDatas[2].format = VK_FORMAT_R32_UINT; - inputDatas[2].numElements = 1; - inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero; - - inputDatas[3].format = VK_FORMAT_R32_UINT; - inputDatas[3].numElements = SHADER_BUFFER_SIZE; - inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone; - inputDatas[3].isImage = true; + for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(stagesBits); ++ndx) + { + const deUint32 index = ndx*4; + inputDatas[index].format = VK_FORMAT_R32_UINT; + inputDatas[index].numElements = SHADER_BUFFER_SIZE; + inputDatas[index].initializeType = subgroups::SSBOData::InitializeNonZero; + inputDatas[index].binding = index + 4u; + inputDatas[index].stages = stagesBits[ndx]; + + inputDatas[index + 1].format = VK_FORMAT_R32_UINT; + inputDatas[index + 1].numElements = 1; + inputDatas[index + 1].initializeType = subgroups::SSBOData::InitializeZero; + inputDatas[index + 1].binding = index + 5u; + inputDatas[index + 1].stages = stagesBits[ndx]; + + inputDatas[index + 2].format = VK_FORMAT_R32_UINT; + inputDatas[index + 2].numElements = 1; + inputDatas[index + 2].initializeType = subgroups::SSBOData::InitializeNonZero; + inputDatas[index + 2].binding = index + 6u; + inputDatas[index + 2].stages = stagesBits[ndx]; + + inputDatas[index + 3].format = VK_FORMAT_R32_UINT; + inputDatas[index + 3].numElements = SHADER_BUFFER_SIZE; + inputDatas[index + 3].initializeType = subgroups::SSBOData::InitializeNone; + inputDatas[index + 3].isImage = true; + inputDatas[index + 3].binding = index + 7u; + inputDatas[index + 3].stages = stagesBits[ndx]; + } - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, - inputDatas, inputDatasCount, checkVertexPipelineStagesSubgroupBarriers); + return subgroups::allStages(context, VK_FORMAT_R32_UINT, inputDatas, inputDatasCount, checkVertexPipelineStagesSubgroupBarriers, stages); } } - else - { - TCU_THROW(InternalError, "Unhandled shader stage"); - } } } @@ -1415,50 +1221,50 @@ tcu::TestCaseGroup* createSubgroupsBasicTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "basic", "Subgroup basic category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; + const std::string op = de::toLower(getOpTypeName(opTypeIndex)); - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - if ((OPTYPE_SUBGROUP_MEMORY_BARRIER_SHARED == opTypeIndex) && - (VK_SHADER_STAGE_COMPUTE_BIT != stage)) - { - // Shared isn't available in non compute shaders. - continue; - } - - CaseDefinition caseDef = {opTypeIndex, stage, false}; + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, false}; + addFunctionCaseWithPrograms(group.get(), + op + "_" + getShaderStageName(caseDef.shaderStage), "", + initPrograms, test, caseDef); + } - std::string op = getOpTypeName(opTypeIndex); + if (OPTYPE_SUBGROUP_MEMORY_BARRIER_SHARED == opTypeIndex) + { + // Shared isn't available in non compute shaders. + continue; + } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_ALL_GRAPHICS, false}; addFunctionCaseWithPrograms(group.get(), - de::toLower(op) + - "_" + getShaderStageName(stage), "", + op + "_graphic", "", initPrograms, test, caseDef); + } - if ((VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT) & stage ) - { - if (OPTYPE_ELECT != caseDef.opType || VK_SHADER_STAGE_FRAGMENT_BIT != stage) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), - de::toLower(op) + "_" + - getShaderStageName(stage)+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } - } + if (OPTYPE_ELECT == opTypeIndex) + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, true}; + addFunctionCaseWithPrograms(group.get(), + op + "_" + getShaderStageName(caseDef.shaderStage)+"_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } + else + { + const CaseDefinition caseDefFrag = {opTypeIndex, VK_SHADER_STAGE_FRAGMENT_BIT, true}; + addFunctionCaseWithPrograms(group.get(), + op + "_" + getShaderStageName(caseDefFrag.shaderStage)+"_framebuffer", "", + initFrameBufferPrograms, test, caseDefFrag); + + const CaseDefinition caseDefVer = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, true}; + addFunctionCaseWithPrograms(group.get(), + op + "_" + getShaderStageName(caseDefVer.shaderStage)+"_framebuffer", "", + initFrameBufferPrograms, test, caseDefVer); + } + } return group.release(); diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp index bec6b2d..f37b241 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinMaskVarTests.cpp @@ -55,27 +55,6 @@ static bool checkVertexPipelineStages(std::vector datas, return true; } -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[(x * height + y)]; - - if (0x1 != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -227,8 +206,7 @@ void initFrameBufferPrograms(SourceCollections& programCollection, CaseDefinitio void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) { - std::ostringstream bdy; - bdy << subgroupMask(caseDef); + const string bdy = subgroupMask(caseDef); if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { @@ -249,134 +227,122 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) << " highp uint offset = globalSize.x * ((globalSize.y * " "gl_GlobalInvocationID.z) + gl_GlobalInvocationID.y) + " "gl_GlobalInvocationID.x;\n" - << bdy.str() + << bdy << " result[offset] = tempResult;\n" << "}\n"; programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(location = 0) out uint result;\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Output\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_VertexIndex] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Output\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveIDIn] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Output\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveID] = tempResult;\n" - << "}\n"; + { + const string vertex = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(set = 0, binding = 0, std430) buffer Output\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy + + " result[gl_VertexIndex] = tempResult;\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + programCollection.glslSources.add("vert") + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + { + const string tesc = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Output\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy + + " result[gl_PrimitiveID] = tempResult;\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + programCollection.glslSources.add("tesc") + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); + { + const string tese = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Output\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy + + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + + programCollection.glslSources.add("tese") + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - std::ostringstream src; + { + const string geometry = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Output\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy + + " result[gl_PrimitiveIDIn] = tempResult;\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Output\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult;\n" - << "}\n"; + { + const string fragment = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(location = 0) out uint result;\n" + "void main (void)\n" + "{\n" + + bdy + + " result = tempResult;\n" + "}\n"; + + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + subgroups::addNoSubgroupShader(programCollection); } } @@ -385,21 +351,6 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (areSubgroupOperationsRequiredForStage(caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } - if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_BALLOT_BIT)) { TCU_THROW(NotSupportedError, "Device does not support subgroup ballot operations"); @@ -408,54 +359,53 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { - return makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); - } - - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) - { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); } + return makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); } if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - return makeComputeTest( - context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkCompute); - } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - return makeFragmentTest( - context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkFragment); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - return makeVertexTest( - context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - return makeGeometryTest( - context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - return makeTessellationControlTest( - context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - return makeTessellationEvaluationTest( - context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); + if (!areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + return tcu::TestStatus::fail( + "Shader stage " + getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); + } + return makeComputeTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkCompute); } else { - TCU_THROW(InternalError, "Unhandled shader stage"); + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if ( VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); + + return subgroups::allStages(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages, stages); } } + tcu::TestCaseGroup* createSubgroupsBuiltinMaskVarTests(tcu::TestContext& testCtx) { de::MovePtr group(new tcu::TestCaseGroup( @@ -470,39 +420,33 @@ tcu::TestCaseGroup* createSubgroupsBuiltinMaskVarTests(tcu::TestContext& testCtx "SubgroupLtMask", }; - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT, - }; - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int a = 0; a < DE_LENGTH_OF_ARRAY(all_stages_vars); ++a) { - const VkShaderStageFlags stage = stages[stageIndex]; + const std::string var = all_stages_vars[a]; + const std::string varLower = de::toLower(var); - for (int a = 0; a < DE_LENGTH_OF_ARRAY(all_stages_vars); ++a) { - const std::string var = all_stages_vars[a]; - - CaseDefinition caseDef = {"gl_" + var, stage, false}; + const CaseDefinition caseDef = {"gl_" + var, VK_SHADER_STAGE_ALL_GRAPHICS, false}; + addFunctionCaseWithPrograms(group.get(), + varLower + "_graphic" , "", + initPrograms, test, caseDef); + } + { + const CaseDefinition caseDef = {"gl_" + var, VK_SHADER_STAGE_COMPUTE_BIT, false}; addFunctionCaseWithPrograms(group.get(), - de::toLower(var) + "_" + - getShaderStageName(stage), "", + varLower + "_" + + getShaderStageName(caseDef.shaderStage), "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), - de::toLower(var) + "_" + - getShaderStageName(stage)+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {"gl_" + var, VK_SHADER_STAGE_VERTEX_BIT, true}; + addFunctionCaseWithPrograms(group.get(), + varLower + "_" + + getShaderStageName(caseDef.shaderStage)+"_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } } diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp index e3a2481..5ef855f 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsBuiltinVarTests.cpp @@ -47,9 +47,7 @@ bool checkVertexPipelineStagesSubgroupSize(std::vector datas, deUint32 val = data[x * 4]; if (subgroupSize != val) - { return false; - } } return true; @@ -67,9 +65,7 @@ bool checkVertexPipelineStagesSubgroupInvocationID(std::vector data deUint32 subgroupInvocationID = data[(x * 4) + 1]; if (subgroupInvocationID >= subgroupSize) - { return false; - } subgroupInvocationHits[subgroupInvocationID]++; } @@ -83,69 +79,7 @@ bool checkVertexPipelineStagesSubgroupInvocationID(std::vector data } if (totalInvocationsRun != totalSize) - { return false; - } - - return true; -} - -static bool checkFragmentSubgroupSize(std::vector datas, - deUint32 width, deUint32 height, deUint32 subgroupSize) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[(x * height + y) * 4]; - - if (subgroupSize != val) - { - return false; - } - } - } - - return true; -} - -static bool checkFragmentSubgroupInvocationID( - std::vector datas, deUint32 width, deUint32 height, - deUint32 subgroupSize) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - vector subgroupInvocationHits(subgroupSize, 0); - - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 subgroupInvocationID = data[((x * height + y) * 4) + 1]; - - if (subgroupInvocationID >= subgroupSize) - { - return false; - } - - subgroupInvocationHits[subgroupInvocationID]++; - } - } - - const deUint32 totalSize = width * height; - - deUint32 totalInvocationsRun = 0; - for (deUint32 i = 0; i < subgroupSize; ++i) - { - totalInvocationsRun += subgroupInvocationHits[i]; - } - - if (totalInvocationsRun != totalSize) - { - return false; - } return true; } @@ -189,9 +123,7 @@ static bool checkComputeSubgroupSize(std::vector datas, globalInvocationX; if (subgroupSize != data[offset * 4]) - { return false; - } } } } @@ -247,9 +179,7 @@ static bool checkComputeSubgroupInvocationID(std::vector datas, deUint32 subgroupInvocationID = data[(offset * 4) + 1]; if (subgroupInvocationID >= subgroupSize) - { return false; - } subgroupInvocationHits[subgroupInvocationID]++; } @@ -263,9 +193,7 @@ static bool checkComputeSubgroupInvocationID(std::vector datas, } if (totalInvocationsRun != totalLocalSize) - { return false; - } } } } @@ -317,9 +245,7 @@ static bool checkComputeNumSubgroups(std::vector datas, deUint32 numSubgroups = data[(offset * 4) + 2]; if (numSubgroups > totalLocalSize) - { return false; - } } } } @@ -372,9 +298,7 @@ static bool checkComputeSubgroupID(std::vector datas, deUint32 subgroupID = data[(offset * 4) + 3]; if (subgroupID >= numSubgroups) - { return false; - } } } } @@ -456,122 +380,522 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_basic: enable\n" - << "layout(location = 0) out uvec4 data;\n" - << "void main (void)\n" - << "{\n" - << " data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_basic: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Output\n" - << "{\n" - << " uvec4 result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " result[gl_VertexIndex] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_basic: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Output\n" - << "{\n" - << " uvec4 result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; + { + /* + "#version 450\n" + "#extension GL_KHR_shader_subgroup_basic: enable\n" + "layout(set = 0, binding = 0, std430) buffer Output\n" + "{\n" + " uvec4 result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " result[gl_VertexIndex] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + */ + const string vertex = + "; SPIR-V\n" + "; Version: 1.3\n" + "; Generator: Khronos Glslang Reference Front End; 1\n" + "; Bound: 52\n" + "; Schema: 0\n" + "OpCapability Shader\n" + "OpCapability GroupNonUniform\n" + "%1 = OpExtInstImport \"GLSL.std.450\"\n" + "OpMemoryModel Logical GLSL450\n" + "OpEntryPoint Vertex %4 \"main\" %15 %18 %20 %41\n" + "OpDecorate %8 ArrayStride 16\n" + "OpMemberDecorate %9 0 Offset 0\n" + "OpDecorate %9 BufferBlock\n" + "OpDecorate %11 DescriptorSet 0\n" + "OpDecorate %11 Binding 0\n" + "OpDecorate %15 BuiltIn VertexIndex\n" + "OpDecorate %18 RelaxedPrecision\n" + "OpDecorate %18 BuiltIn SubgroupSize\n" + "OpDecorate %19 RelaxedPrecision\n" + "OpDecorate %20 RelaxedPrecision\n" + "OpDecorate %20 BuiltIn SubgroupLocalInvocationId\n" + "OpDecorate %21 RelaxedPrecision\n" + "OpMemberDecorate %39 0 BuiltIn Position\n" + "OpMemberDecorate %39 1 BuiltIn PointSize\n" + "OpMemberDecorate %39 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %39 3 BuiltIn CullDistance\n" + "OpDecorate %39 Block\n" + "%2 = OpTypeVoid\n" + "%3 = OpTypeFunction %2\n" + "%6 = OpTypeInt 32 0\n" + "%7 = OpTypeVector %6 4\n" + "%8 = OpTypeRuntimeArray %7\n" + "%9 = OpTypeStruct %8\n" + "%10 = OpTypePointer Uniform %9\n" + "%11 = OpVariable %10 Uniform\n" + "%12 = OpTypeInt 32 1\n" + "%13 = OpConstant %12 0\n" + "%14 = OpTypePointer Input %12\n" + "%15 = OpVariable %14 Input\n" + "%17 = OpTypePointer Input %6\n" + "%18 = OpVariable %17 Input\n" + "%20 = OpVariable %17 Input\n" + "%22 = OpConstant %6 0\n" + "%24 = OpTypePointer Uniform %7\n" + "%26 = OpTypeFloat 32\n" + "%27 = OpTypePointer Function %26\n" + "%29 = OpConstant %26 0.00195313\n" + "%32 = OpConstant %26 2\n" + "%34 = OpConstant %26 1\n" + "%36 = OpTypeVector %26 4\n" + "%37 = OpConstant %6 1\n" + "%38 = OpTypeArray %26 %37\n" + "%39 = OpTypeStruct %36 %26 %38 %38\n" + "%40 = OpTypePointer Output %39\n" + "%41 = OpVariable %40 Output\n" + "%48 = OpConstant %26 0\n" + "%50 = OpTypePointer Output %36\n" + "%4 = OpFunction %2 None %3\n" + "%5 = OpLabel\n" + "%28 = OpVariable %27 Function\n" + "%30 = OpVariable %27 Function\n" + "%16 = OpLoad %12 %15\n" + "%19 = OpLoad %6 %18\n" + "%21 = OpLoad %6 %20\n" + "%23 = OpCompositeConstruct %7 %19 %21 %22 %22\n" + "%25 = OpAccessChain %24 %11 %13 %16\n" + "OpStore %25 %23\n" + "OpStore %28 %29\n" + "%31 = OpLoad %26 %28\n" + "%33 = OpFDiv %26 %31 %32\n" + "%35 = OpFSub %26 %33 %34\n" + "OpStore %30 %35\n" + "%42 = OpLoad %12 %15\n" + "%43 = OpConvertSToF %26 %42\n" + "%44 = OpLoad %26 %28\n" + "%45 = OpFMul %26 %43 %44\n" + "%46 = OpLoad %26 %30\n" + "%47 = OpFAdd %26 %45 %46\n" + "%49 = OpCompositeConstruct %36 %47 %48 %48 %34\n" + "%51 = OpAccessChain %50 %41 %13\n" + "OpStore %51 %49\n" + "OpReturn\n" + "OpFunctionEnd\n"; + programCollection.spirvAsmSources.add("vert") << vertex << SpirVAsmBuildOptions(SPIRV_VERSION_1_3); - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_basic: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Output\n" - << "{\n" - << " uvec4 result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" - << "}\n"; + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + { + /* + "#version 450\n" + "#extension GL_KHR_shader_subgroup_basic: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Output\n" + "{\n" + " uvec4 result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + */ + const string tesc = + "; SPIR-V\n" + "; Version: 1.3\n" + "; Generator: Khronos Glslang Reference Front End; 1\n" + "; Bound: 61\n" + "; Schema: 0\n" + "OpCapability Tessellation\n" + "OpCapability GroupNonUniform\n" + "%1 = OpExtInstImport \"GLSL.std.450\"\n" + "OpMemoryModel Logical GLSL450\n" + "OpEntryPoint TessellationControl %4 \"main\" %15 %18 %20 %26 %36 %48 %54\n" + "OpExecutionMode %4 OutputVertices 1\n" + "OpDecorate %8 ArrayStride 16\n" + "OpMemberDecorate %9 0 Offset 0\n" + "OpDecorate %9 BufferBlock\n" + "OpDecorate %11 DescriptorSet 0\n" + "OpDecorate %11 Binding 1\n" + "OpDecorate %15 BuiltIn PrimitiveId\n" + "OpDecorate %18 RelaxedPrecision\n" + "OpDecorate %18 BuiltIn SubgroupSize\n" + "OpDecorate %19 RelaxedPrecision\n" + "OpDecorate %20 RelaxedPrecision\n" + "OpDecorate %20 BuiltIn SubgroupLocalInvocationId\n" + "OpDecorate %21 RelaxedPrecision\n" + "OpDecorate %26 BuiltIn InvocationId\n" + "OpDecorate %36 Patch\n" + "OpDecorate %36 BuiltIn TessLevelOuter\n" + "OpMemberDecorate %45 0 BuiltIn Position\n" + "OpMemberDecorate %45 1 BuiltIn PointSize\n" + "OpMemberDecorate %45 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %45 3 BuiltIn CullDistance\n" + "OpDecorate %45 Block\n" + "OpMemberDecorate %50 0 BuiltIn Position\n" + "OpMemberDecorate %50 1 BuiltIn PointSize\n" + "OpMemberDecorate %50 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %50 3 BuiltIn CullDistance\n" + "OpDecorate %50 Block\n" + "%2 = OpTypeVoid\n" + "%3 = OpTypeFunction %2\n" + "%6 = OpTypeInt 32 0\n" + "%7 = OpTypeVector %6 4\n" + "%8 = OpTypeRuntimeArray %7\n" + "%9 = OpTypeStruct %8\n" + "%10 = OpTypePointer Uniform %9\n" + "%11 = OpVariable %10 Uniform\n" + "%12 = OpTypeInt 32 1\n" + "%13 = OpConstant %12 0\n" + "%14 = OpTypePointer Input %12\n" + "%15 = OpVariable %14 Input\n" + "%17 = OpTypePointer Input %6\n" + "%18 = OpVariable %17 Input\n" + "%20 = OpVariable %17 Input\n" + "%22 = OpConstant %6 0\n" + "%24 = OpTypePointer Uniform %7\n" + "%26 = OpVariable %14 Input\n" + "%28 = OpTypeBool\n" + "%32 = OpTypeFloat 32\n" + "%33 = OpConstant %6 4\n" + "%34 = OpTypeArray %32 %33\n" + "%35 = OpTypePointer Output %34\n" + "%36 = OpVariable %35 Output\n" + "%37 = OpConstant %32 1\n" + "%38 = OpTypePointer Output %32\n" + "%40 = OpConstant %12 1\n" + "%42 = OpTypeVector %32 4\n" + "%43 = OpConstant %6 1\n" + "%44 = OpTypeArray %32 %43\n" + "%45 = OpTypeStruct %42 %32 %44 %44\n" + "%46 = OpTypeArray %45 %43\n" + "%47 = OpTypePointer Output %46\n" + "%48 = OpVariable %47 Output\n" + "%50 = OpTypeStruct %42 %32 %44 %44\n" + "%51 = OpConstant %6 32\n" + "%52 = OpTypeArray %50 %51\n" + "%53 = OpTypePointer Input %52\n" + "%54 = OpVariable %53 Input\n" + "%56 = OpTypePointer Input %42\n" + "%59 = OpTypePointer Output %42\n" + "%4 = OpFunction %2 None %3\n" + "%5 = OpLabel\n" + "%16 = OpLoad %12 %15\n" + "%19 = OpLoad %6 %18\n" + "%21 = OpLoad %6 %20\n" + "%23 = OpCompositeConstruct %7 %19 %21 %22 %22\n" + "%25 = OpAccessChain %24 %11 %13 %16\n" + "OpStore %25 %23\n" + "%27 = OpLoad %12 %26\n" + "%29 = OpIEqual %28 %27 %13\n" + "OpSelectionMerge %31 None\n" + "OpBranchConditional %29 %30 %31\n" + "%30 = OpLabel\n" + "%39 = OpAccessChain %38 %36 %13\n" + "OpStore %39 %37\n" + "%41 = OpAccessChain %38 %36 %40\n" + "OpStore %41 %37\n" + "OpBranch %31\n" + "%31 = OpLabel\n" + "%49 = OpLoad %12 %26\n" + "%55 = OpLoad %12 %26\n" + "%57 = OpAccessChain %56 %54 %55 %13\n" + "%58 = OpLoad %42 %57\n" + "%60 = OpAccessChain %59 %48 %49 %13\n" + "OpStore %60 %58\n" + "OpReturn\n" + "OpFunctionEnd\n"; + programCollection.spirvAsmSources.add("tesc") << tesc << SpirVAsmBuildOptions(SPIRV_VERSION_1_3); + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); + { + /* + "#version 450\n" + "#extension GL_KHR_shader_subgroup_basic: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Output\n" + "{\n" + " uvec4 result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + */ + const string tese = + "; SPIR-V\n" + "; Version: 1.3\n" + "; Generator: Khronos Glslang Reference Front End; 1\n" + "; Bound: 63\n" + "; Schema: 0\n" + "OpCapability Tessellation\n" + "OpCapability GroupNonUniform\n" + "%1 = OpExtInstImport \"GLSL.std.450\"\n" + "OpMemoryModel Logical GLSL450\n" + "OpEntryPoint TessellationEvaluation %4 \"main\" %15 %23 %33 %35 %45 %50\n" + "OpExecutionMode %4 Isolines\n" + "OpExecutionMode %4 SpacingEqual\n" + "OpExecutionMode %4 VertexOrderCcw\n" + "OpDecorate %8 ArrayStride 16\n" + "OpMemberDecorate %9 0 Offset 0\n" + "OpDecorate %9 BufferBlock\n" + "OpDecorate %11 DescriptorSet 0\n" + "OpDecorate %11 Binding 2\n" + "OpDecorate %15 BuiltIn PrimitiveId\n" + "OpDecorate %23 BuiltIn TessCoord\n" + "OpDecorate %33 RelaxedPrecision\n" + "OpDecorate %33 BuiltIn SubgroupSize\n" + "OpDecorate %34 RelaxedPrecision\n" + "OpDecorate %35 RelaxedPrecision\n" + "OpDecorate %35 BuiltIn SubgroupLocalInvocationId\n" + "OpDecorate %36 RelaxedPrecision\n" + "OpMemberDecorate %43 0 BuiltIn Position\n" + "OpMemberDecorate %43 1 BuiltIn PointSize\n" + "OpMemberDecorate %43 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %43 3 BuiltIn CullDistance\n" + "OpDecorate %43 Block\n" + "OpMemberDecorate %46 0 BuiltIn Position\n" + "OpMemberDecorate %46 1 BuiltIn PointSize\n" + "OpMemberDecorate %46 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %46 3 BuiltIn CullDistance\n" + "OpDecorate %46 Block\n" + "%2 = OpTypeVoid\n" + "%3 = OpTypeFunction %2\n" + "%6 = OpTypeInt 32 0\n" + "%7 = OpTypeVector %6 4\n" + "%8 = OpTypeRuntimeArray %7\n" + "%9 = OpTypeStruct %8\n" + "%10 = OpTypePointer Uniform %9\n" + "%11 = OpVariable %10 Uniform\n" + "%12 = OpTypeInt 32 1\n" + "%13 = OpConstant %12 0\n" + "%14 = OpTypePointer Input %12\n" + "%15 = OpVariable %14 Input\n" + "%17 = OpConstant %12 2\n" + "%20 = OpTypeFloat 32\n" + "%21 = OpTypeVector %20 3\n" + "%22 = OpTypePointer Input %21\n" + "%23 = OpVariable %22 Input\n" + "%24 = OpConstant %6 0\n" + "%25 = OpTypePointer Input %20\n" + "%28 = OpConstant %20 0.5\n" + "%32 = OpTypePointer Input %6\n" + "%33 = OpVariable %32 Input\n" + "%35 = OpVariable %32 Input\n" + "%38 = OpTypePointer Uniform %7\n" + "%40 = OpTypeVector %20 4\n" + "%41 = OpConstant %6 1\n" + "%42 = OpTypeArray %20 %41\n" + "%43 = OpTypeStruct %40 %20 %42 %42\n" + "%44 = OpTypePointer Output %43\n" + "%45 = OpVariable %44 Output\n" + "%46 = OpTypeStruct %40 %20 %42 %42\n" + "%47 = OpConstant %6 32\n" + "%48 = OpTypeArray %46 %47\n" + "%49 = OpTypePointer Input %48\n" + "%50 = OpVariable %49 Input\n" + "%51 = OpTypePointer Input %40\n" + "%54 = OpConstant %12 1\n" + "%61 = OpTypePointer Output %40\n" + "%4 = OpFunction %2 None %3\n" + "%5 = OpLabel\n" + "%16 = OpLoad %12 %15\n" + "%18 = OpIMul %12 %16 %17\n" + "%19 = OpBitcast %6 %18\n" + "%26 = OpAccessChain %25 %23 %24\n" + "%27 = OpLoad %20 %26\n" + "%29 = OpFAdd %20 %27 %28\n" + "%30 = OpConvertFToU %6 %29\n" + "%31 = OpIAdd %6 %19 %30\n" + "%34 = OpLoad %6 %33\n" + "%36 = OpLoad %6 %35\n" + "%37 = OpCompositeConstruct %7 %34 %36 %24 %24\n" + "%39 = OpAccessChain %38 %11 %13 %31\n" + "OpStore %39 %37\n" + "%52 = OpAccessChain %51 %50 %13 %13\n" + "%53 = OpLoad %40 %52\n" + "%55 = OpAccessChain %51 %50 %54 %13\n" + "%56 = OpLoad %40 %55\n" + "%57 = OpAccessChain %25 %23 %24\n" + "%58 = OpLoad %20 %57\n" + "%59 = OpCompositeConstruct %40 %58 %58 %58 %58\n" + "%60 = OpExtInst %40 %1 FMix %53 %56 %59\n" + "%62 = OpAccessChain %61 %45 %13\n" + "OpStore %62 %60\n" + "OpReturn\n" + "OpFunctionEnd\n"; + programCollection.spirvAsmSources.add("tese") << tese << SpirVAsmBuildOptions(SPIRV_VERSION_1_3); + } - std::ostringstream src; + { + /* + "#version 450\n" + "#extension GL_KHR_shader_subgroup_basic: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Output\n" + "{\n" + " uvec4 result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + */ + const string geometry = + "; SPIR-V\n" + "; Version: 1.3\n" + "; Generator: Khronos Glslang Reference Front End; 1\n" + "; Bound: 42\n" + "; Schema: 0\n" + "OpCapability Geometry\n" + "OpCapability GroupNonUniform\n" + "%1 = OpExtInstImport \"GLSL.std.450\"\n" + "OpMemoryModel Logical GLSL450\n" + "OpEntryPoint Geometry %4 \"main\" %15 %18 %20 %32 %36\n" + "OpExecutionMode %4 InputPoints\n" + "OpExecutionMode %4 Invocations 1\n" + "OpExecutionMode %4 OutputPoints\n" + "OpExecutionMode %4 OutputVertices 1\n" + "OpDecorate %8 ArrayStride 16\n" + "OpMemberDecorate %9 0 Offset 0\n" + "OpDecorate %9 BufferBlock\n" + "OpDecorate %11 DescriptorSet 0\n" + "OpDecorate %11 Binding 3\n" + "OpDecorate %15 BuiltIn PrimitiveId\n" + "OpDecorate %18 RelaxedPrecision\n" + "OpDecorate %18 BuiltIn SubgroupSize\n" + "OpDecorate %19 RelaxedPrecision\n" + "OpDecorate %20 RelaxedPrecision\n" + "OpDecorate %20 BuiltIn SubgroupLocalInvocationId\n" + "OpDecorate %21 RelaxedPrecision\n" + "OpMemberDecorate %30 0 BuiltIn Position\n" + "OpMemberDecorate %30 1 BuiltIn PointSize\n" + "OpMemberDecorate %30 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %30 3 BuiltIn CullDistance\n" + "OpDecorate %30 Block\n" + "OpMemberDecorate %33 0 BuiltIn Position\n" + "OpMemberDecorate %33 1 BuiltIn PointSize\n" + "OpMemberDecorate %33 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %33 3 BuiltIn CullDistance\n" + "OpDecorate %33 Block\n" + "%2 = OpTypeVoid\n" + "%3 = OpTypeFunction %2\n" + "%6 = OpTypeInt 32 0\n" + "%7 = OpTypeVector %6 4\n" + "%8 = OpTypeRuntimeArray %7\n" + "%9 = OpTypeStruct %8\n" + "%10 = OpTypePointer Uniform %9\n" + "%11 = OpVariable %10 Uniform\n" + "%12 = OpTypeInt 32 1\n" + "%13 = OpConstant %12 0\n" + "%14 = OpTypePointer Input %12\n" + "%15 = OpVariable %14 Input\n" + "%17 = OpTypePointer Input %6\n" + "%18 = OpVariable %17 Input\n" + "%20 = OpVariable %17 Input\n" + "%22 = OpConstant %6 0\n" + "%24 = OpTypePointer Uniform %7\n" + "%26 = OpTypeFloat 32\n" + "%27 = OpTypeVector %26 4\n" + "%28 = OpConstant %6 1\n" + "%29 = OpTypeArray %26 %28\n" + "%30 = OpTypeStruct %27 %26 %29 %29\n" + "%31 = OpTypePointer Output %30\n" + "%32 = OpVariable %31 Output\n" + "%33 = OpTypeStruct %27 %26 %29 %29\n" + "%34 = OpTypeArray %33 %28\n" + "%35 = OpTypePointer Input %34\n" + "%36 = OpVariable %35 Input\n" + "%37 = OpTypePointer Input %27\n" + "%40 = OpTypePointer Output %27\n" + "%4 = OpFunction %2 None %3\n" + "%5 = OpLabel\n" + "%16 = OpLoad %12 %15\n" + "%19 = OpLoad %6 %18\n" + "%21 = OpLoad %6 %20\n" + "%23 = OpCompositeConstruct %7 %19 %21 %22 %22\n" + "%25 = OpAccessChain %24 %11 %13 %16\n" + "OpStore %25 %23\n" + "%38 = OpAccessChain %37 %36 %13 %13\n" + "%39 = OpLoad %27 %38\n" + "%41 = OpAccessChain %40 %32 %13\n" + "OpStore %41 %39\n" + "OpEmitVertex\n" + "OpEndPrimitive\n" + "OpReturn\n" + "OpFunctionEnd\n"; + programCollection.spirvAsmSources.add("geometry") << geometry << SpirVAsmBuildOptions(SPIRV_VERSION_1_3); + } - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_basic: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Output\n" - << "{\n" - << " uvec4 result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" - << "}\n"; + { + /* + "#version 450\n" + "#extension GL_KHR_shader_subgroup_basic: enable\n" + "layout(location = 0) out uvec4 data;\n" + "void main (void)\n" + "{\n" + " data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);\n" + "}\n"; + */ + const string fragment = + "; SPIR-V\n" + "; Version: 1.3\n" + "; Generator: Khronos Glslang Reference Front End; 1\n" + "; Bound: 17\n" + "; Schema: 0\n" + "OpCapability Shader\n" + "OpCapability GroupNonUniform\n" + "%1 = OpExtInstImport \"GLSL.std.450\"\n" + "OpMemoryModel Logical GLSL450\n" + "OpEntryPoint Fragment %4 \"main\" %9 %11 %13\n" + "OpExecutionMode %4 OriginUpperLeft\n" + "OpDecorate %9 Location 0\n" + "OpDecorate %11 RelaxedPrecision\n" + "OpDecorate %11 Flat\n" + "OpDecorate %11 BuiltIn SubgroupSize\n" + "OpDecorate %12 RelaxedPrecision\n" + "OpDecorate %13 RelaxedPrecision\n" + "OpDecorate %13 Flat\n" + "OpDecorate %13 BuiltIn SubgroupLocalInvocationId\n" + "OpDecorate %14 RelaxedPrecision\n" + "%2 = OpTypeVoid\n" + "%3 = OpTypeFunction %2\n" + "%6 = OpTypeInt 32 0\n" + "%7 = OpTypeVector %6 4\n" + "%8 = OpTypePointer Output %7\n" + "%9 = OpVariable %8 Output\n" + "%10 = OpTypePointer Input %6\n" + "%11 = OpVariable %10 Input\n" + "%13 = OpVariable %10 Input\n" + "%15 = OpConstant %6 0\n" + "%4 = OpFunction %2 None %3\n" + "%5 = OpLabel\n" + "%12 = OpLoad %6 %11\n" + "%14 = OpLoad %6 %13\n" + "%16 = OpCompositeConstruct %7 %12 %14 %15 %15\n" + "OpStore %9 %16\n" + "OpReturn\n" + "OpFunctionEnd\n"; + + programCollection.spirvAsmSources.add("fragment") << fragment << SpirVAsmBuildOptions(SPIRV_VERSION_1_3); + } - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + subgroups::addNoSubgroupShader(programCollection); } } @@ -580,161 +904,88 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) + //Tests which don't use the SSBO + if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { - if (areSubgroupOperationsRequiredForStage(caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else + if (!areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); } - } - //Tests which don't use the SSBO - if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { if ("gl_SubgroupSize" == caseDef.varName) { - return makeVertexFrameBufferTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupSize); + return makeVertexFrameBufferTest(context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupSize); } else if ("gl_SubgroupInvocationID" == caseDef.varName) { - return makeVertexFrameBufferTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupInvocationID); + return makeVertexFrameBufferTest(context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupInvocationID); } } - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return tcu::TestStatus::fail( + "Shader stage " + getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } - } - if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) - { if ("gl_SubgroupSize" == caseDef.varName) { - return makeComputeTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkComputeSubgroupSize); + return makeComputeTest(context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkComputeSubgroupSize); } else if ("gl_SubgroupInvocationID" == caseDef.varName) { - return makeComputeTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkComputeSubgroupInvocationID); + return makeComputeTest(context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkComputeSubgroupInvocationID); } else if ("gl_NumSubgroups" == caseDef.varName) { - return makeComputeTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkComputeNumSubgroups); + return makeComputeTest(context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkComputeNumSubgroups); } else if ("gl_SubgroupID" == caseDef.varName) { - return makeComputeTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkComputeSubgroupID); - } - else - { - return tcu::TestStatus::fail( - caseDef.varName + " failed (unhandled error checking case " + - caseDef.varName + ")!"); - } - } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - if ("gl_SubgroupSize" == caseDef.varName) - { - return makeFragmentTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkFragmentSubgroupSize); - } - else if ("gl_SubgroupInvocationID" == caseDef.varName) - { - return makeFragmentTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkFragmentSubgroupInvocationID); + return makeComputeTest(context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkComputeSubgroupID); } else { return tcu::TestStatus::fail( - caseDef.varName + " failed (unhandled error checking case " + - caseDef.varName + ")!"); + caseDef.varName + " failed (unhandled error checking case " + + caseDef.varName + ")!"); } } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - if ("gl_SubgroupSize" == caseDef.varName) - { - return makeVertexTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupSize); - } - else if ("gl_SubgroupInvocationID" == caseDef.varName) - { - return makeVertexTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupInvocationID); - } - else - { - return tcu::TestStatus::fail( - caseDef.varName + " failed (unhandled error checking case " + - caseDef.varName + ")!"); - } - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - if ("gl_SubgroupSize" == caseDef.varName) - { - return makeGeometryTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupSize); - } - else if ("gl_SubgroupInvocationID" == caseDef.varName) - { - return makeGeometryTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupInvocationID); - } - else - { - return tcu::TestStatus::fail( - caseDef.varName + " failed (unhandled error checking case " + - caseDef.varName + ")!"); - } - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) + else { - if ("gl_SubgroupSize" == caseDef.varName) - { - return makeTessellationControlTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupSize); - } - else if ("gl_SubgroupInvocationID" == caseDef.varName) - { - return makeTessellationControlTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupInvocationID); - } - else + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if (VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) { - return tcu::TestStatus::fail( - caseDef.varName + " failed (unhandled error checking case " + - caseDef.varName + ")!"); + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; } - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); + if ("gl_SubgroupSize" == caseDef.varName) { - return makeTessellationEvaluationTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupSize); + return subgroups::allStages(context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupSize, stages); } else if ("gl_SubgroupInvocationID" == caseDef.varName) { - return makeTessellationEvaluationTest( - context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupInvocationID); + return subgroups::allStages(context, VK_FORMAT_R32G32B32A32_UINT, DE_NULL, 0, checkVertexPipelineStagesSubgroupInvocationID, stages); } else { @@ -743,10 +994,6 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) caseDef.varName + ")!"); } } - else - { - TCU_THROW(InternalError, "Unhandled shader stage"); - } } tcu::TestCaseGroup* createSubgroupsBuiltinVarTests(tcu::TestContext& testCtx) @@ -766,51 +1013,43 @@ tcu::TestCaseGroup* createSubgroupsBuiltinVarTests(tcu::TestContext& testCtx) "SubgroupID" }; - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT, - }; - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int a = 0; a < DE_LENGTH_OF_ARRAY(all_stages_vars); ++a) { - const VkShaderStageFlags stage = stages[stageIndex]; + const std::string var = all_stages_vars[a]; + const std::string varLower = de::toLower(var); - for (int a = 0; a < DE_LENGTH_OF_ARRAY(all_stages_vars); ++a) { - const std::string var = all_stages_vars[a]; - - CaseDefinition caseDef = {"gl_" + var, stage, false}; + const CaseDefinition caseDef = { "gl_" + var, VK_SHADER_STAGE_ALL_GRAPHICS, false}; addFunctionCaseWithPrograms(group.get(), - de::toLower(var) + "_" + - getShaderStageName(stage), "", + varLower + "_graphic", "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), - de::toLower(var) + "_" + - getShaderStageName(stage)+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {"gl_" + var, VK_SHADER_STAGE_COMPUTE_BIT, false}; + addFunctionCaseWithPrograms(group.get(), + varLower + "_" + getShaderStageName(caseDef.shaderStage), "", + initPrograms, test, caseDef); + } + + { + const CaseDefinition caseDef = {"gl_" + var, VK_SHADER_STAGE_VERTEX_BIT, true}; + addFunctionCaseWithPrograms(group.get(), + varLower + "_" + getShaderStageName(caseDef.shaderStage)+"_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } } for (int a = 0; a < DE_LENGTH_OF_ARRAY(compute_only_vars); ++a) { - const VkShaderStageFlags stage = VK_SHADER_STAGE_COMPUTE_BIT; const std::string var = compute_only_vars[a]; - CaseDefinition caseDef = {"gl_" + var, stage, false}; + const CaseDefinition caseDef = {"gl_" + var, VK_SHADER_STAGE_COMPUTE_BIT, false}; addFunctionCaseWithPrograms(group.get(), de::toLower(var) + - "_" + getShaderStageName(stage), "", + "_" + getShaderStageName(caseDef.shaderStage), "", initPrograms, test, caseDef); } diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp index 37f37af..0731756 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsClusteredTests.cpp @@ -65,27 +65,6 @@ static bool checkVertexPipelineStages(std::vector datas, return true; } -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[x * height + y]; - - if (0x1 != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -532,157 +511,144 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_clustered: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(location = 0) out uint result;\n" - << "layout(set = 0, binding = 0, std430) readonly buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result = tempResult ? 1 : 0;\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_clustered: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_VertexIndex] = tempResult ? 1 : 0;\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_clustered: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveIDIn] = tempResult ? 1 : 0;\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_clustered: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveID] = tempResult ? 1 : 0;\n" - << "}\n"; + { + const string vertex = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_clustered: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result[gl_VertexIndex] = tempResult ? 1 : 0;\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + + programCollection.glslSources.add("vert") + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + { + const string tesc = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_clustered: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result[gl_PrimitiveID] = tempResult ? 1 : 0;\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + + programCollection.glslSources.add("tesc") + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); + { + const string tese = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_clustered: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult ? 1 : 0;\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + programCollection.glslSources.add("tese") + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - std::ostringstream src; + { + const string geometry = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_clustered: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result[gl_PrimitiveIDIn] = tempResult ? 1 : 0;\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_clustered: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << bdy.str() - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = tempResult ? 1 : 0;\n" - << "}\n"; + { + const string fragment = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_clustered: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(location = 0) out uint result;\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + bdy.str() + + " result = tempResult ? 1 : 0;\n" + "}\n"; + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + subgroups::addNoSubgroupShader(programCollection); } } @@ -691,30 +657,12 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (subgroups::areSubgroupOperationsRequiredForStage( - caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } - if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_CLUSTERED_BIT)) { TCU_THROW(NotSupportedError, "Device does not support subgroup clustered operations"); } - if (subgroups::isDoubleFormat(caseDef.format) && - !subgroups::isDoubleSupportedForDevice(context)) + if (subgroups::isDoubleFormat(caseDef.format) && !subgroups::isDoubleSupportedForDevice(context)) { TCU_THROW(NotSupportedError, "Device does not support subgroup double operations"); } @@ -722,6 +670,10 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); + } subgroups::SSBOData inputData; inputData.format = caseDef.format; inputData.numElements = subgroups::maxSupportedSubgroupSize(); @@ -730,78 +682,55 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, &inputData, 1, checkVertexPipelineStages); } - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } - } - - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData; inputData.format = caseDef.format; inputData.numElements = subgroups::maxSupportedSubgroupSize(); inputData.initializeType = subgroups::SSBOData::InitializeNonZero; - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkFragment); + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, &inputData, 1, checkCompute); } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) + else { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkCompute); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if (VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.format = caseDef.format; + inputData.numElements = subgroups::maxSupportedSubgroupSize(); + inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.binding = 4u; + inputData.stages = stages; - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else - { - return tcu::TestStatus::pass("Unhandled shader stage!"); + return subgroups::allStages(context, VK_FORMAT_R32_UINT, &inputData, 1, checkVertexPipelineStages, stages); } } } @@ -815,16 +744,6 @@ tcu::TestCaseGroup* createSubgroupsClusteredTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "clustered", "Subgroup clustered category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - const VkFormat formats[] = { VK_FORMAT_R32_SINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32B32_SINT, @@ -838,85 +757,81 @@ tcu::TestCaseGroup* createSubgroupsClusteredTests(tcu::TestContext& testCtx) VK_FORMAT_R8G8B8_USCALED, VK_FORMAT_R8G8B8A8_USCALED, }; - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; + const VkFormat format = formats[formatIndex]; - for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_CLUSTERED_LAST; ++opTypeIndex) { - const VkFormat format = formats[formatIndex]; + bool isBool = false; + bool isFloat = false; - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_CLUSTERED_LAST; ++opTypeIndex) + switch (format) { - bool isBool = false; - bool isFloat = false; - - switch (format) - { - default: - break; - case VK_FORMAT_R32_SFLOAT: - case VK_FORMAT_R32G32_SFLOAT: - case VK_FORMAT_R32G32B32_SFLOAT: - case VK_FORMAT_R32G32B32A32_SFLOAT: - case VK_FORMAT_R64_SFLOAT: - case VK_FORMAT_R64G64_SFLOAT: - case VK_FORMAT_R64G64B64_SFLOAT: - case VK_FORMAT_R64G64B64A64_SFLOAT: - isFloat = true; - break; - case VK_FORMAT_R8_USCALED: - case VK_FORMAT_R8G8_USCALED: - case VK_FORMAT_R8G8B8_USCALED: - case VK_FORMAT_R8G8B8A8_USCALED: - isBool = true; - break; - } - - bool isBitwiseOp = false; - - switch (opTypeIndex) - { - default: - break; - case OPTYPE_CLUSTERED_AND: - case OPTYPE_CLUSTERED_OR: - case OPTYPE_CLUSTERED_XOR: - isBitwiseOp = true; - break; - } + default: + break; + case VK_FORMAT_R32_SFLOAT: + case VK_FORMAT_R32G32_SFLOAT: + case VK_FORMAT_R32G32B32_SFLOAT: + case VK_FORMAT_R32G32B32A32_SFLOAT: + case VK_FORMAT_R64_SFLOAT: + case VK_FORMAT_R64G64_SFLOAT: + case VK_FORMAT_R64G64B64_SFLOAT: + case VK_FORMAT_R64G64B64A64_SFLOAT: + isFloat = true; + break; + case VK_FORMAT_R8_USCALED: + case VK_FORMAT_R8G8_USCALED: + case VK_FORMAT_R8G8B8_USCALED: + case VK_FORMAT_R8G8B8A8_USCALED: + isBool = true; + break; + } - if (isFloat && isBitwiseOp) - { - // Skip float with bitwise category. - continue; - } + bool isBitwiseOp = false; - if (isBool && !isBitwiseOp) - { - // Skip bool when its not the bitwise category. - continue; - } + switch (opTypeIndex) + { + default: + break; + case OPTYPE_CLUSTERED_AND: + case OPTYPE_CLUSTERED_OR: + case OPTYPE_CLUSTERED_XOR: + isBitwiseOp = true; + break; + } - CaseDefinition caseDef = {opTypeIndex, stage, format, false}; + if (isFloat && isBitwiseOp) + { + // Skip float with bitwise category. + continue; + } - std::ostringstream name; + if (isBool && !isBitwiseOp) + { + // Skip bool when its not the bitwise category. + continue; + } - std::string op = getOpTypeName(opTypeIndex); + const std::string name = de::toLower(getOpTypeName(opTypeIndex)) + +"_" + subgroups::getFormatNameForGLSL(format); - name << de::toLower(op) - << "_" << subgroups::getFormatNameForGLSL(format) - << "_" << getShaderStageName(stage); + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, format, false}; + addFunctionCaseWithPrograms(group.get(), name+"_" + getShaderStageName(caseDef.shaderStage), + "", initPrograms, test, caseDef); + } - addFunctionCaseWithPrograms(group.get(), name.str(), - "", initPrograms, test, caseDef); + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_ALL_GRAPHICS, format, false}; + addFunctionCaseWithPrograms(group.get(), name+"_graphic", + "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, format, true}; + addFunctionCaseWithPrograms(group.get(), name+"_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } } } diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp index 2df51cc..77231c2 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsQuadTests.cpp @@ -62,27 +62,6 @@ static bool checkVertexPipelineStages(std::vector datas, return true; } -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[x * height + y]; - - if (0x1 != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -294,74 +273,9 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_quad: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(location = 0) out uint result;\n" - << "layout(set = 0, binding = 0, std430) readonly buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << swapTable[caseDef.opType]; - - if (OPTYPE_QUAD_BROADCAST == caseDef.opType) - { - frag << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID], " << caseDef.direction << ");\n" - << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + " << caseDef.direction << ";\n"; - - } - else - { - frag << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID]);\n" - << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + swapTable[gl_SubgroupInvocationID & 0x3];\n"; - } - - frag << " if (subgroupBallotBitExtract(mask, otherID))\n" - << " {\n" - << " result = (op == data[otherID]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) + else { std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_quad: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << swapTable[caseDef.opType]; - if (OPTYPE_QUAD_BROADCAST == caseDef.opType) { src << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " @@ -374,183 +288,181 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID]);\n" << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + swapTable[gl_SubgroupInvocationID & 0x3];\n"; } + const string sourceType = src.str(); - src << " if (subgroupBallotBitExtract(mask, otherID))\n" - << " {\n" - << " result[gl_VertexIndex] = (op == data[otherID]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result[gl_VertexIndex] = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_quad: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << swapTable[caseDef.opType]; - - if (OPTYPE_QUAD_BROADCAST == caseDef.opType) - { - src << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID], " << caseDef.direction << ");\n" - << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + " << caseDef.direction << ";\n"; - } - else { - src << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID]);\n" - << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + swapTable[gl_SubgroupInvocationID & 0x3];\n"; + const string vertex = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_quad: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + swapTable[caseDef.opType] + + sourceType + + " if (subgroupBallotBitExtract(mask, otherID))\n" + " {\n" + " result[gl_VertexIndex] = (op == data[otherID]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result[gl_VertexIndex] = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + programCollection.glslSources.add("vert") + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - src << " if (subgroupBallotBitExtract(mask, otherID))\n" - << " {\n" - << " result[gl_PrimitiveIDIn] = (op == data[otherID]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result[gl_PrimitiveIDIn] = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_quad: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << swapTable[caseDef.opType]; - - if (OPTYPE_QUAD_BROADCAST == caseDef.opType) { - src << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID], " << caseDef.direction << ");\n" - << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + " << caseDef.direction << ";\n"; + const string tesc = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_quad: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + swapTable[caseDef.opType] + + sourceType + + " if (subgroupBallotBitExtract(mask, otherID))\n" + " {\n" + " result[gl_PrimitiveID] = (op == data[otherID]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result[gl_PrimitiveID] = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + programCollection.glslSources.add("tesc") + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else + { - src << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID]);\n" - << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + swapTable[gl_SubgroupInvocationID & 0x3];\n"; + const string tese = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_quad: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + swapTable[caseDef.opType] + + sourceType + + " if (subgroupBallotBitExtract(mask, otherID))\n" + " {\n" + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = (op == data[otherID]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + programCollection.glslSources.add("tese") + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - src << " if (subgroupBallotBitExtract(mask, otherID))\n" - << " {\n" - << " result[gl_PrimitiveID] = (op == data[otherID]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result[gl_PrimitiveID] = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_quad: enable\n" - << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << swapTable[caseDef.opType]; - - if (OPTYPE_QUAD_BROADCAST == caseDef.opType) { - src << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID], " << caseDef.direction << ");\n" - << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + " << caseDef.direction << ";\n"; + const string geometry = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_quad: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + swapTable[caseDef.opType] + + sourceType + + " if (subgroupBallotBitExtract(mask, otherID))\n" + " {\n" + " result[gl_PrimitiveIDIn] = (op == data[otherID]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result[gl_PrimitiveIDIn] = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else + { - src << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data[gl_SubgroupInvocationID]);\n" - << " uint otherID = (gl_SubgroupInvocationID & ~0x3) + swapTable[gl_SubgroupInvocationID & 0x3];\n"; + const string fragment = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_quad: enable\n" + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(location = 0) out uint result;\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data[];\n" + "};\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + + swapTable[caseDef.opType] + + sourceType + + " if (subgroupBallotBitExtract(mask, otherID))\n" + " {\n" + " result = (op == data[otherID]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + "}\n"; + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - - src << " if (subgroupBallotBitExtract(mask, otherID))\n" - << " {\n" - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = (op == data[otherID]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + subgroups::addNoSubgroupShader(programCollection); } } @@ -559,30 +471,12 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (subgroups::areSubgroupOperationsRequiredForStage( - caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } - if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_QUAD_BIT)) { TCU_THROW(NotSupportedError, "Device does not support subgroup quad operations"); } - if (subgroups::isDoubleFormat(caseDef.format) && - !subgroups::isDoubleSupportedForDevice(context)) + if (subgroups::isDoubleFormat(caseDef.format) && !subgroups::isDoubleSupportedForDevice(context)) { TCU_THROW(NotSupportedError, "Device does not support subgroup double operations"); } @@ -590,6 +484,10 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); + } subgroups::SSBOData inputData; inputData.format = caseDef.format; inputData.numElements = subgroups::maxSupportedSubgroupSize(); @@ -598,78 +496,55 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, &inputData, 1, checkVertexPipelineStages); } - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } - } - - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData; inputData.format = caseDef.format; inputData.numElements = subgroups::maxSupportedSubgroupSize(); inputData.initializeType = subgroups::SSBOData::InitializeNonZero; - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkFragment); + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, &inputData, 1, checkCompute); } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) + else { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkCompute); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if (VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.format = caseDef.format; + inputData.numElements = subgroups::maxSupportedSubgroupSize(); + inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.binding = 4u; + inputData.stages = stages; - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else - { - TCU_THROW(InternalError, "Unhandled shader stage"); + return subgroups::allStages(context, VK_FORMAT_R32_UINT, &inputData, 1, checkVertexPipelineStages, stages); } } } @@ -683,16 +558,6 @@ tcu::TestCaseGroup* createSubgroupsQuadTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "quad", "Subgroup quad category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - const VkFormat formats[] = { VK_FORMAT_R32_SINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32B32_SINT, @@ -708,51 +573,54 @@ tcu::TestCaseGroup* createSubgroupsQuadTests(tcu::TestContext& testCtx) for (int direction = 0; direction < 4; ++direction) { - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; + const VkFormat format = formats[formatIndex]; - for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - const VkFormat format = formats[formatIndex]; + const std::string op = de::toLower(getOpTypeName(opTypeIndex)); + std::ostringstream name; + name << de::toLower(op); - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) + if (OPTYPE_QUAD_BROADCAST == opTypeIndex) { - CaseDefinition caseDef = {opTypeIndex, stage, format, direction, false}; - - std::ostringstream name; - - std::string op = getOpTypeName(opTypeIndex); - - name << de::toLower(op); - - if (OPTYPE_QUAD_BROADCAST == opTypeIndex) - { - name << "_" << direction; - } - else + name << "_" << direction; + } + else + { + if (0 != direction) { - if (0 != direction) - { - // We don't need direction for swap operations. - continue; - } + // We don't need direction for swap operations. + continue; } + } - name << "_" << subgroups::getFormatNameForGLSL(format) - << "_" << getShaderStageName(stage); + name << "_" << subgroups::getFormatNameForGLSL(format); - addFunctionCaseWithPrograms(group.get(), name.str(), - "", initPrograms, test, caseDef); + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, format, direction, false}; + addFunctionCaseWithPrograms(group.get(), name.str()+"_"+ getShaderStageName(caseDef.shaderStage), "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage ) + { + const CaseDefinition caseDef = { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + opTypeIndex, + VK_SHADER_STAGE_ALL_GRAPHICS, + format, + direction, + false + }; + addFunctionCaseWithPrograms(group.get(), name.str()+"_graphic", "", initPrograms, test, caseDef); + } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, format, direction, true}; + addFunctionCaseWithPrograms(group.get(), name.str()+"_"+ getShaderStageName(caseDef.shaderStage)+"_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } + } } } diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp index ae14014..73aeec6 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShapeTests.cpp @@ -35,26 +35,6 @@ using namespace vkt; namespace { -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* const resultData = reinterpret_cast(datas[0]); - - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = resultData[(x * height + y)]; - - if (0x1 != val) - { - return false; - } - } - } - - return true; -} static bool checkVertexPipelineStages(std::vector datas, deUint32 width, deUint32) @@ -336,127 +316,116 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << extension - << "layout(location = 0) out uint result;\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n" - << extension - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_VertexIndex] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n" - << extension - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveIDIn] = tempResult;\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n" - << extension - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveID] = 1;\n" - << "}\n"; - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + { + const string vertex = + "#version 450\n" + + extension + + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result[gl_VertexIndex] = tempResult;\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + + programCollection.glslSources.add("vert") + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); + { + const string tesc = + "#version 450\n" + + extension + + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result[gl_PrimitiveID] = 1;\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + + programCollection.glslSources.add("tesc") + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - std::ostringstream src; + { + const string tese = + "#version 450\n" + + extension + + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = 1;\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + + programCollection.glslSources.add("tese") + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - src << "#version 450\n" - << extension - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << bdy.str() - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = 1;\n" - << "}\n"; + { + const string geometry = + "#version 450\n" + + extension + + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result[gl_PrimitiveIDIn] = tempResult;\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + { + const string fragment = + "#version 450\n" + + extension + + "layout(location = 0) out uint result;\n" + "void main (void)\n" + "{\n" + + bdy.str() + + " result = tempResult;\n" + "}\n"; + + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); + } + subgroups::addNoSubgroupShader(programCollection); } } @@ -465,23 +434,6 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (subgroups::areSubgroupOperationsRequiredForStage( - caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } - if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_BASIC_BIT)) { return tcu::TestStatus::fail( @@ -514,51 +466,50 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { - return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); - } - - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) - { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); } + return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages); } - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkFragment); - } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) - { - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkCompute); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, - DE_NULL, 0, checkVertexPipelineStages); + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); + } + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkCompute); } else { - TCU_THROW(InternalError, "Unhandled shader stage"); + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if (VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); + + return subgroups::allStages(context, VK_FORMAT_R32_UINT, DE_NULL, 0, checkVertexPipelineStages, stages); } } } @@ -572,36 +523,33 @@ tcu::TestCaseGroup* createSubgroupsShapeTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "shape", "Subgroup shape category tests")); - const VkShaderStageFlags stages[] = + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) - { - const VkShaderStageFlags stage = stages[stageIndex]; + const std::string op = de::toLower(getOpTypeName(opTypeIndex)); - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - CaseDefinition caseDef = {opTypeIndex, stage, false}; - - std::string op = getOpTypeName(opTypeIndex); - + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, false}; addFunctionCaseWithPrograms(group.get(), - de::toLower(op) + "_" + getShaderStageName(stage), "", - initPrograms, test, caseDef); + op + "_" + getShaderStageName(caseDef.shaderStage), "", + initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT & stage ) + { + const CaseDefinition caseDef = { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), de::toLower(op) + "_" + getShaderStageName(stage) + "_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + opTypeIndex, + VK_SHADER_STAGE_ALL_GRAPHICS, + false + }; + addFunctionCaseWithPrograms(group.get(), + op + "_graphic", "", + initPrograms, test, caseDef); + } + + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, true}; + addFunctionCaseWithPrograms(group.get(),op + "_" + getShaderStageName(caseDef.shaderStage) + "_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } } diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp index 119a7d9..322bfb4 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsShuffleTests.cpp @@ -62,27 +62,6 @@ static bool checkVertexPipelineStages(std::vector datas, return true; } -static bool checkFragment(std::vector datas, - deUint32 width, deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[x * height + y]; - - if (0x1 != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -297,277 +276,217 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) + else { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; + const std::string source = + (OPTYPE_SHUFFLE == caseDef.opType || OPTYPE_SHUFFLE_XOR == caseDef.opType) ? + "#extension GL_KHR_shader_subgroup_shuffle: enable\n" + : + "#extension GL_KHR_shader_subgroup_shuffle_relative: enable\n"; - frag << "#version 450\n"; - - switch (caseDef.opType) { - case OPTYPE_SHUFFLE: - case OPTYPE_SHUFFLE_XOR: - frag << "#extension GL_KHR_shader_subgroup_shuffle: enable\n"; - break; - default: - frag << "#extension GL_KHR_shader_subgroup_shuffle_relative: enable\n"; - break; + const string vertex = + "#version 450\n" + + source + + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "layout(set = 0, binding = 5, std430) readonly buffer Buffer3\n" + "{\n" + " uint data2[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " op = " + + getOpTypeName(caseDef.opType) + "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" + " uint id = " + idTable[caseDef.opType] + ";\n" + " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" + " {\n" + " result[gl_VertexIndex] = (op == data1[id]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result[gl_VertexIndex] = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + + programCollection.glslSources.add("vert") + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - frag << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(location = 0) out uint result;\n" - << "layout(set = 0, binding = 0, std430) readonly buffer Buffer1\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) readonly buffer Buffer2\n" - << "{\n" - << " uint data2[];\n" - << "};\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" - << " uint id = " << idTable[caseDef.opType] << ";\n" - << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" - << " {\n" - << " result = (op == data1[id]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - std::ostringstream src; - - src << "#version 450\n"; - - switch (caseDef.opType) { - case OPTYPE_SHUFFLE: - case OPTYPE_SHUFFLE_XOR: - src << "#extension GL_KHR_shader_subgroup_shuffle: enable\n"; - break; - default: - src << "#extension GL_KHR_shader_subgroup_shuffle_relative: enable\n"; - break; + const string tesc = + "#version 450\n" + + source + + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "layout(set = 0, binding = 5, std430) readonly buffer Buffer3\n" + "{\n" + " uint data2[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " op = " + + getOpTypeName(caseDef.opType) + "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" + " uint id = " + idTable[caseDef.opType] + ";\n" + " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" + " {\n" + " result[gl_PrimitiveID] = (op == data1[id]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result[gl_PrimitiveID] = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + + programCollection.glslSources.add("tesc") + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - src << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "layout(set = 0, binding = 2, std430) buffer Buffer3\n" - << "{\n" - << " uint data2[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" - << " uint id = " << idTable[caseDef.opType] << ";\n" - << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" - << " {\n" - << " result[gl_VertexIndex] = (op == data1[id]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result[gl_VertexIndex] = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n"; - - switch (caseDef.opType) { - case OPTYPE_SHUFFLE: - case OPTYPE_SHUFFLE_XOR: - src << "#extension GL_KHR_shader_subgroup_shuffle: enable\n"; - break; - default: - src << "#extension GL_KHR_shader_subgroup_shuffle_relative: enable\n"; - break; + const string tese = + "#version 450\n" + + source + + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "layout(set = 0, binding = 5, std430) readonly buffer Buffer3\n" + "{\n" + " uint data2[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " op = " + + getOpTypeName(caseDef.opType) + "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" + " uint id = " + idTable[caseDef.opType] + ";\n" + " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" + " {\n" + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = (op == data1[id]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + + programCollection.glslSources.add("tese") + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - src << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "layout(set = 0, binding = 2, std430) buffer Buffer3\n" - << "{\n" - << " uint data2[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" - << " uint id = " << idTable[caseDef.opType] << ";\n" - << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" - << " {\n" - << " result[gl_PrimitiveIDIn] = (op == data1[id]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result[gl_PrimitiveIDIn] = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - - src << "#version 450\n"; - - switch (caseDef.opType) { - case OPTYPE_SHUFFLE: - case OPTYPE_SHUFFLE_XOR: - src << "#extension GL_KHR_shader_subgroup_shuffle: enable\n"; - break; - default: - src << "#extension GL_KHR_shader_subgroup_shuffle_relative: enable\n"; - break; + const string geometry = + "#version 450\n" + + source + + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "layout(set = 0, binding = 5, std430) readonly buffer Buffer3\n" + "{\n" + " uint data2[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " op = " + + getOpTypeName(caseDef.opType) + "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" + " uint id = " + idTable[caseDef.opType] + ";\n" + " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" + " {\n" + " result[gl_PrimitiveIDIn] = (op == data1[id]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result[gl_PrimitiveIDIn] = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - - src << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "layout(set = 0, binding = 2, std430) buffer Buffer3\n" - << "{\n" - << " uint data2[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" - << " uint id = " << idTable[caseDef.opType] << ";\n" - << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" - << " {\n" - << " result[gl_PrimitiveID] = (op == data1[id]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result[gl_PrimitiveID] = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); - - std::ostringstream src; - - src << "#version 450\n"; - - switch (caseDef.opType) { - case OPTYPE_SHUFFLE: - case OPTYPE_SHUFFLE_XOR: - src << "#extension GL_KHR_shader_subgroup_shuffle: enable\n"; - break; - default: - src << "#extension GL_KHR_shader_subgroup_shuffle_relative: enable\n"; - break; + const string fragment = + "#version 450\n" + + source + + "#extension GL_KHR_shader_subgroup_ballot: enable\n" + "layout(location = 0) out uint result;\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer1\n" + "{\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " data1[];\n" + "};\n" + "layout(set = 0, binding = 5, std430) readonly buffer Buffer2\n" + "{\n" + " uint data2[];\n" + "};\n" + "void main (void)\n" + "{\n" + " uvec4 mask = subgroupBallot(true);\n" + " " + subgroups::getFormatNameForGLSL(caseDef.format) + " op = " + + getOpTypeName(caseDef.opType) + "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" + " uint id = " + idTable[caseDef.opType] + ";\n" + " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" + " {\n" + " result = (op == data1[id]) ? 1 : 0;\n" + " }\n" + " else\n" + " {\n" + " result = 1; // Invocation we read from was inactive, so we can't verify results!\n" + " }\n" + "}\n"; + + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - src << "#extension GL_KHR_shader_subgroup_ballot: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n" - << "};\n" - << "layout(set = 0, binding = 2, std430) buffer Buffer3\n" - << "{\n" - << " uint data2[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " uvec4 mask = subgroupBallot(true);\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = " - << getOpTypeName(caseDef.opType) << "(data1[gl_SubgroupInvocationID], data2[gl_SubgroupInvocationID]);\n" - << " uint id = " << idTable[caseDef.opType] << ";\n" - << " if ((0 <= id) && (id < gl_SubgroupSize) && subgroupBallotBitExtract(mask, id))\n" - << " {\n" - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = (op == data1[id]) ? 1 : 0;\n" - << " }\n" - << " else\n" - << " {\n" - << " result[gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5)] = 1; // Invocation we read from was inactive, so we can't verify results!\n" - << " }\n" - << "}\n"; - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + subgroups::addNoSubgroupShader(programCollection); } } @@ -576,23 +495,6 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (subgroups::areSubgroupOperationsRequiredForStage( - caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } - switch (caseDef.opType) { case OPTYPE_SHUFFLE: @@ -610,8 +512,7 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) break; } - if (subgroups::isDoubleFormat(caseDef.format) && - !subgroups::isDoubleSupportedForDevice(context)) + if (subgroups::isDoubleFormat(caseDef.format) && !subgroups::isDoubleSupportedForDevice(context)) { TCU_THROW(NotSupportedError, "Device does not support subgroup double operations"); } @@ -619,6 +520,10 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); + } subgroups::SSBOData inputData[2]; inputData[0].format = caseDef.format; inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); @@ -631,57 +536,66 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_UINT, inputData, 2, checkVertexPipelineStages); } - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } - } - - subgroups::SSBOData inputData[2]; - inputData[0].format = caseDef.format; - inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); - inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + subgroups::SSBOData inputData[2]; + inputData[0].format = caseDef.format; + inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); + inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; - inputData[1].format = VK_FORMAT_R32_UINT; - inputData[1].numElements = inputData[0].numElements; - inputData[1].initializeType = subgroups::SSBOData::InitializeNonZero; + inputData[1].format = VK_FORMAT_R32_UINT; + inputData[1].numElements = inputData[0].numElements; + inputData[1].initializeType = subgroups::SSBOData::InitializeNonZero; - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - inputData, 2, checkFragment); - } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) - { - return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, - inputData, 2, checkCompute); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) - { - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, - inputData, 2, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, - inputData, 2, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, - inputData, 2, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, - inputData, 2, checkVertexPipelineStages); + return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, inputData, 2, checkCompute); } + else { - TCU_THROW(InternalError, "Unhandled shader stage"); + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; + + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; + + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if (VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); + + subgroups::SSBOData inputData[2]; + inputData[0].format = caseDef.format; + inputData[0].numElements = subgroups::maxSupportedSubgroupSize(); + inputData[0].initializeType = subgroups::SSBOData::InitializeNonZero; + inputData[0].binding = 4u; + inputData[0].stages = stages; + + inputData[1].format = VK_FORMAT_R32_UINT; + inputData[1].numElements = inputData[0].numElements; + inputData[1].initializeType = subgroups::SSBOData::InitializeNonZero; + inputData[1].binding = 5u; + inputData[1].stages = stages; + + return subgroups::allStages(context, VK_FORMAT_R32_UINT, inputData, 2, checkVertexPipelineStages, stages); } } } @@ -695,16 +609,6 @@ tcu::TestCaseGroup* createSubgroupsShuffleTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "shuffle", "Subgroup shuffle category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - const VkFormat formats[] = { VK_FORMAT_R32_SINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32B32_SINT, @@ -718,39 +622,42 @@ tcu::TestCaseGroup* createSubgroupsShuffleTests(tcu::TestContext& testCtx) VK_FORMAT_R8G8B8_USCALED, VK_FORMAT_R8G8B8A8_USCALED, }; - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; + const VkFormat format = formats[formatIndex]; - for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - const VkFormat format = formats[formatIndex]; - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) - { - CaseDefinition caseDef = {opTypeIndex, stage, format, false}; - - std::ostringstream name; + const string name = + de::toLower(getOpTypeName(opTypeIndex)) + + "_" + subgroups::getFormatNameForGLSL(format); - std::string op = getOpTypeName(opTypeIndex); - - name << de::toLower(op) - << "_" << subgroups::getFormatNameForGLSL(format) - << "_" << getShaderStageName(stage); + { + const CaseDefinition caseDef = + { + opTypeIndex, + VK_SHADER_STAGE_ALL_GRAPHICS, + format, + false + }; + addFunctionCaseWithPrograms(group.get(), name + "_graphic", "", + initPrograms, test, caseDef); + } - addFunctionCaseWithPrograms(group.get(), name.str(), - "", initPrograms, test, caseDef); + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, format, false}; + addFunctionCaseWithPrograms(group.get(), name + "_" + getShaderStageName(caseDef.shaderStage), "", + initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage ) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, format, true}; + addFunctionCaseWithPrograms(group.get(), name + "_" + getShaderStageName(caseDef.shaderStage) + "_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } } } - return group.release(); } diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp index 11490d7..7adf4fc 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp @@ -789,6 +789,249 @@ std::string vkt::subgroups::getSubgroupFeatureName(vk::VkSubgroupFeatureFlagBits } } +void vkt::subgroups::addNoSubgroupShader (SourceCollections& programCollection) +{ + { + /* + "#version 450\n" + "void main (void)\n" + "{\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n" + */ + const std::string vertNoSubgroup = + "; SPIR-V\n" + "; Version: 1.3\n" + "; Generator: Khronos Glslang Reference Front End; 1\n" + "; Bound: 37\n" + "; Schema: 0\n" + "OpCapability Shader\n" + "%1 = OpExtInstImport \"GLSL.std.450\"\n" + "OpMemoryModel Logical GLSL450\n" + "OpEntryPoint Vertex %4 \"main\" %22 %26\n" + "OpMemberDecorate %20 0 BuiltIn Position\n" + "OpMemberDecorate %20 1 BuiltIn PointSize\n" + "OpMemberDecorate %20 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %20 3 BuiltIn CullDistance\n" + "OpDecorate %20 Block\n" + "OpDecorate %26 BuiltIn VertexIndex\n" + "%2 = OpTypeVoid\n" + "%3 = OpTypeFunction %2\n" + "%6 = OpTypeFloat 32\n" + "%7 = OpTypePointer Function %6\n" + "%9 = OpConstant %6 0.00195313\n" + "%12 = OpConstant %6 2\n" + "%14 = OpConstant %6 1\n" + "%16 = OpTypeVector %6 4\n" + "%17 = OpTypeInt 32 0\n" + "%18 = OpConstant %17 1\n" + "%19 = OpTypeArray %6 %18\n" + "%20 = OpTypeStruct %16 %6 %19 %19\n" + "%21 = OpTypePointer Output %20\n" + "%22 = OpVariable %21 Output\n" + "%23 = OpTypeInt 32 1\n" + "%24 = OpConstant %23 0\n" + "%25 = OpTypePointer Input %23\n" + "%26 = OpVariable %25 Input\n" + "%33 = OpConstant %6 0\n" + "%35 = OpTypePointer Output %16\n" + "%4 = OpFunction %2 None %3\n" + "%5 = OpLabel\n" + "%8 = OpVariable %7 Function\n" + "%10 = OpVariable %7 Function\n" + "OpStore %8 %9\n" + "%11 = OpLoad %6 %8\n" + "%13 = OpFDiv %6 %11 %12\n" + "%15 = OpFSub %6 %13 %14\n" + "OpStore %10 %15\n" + "%27 = OpLoad %23 %26\n" + "%28 = OpConvertSToF %6 %27\n" + "%29 = OpLoad %6 %8\n" + "%30 = OpFMul %6 %28 %29\n" + "%31 = OpLoad %6 %10\n" + "%32 = OpFAdd %6 %30 %31\n" + "%34 = OpCompositeConstruct %16 %32 %33 %33 %14\n" + "%36 = OpAccessChain %35 %22 %24\n" + "OpStore %36 %34\n" + "OpReturn\n" + "OpFunctionEnd\n"; + programCollection.spirvAsmSources.add("vert_noSubgroup") << vertNoSubgroup; + } + + { + /* + "#version 450\n" + "layout(vertices=1) out;\n" + "\n" + "void main (void)\n" + "{\n" + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n" + */ + const std::string tescNoSubgroup = + "; SPIR-V\n" + "; Version: 1.3\n" + "; Generator: Khronos Glslang Reference Front End; 1\n" + "; Bound: 45\n" + "; Schema: 0\n" + "OpCapability Tessellation\n" + "%1 = OpExtInstImport \"GLSL.std.450\"\n" + "OpMemoryModel Logical GLSL450\n" + "OpEntryPoint TessellationControl %4 \"main\" %8 %20 %32 %38\n" + "OpExecutionMode %4 OutputVertices 1\n" + "OpDecorate %8 BuiltIn InvocationId\n" + "OpDecorate %20 Patch\n" + "OpDecorate %20 BuiltIn TessLevelOuter\n" + "OpMemberDecorate %29 0 BuiltIn Position\n" + "OpMemberDecorate %29 1 BuiltIn PointSize\n" + "OpMemberDecorate %29 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %29 3 BuiltIn CullDistance\n" + "OpDecorate %29 Block\n" + "OpMemberDecorate %34 0 BuiltIn Position\n" + "OpMemberDecorate %34 1 BuiltIn PointSize\n" + "OpMemberDecorate %34 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %34 3 BuiltIn CullDistance\n" + "OpDecorate %34 Block\n" + "%2 = OpTypeVoid\n" + "%3 = OpTypeFunction %2\n" + "%6 = OpTypeInt 32 1\n" + "%7 = OpTypePointer Input %6\n" + "%8 = OpVariable %7 Input\n" + "%10 = OpConstant %6 0\n" + "%11 = OpTypeBool\n" + "%15 = OpTypeFloat 32\n" + "%16 = OpTypeInt 32 0\n" + "%17 = OpConstant %16 4\n" + "%18 = OpTypeArray %15 %17\n" + "%19 = OpTypePointer Output %18\n" + "%20 = OpVariable %19 Output\n" + "%21 = OpConstant %15 1\n" + "%22 = OpTypePointer Output %15\n" + "%24 = OpConstant %6 1\n" + "%26 = OpTypeVector %15 4\n" + "%27 = OpConstant %16 1\n" + "%28 = OpTypeArray %15 %27\n" + "%29 = OpTypeStruct %26 %15 %28 %28\n" + "%30 = OpTypeArray %29 %27\n" + "%31 = OpTypePointer Output %30\n" + "%32 = OpVariable %31 Output\n" + "%34 = OpTypeStruct %26 %15 %28 %28\n" + "%35 = OpConstant %16 32\n" + "%36 = OpTypeArray %34 %35\n" + "%37 = OpTypePointer Input %36\n" + "%38 = OpVariable %37 Input\n" + "%40 = OpTypePointer Input %26\n" + "%43 = OpTypePointer Output %26\n" + "%4 = OpFunction %2 None %3\n" + "%5 = OpLabel\n" + "%9 = OpLoad %6 %8\n" + "%12 = OpIEqual %11 %9 %10\n" + "OpSelectionMerge %14 None\n" + "OpBranchConditional %12 %13 %14\n" + "%13 = OpLabel\n" + "%23 = OpAccessChain %22 %20 %10\n" + "OpStore %23 %21\n" + "%25 = OpAccessChain %22 %20 %24\n" + "OpStore %25 %21\n" + "OpBranch %14\n" + "%14 = OpLabel\n" + "%33 = OpLoad %6 %8\n" + "%39 = OpLoad %6 %8\n" + "%41 = OpAccessChain %40 %38 %39 %10\n" + "%42 = OpLoad %26 %41\n" + "%44 = OpAccessChain %43 %32 %33 %10\n" + "OpStore %44 %42\n" + "OpReturn\n" + "OpFunctionEnd\n"; + programCollection.spirvAsmSources.add("tesc_noSubgroup") << tescNoSubgroup; + } + + { + /* + "#version 450\n" + "layout(isolines) in;\n" + "\n" + "void main (void)\n" + "{\n" + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + */ + const std::string teseNoSubgroup = + "; SPIR-V\n" + "; Version: 1.3\n" + "; Generator: Khronos Glslang Reference Front End; 1\n" + "; Bound: 38\n" + "; Schema: 0\n" + "OpCapability Tessellation\n" + "%1 = OpExtInstImport \"GLSL.std.450\"\n" + "OpMemoryModel Logical GLSL450\n" + "OpEntryPoint TessellationEvaluation %4 \"main\" %13 %20 %29\n" + "OpExecutionMode %4 Isolines\n" + "OpExecutionMode %4 SpacingEqual\n" + "OpExecutionMode %4 VertexOrderCcw\n" + "OpMemberDecorate %11 0 BuiltIn Position\n" + "OpMemberDecorate %11 1 BuiltIn PointSize\n" + "OpMemberDecorate %11 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %11 3 BuiltIn CullDistance\n" + "OpDecorate %11 Block\n" + "OpMemberDecorate %16 0 BuiltIn Position\n" + "OpMemberDecorate %16 1 BuiltIn PointSize\n" + "OpMemberDecorate %16 2 BuiltIn ClipDistance\n" + "OpMemberDecorate %16 3 BuiltIn CullDistance\n" + "OpDecorate %16 Block\n" + "OpDecorate %29 BuiltIn TessCoord\n" + "%2 = OpTypeVoid\n" + "%3 = OpTypeFunction %2\n" + "%6 = OpTypeFloat 32\n" + "%7 = OpTypeVector %6 4\n" + "%8 = OpTypeInt 32 0\n" + "%9 = OpConstant %8 1\n" + "%10 = OpTypeArray %6 %9\n" + "%11 = OpTypeStruct %7 %6 %10 %10\n" + "%12 = OpTypePointer Output %11\n" + "%13 = OpVariable %12 Output\n" + "%14 = OpTypeInt 32 1\n" + "%15 = OpConstant %14 0\n" + "%16 = OpTypeStruct %7 %6 %10 %10\n" + "%17 = OpConstant %8 32\n" + "%18 = OpTypeArray %16 %17\n" + "%19 = OpTypePointer Input %18\n" + "%20 = OpVariable %19 Input\n" + "%21 = OpTypePointer Input %7\n" + "%24 = OpConstant %14 1\n" + "%27 = OpTypeVector %6 3\n" + "%28 = OpTypePointer Input %27\n" + "%29 = OpVariable %28 Input\n" + "%30 = OpConstant %8 0\n" + "%31 = OpTypePointer Input %6\n" + "%36 = OpTypePointer Output %7\n" + "%4 = OpFunction %2 None %3\n" + "%5 = OpLabel\n" + "%22 = OpAccessChain %21 %20 %15 %15\n" + "%23 = OpLoad %7 %22\n" + "%25 = OpAccessChain %21 %20 %24 %15\n" + "%26 = OpLoad %7 %25\n" + "%32 = OpAccessChain %31 %29 %30\n" + "%33 = OpLoad %6 %32\n" + "%34 = OpCompositeConstruct %7 %33 %33 %33 %33\n" + "%35 = OpExtInst %7 %1 FMix %23 %26 %34\n" + "%37 = OpAccessChain %36 %13 %15\n" + "OpStore %37 %35\n" + "OpReturn\n" + "OpFunctionEnd\n"; + programCollection.spirvAsmSources.add("tese_noSubgroup") << teseNoSubgroup; + } + +} + + std::string vkt::subgroups::getVertShaderForStage(vk::VkShaderStageFlags stage) { switch (stage) @@ -800,8 +1043,9 @@ std::string vkt::subgroups::getVertShaderForStage(vk::VkShaderStageFlags stage) "#version 450\n" "void main (void)\n" "{\n" - " vec2 uv = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);\n" - " gl_Position = vec4(uv * 2.0f + -1.0f, 0.0f, 1.0f);\n" + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" "}\n"; case VK_SHADER_STAGE_GEOMETRY_BIT: return @@ -1030,55 +1274,167 @@ void initializeMemory(Context& context, const Allocation& alloc, subgroups::SSBO } } -tcu::TestStatus vkt::subgroups::makeTessellationEvaluationTest( +deUint32 getResultBinding (const VkShaderStageFlagBits shaderStage) +{ + switch(shaderStage) + { + case VK_SHADER_STAGE_VERTEX_BIT: + return 0u; + break; + case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: + return 1u; + break; + case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT: + return 2u; + break; + case VK_SHADER_STAGE_GEOMETRY_BIT: + return 3u; + break; + default: + DE_ASSERT(0); + return -1; + } + DE_ASSERT(0); + return -1; +} + +VkImageMemoryBarrier makeImageMemoryBarrier (const VkAccessFlags srcAccessMask, + const VkAccessFlags dstAccessMask, + const VkImageLayout oldLayout, + const VkImageLayout newLayout, + const VkImage image, + const VkImageSubresourceRange subresourceRange) +{ + const VkImageMemoryBarrier barrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + srcAccessMask, // VkAccessFlags outputMask; + dstAccessMask, // VkAccessFlags inputMask; + oldLayout, // VkImageLayout oldLayout; + newLayout, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 destQueueFamilyIndex; + image, // VkImage image; + subresourceRange, // VkImageSubresourceRange subresourceRange; + }; + return barrier; +} + +VkBufferMemoryBarrier makeBufferMemoryBarrier (const VkAccessFlags srcAccessMask, + const VkAccessFlags dstAccessMask, + const VkBuffer buffer, + const VkDeviceSize offset, + const VkDeviceSize bufferSizeBytes) +{ + const VkBufferMemoryBarrier barrier = + { + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + srcAccessMask, // VkAccessFlags srcAccessMask; + dstAccessMask, // VkAccessFlags dstAccessMask; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 destQueueFamilyIndex; + buffer, // VkBuffer buffer; + offset, // VkDeviceSize offset; + bufferSizeBytes, // VkDeviceSize size; + }; + return barrier; +} + +tcu::TestStatus vkt::subgroups::allStages( Context& context, VkFormat format, SSBOData* extraDatas, deUint32 extraDatasCount, - bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)) + bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize), + const VkShaderStageFlags shaderStageTested) { - const deUint32 maxWidth = 1024; + const deUint32 maxWidth = 1024u; + vector stagesVector; + VkShaderStageFlags shaderStageRequired = (VkShaderStageFlags)0ull; - const Unique vertexShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("vert"), 0u)); - const Unique tessellationControlShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("tesc"), 0u)); - const Unique tessellationEvaluationShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("tese"), 0u)); + Move vertexShaderModule; + Move teCtrlShaderModule; + Move teEvalShaderModule; + Move geometryShaderModule; + Move fragmentShaderModule; + + if (shaderStageTested & VK_SHADER_STAGE_VERTEX_BIT) + { + stagesVector.push_back(VK_SHADER_STAGE_VERTEX_BIT); + } + if (shaderStageTested & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) + { + stagesVector.push_back(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); + shaderStageRequired |= (shaderStageTested & (VkShaderStageFlags)VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) ? (VkShaderStageFlags) 0u : (VkShaderStageFlags)VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT; + shaderStageRequired |= (shaderStageTested & (VkShaderStageFlags)VK_SHADER_STAGE_VERTEX_BIT) ? (VkShaderStageFlags) 0u : (VkShaderStageFlags)VK_SHADER_STAGE_VERTEX_BIT; + } + if (shaderStageTested & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) + { + stagesVector.push_back(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); + shaderStageRequired |= (shaderStageTested & (VkShaderStageFlags)VK_SHADER_STAGE_VERTEX_BIT) ? (VkShaderStageFlags) 0u : (VkShaderStageFlags)VK_SHADER_STAGE_VERTEX_BIT; + shaderStageRequired |= (shaderStageTested & (VkShaderStageFlags)VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) ? (VkShaderStageFlags) 0u : (VkShaderStageFlags)VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT; + } + if (shaderStageTested & VK_SHADER_STAGE_GEOMETRY_BIT) + { + stagesVector.push_back(VK_SHADER_STAGE_GEOMETRY_BIT); + const VkShaderStageFlags required = VK_SHADER_STAGE_VERTEX_BIT; + shaderStageRequired |= (shaderStageTested & required) ? (VkShaderStageFlags) 0 : required; + } + if (shaderStageTested & VK_SHADER_STAGE_FRAGMENT_BIT) + { + const VkShaderStageFlags required = VK_SHADER_STAGE_VERTEX_BIT; + shaderStageRequired |= (shaderStageTested & required) ? (VkShaderStageFlags) 0 : required; + } - std::vector< de::SharedPtr > inputBuffers(extraDatasCount + 1); + const deUint32 stagesCount = static_cast(stagesVector.size()); + const string vert = (shaderStageRequired & VK_SHADER_STAGE_VERTEX_BIT) ? "vert_noSubgroup" : "vert"; + const string tesc = (shaderStageRequired & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) ? "tesc_noSubgroup" : "tesc"; + const string tese = (shaderStageRequired & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) ? "tese_noSubgroup" : "tese"; + shaderStageRequired = shaderStageTested | shaderStageRequired; + + vertexShaderModule = createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get(vert), 0u); + if (shaderStageRequired & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) + { + teCtrlShaderModule = createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get(tesc), 0u); + teEvalShaderModule = createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get(tese), 0u); + } + if (shaderStageRequired & VK_SHADER_STAGE_GEOMETRY_BIT) + geometryShaderModule = createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("geometry"), 0u); + if (shaderStageRequired & VK_SHADER_STAGE_FRAGMENT_BIT) + fragmentShaderModule = createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("fragment"), 0u); + + std::vector< de::SharedPtr > inputBuffers(stagesCount + extraDatasCount); + + DescriptorSetLayoutBuilder layoutBuilder; // The implicit result SSBO we use to store our outputs from the shader + for (deUint32 ndx = 0u; ndx < stagesCount; ++ndx) { - vk::VkDeviceSize size = getFormatSizeInBytes(format) * maxWidth * 2; - inputBuffers[0] = de::SharedPtr(new Buffer(context, size)); + const VkDeviceSize shaderSize = (stagesVector[ndx] == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) ? maxWidth * 2 : maxWidth; + const VkDeviceSize size = getFormatSizeInBytes(format) * shaderSize; + inputBuffers[ndx] = de::SharedPtr(new Buffer(context, size)); + + layoutBuilder.addIndexedBinding(inputBuffers[ndx]->getType(), 1, stagesVector[ndx], getResultBinding(stagesVector[ndx]), DE_NULL); } - for (deUint32 i = 0; i < (inputBuffers.size() - 1); i++) + for (deUint32 ndx = stagesCount; ndx < stagesCount + extraDatasCount; ++ndx) { - if (extraDatas[i].isImage) + const deUint32 datasNdx = ndx - stagesCount; + if (extraDatas[datasNdx].isImage) { - inputBuffers[i + 1] = de::SharedPtr(new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); + inputBuffers[ndx] = de::SharedPtr(new Image(context, static_cast(extraDatas[datasNdx].numElements), 1, extraDatas[datasNdx].format)); } else { - vk::VkDeviceSize size = - getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i + 1] = de::SharedPtr(new Buffer(context, size)); + const vk::VkDeviceSize size = getFormatSizeInBytes(extraDatas[datasNdx].format) * extraDatas[datasNdx].numElements; + inputBuffers[ndx] = de::SharedPtr(new Buffer(context, size)); } - const Allocation& alloc = inputBuffers[i + 1]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i]); - } - - DescriptorSetLayoutBuilder layoutBuilder; + const Allocation& alloc = inputBuffers[ndx]->getAllocation(); + initializeMemory(context, alloc, extraDatas[datasNdx]); - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - layoutBuilder.addBinding(inputBuffers[i]->getType(), 1, - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, DE_NULL); + layoutBuilder.addIndexedBinding(inputBuffers[ndx]->getType(), 1, + extraDatas[datasNdx].stages, extraDatas[datasNdx].binding, DE_NULL); } const Unique descriptorSetLayout( @@ -1087,17 +1443,18 @@ tcu::TestStatus vkt::subgroups::makeTessellationEvaluationTest( const Unique pipelineLayout( makePipelineLayout(context, *descriptorSetLayout)); - const Unique renderPass(makeRenderPass(context, VK_FORMAT_R32_SFLOAT)); + const Unique renderPass(makeRenderPass(context, format)); const Unique pipeline(makeGraphicsPipeline(context, *pipelineLayout, - VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - *vertexShaderModule, DE_NULL, DE_NULL, *tessellationControlShaderModule, *tessellationEvaluationShaderModule, - *renderPass, VK_PRIMITIVE_TOPOLOGY_PATCH_LIST)); + shaderStageRequired, + *vertexShaderModule, *fragmentShaderModule, *geometryShaderModule, *teCtrlShaderModule, *teEvalShaderModule, + *renderPass, + (shaderStageRequired & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) ? VK_PRIMITIVE_TOPOLOGY_PATCH_LIST : VK_PRIMITIVE_TOPOLOGY_POINT_LIST)); DescriptorPoolBuilder poolBuilder; - for (deUint32 i = 0; i < inputBuffers.size(); i++) + for (deUint32 ndx = 0u; ndx < static_cast(inputBuffers.size()); ndx++) { - poolBuilder.addType(inputBuffers[i]->getType()); + poolBuilder.addType(inputBuffers[ndx]->getType()); } const Unique descriptorPool( @@ -1110,1188 +1467,378 @@ tcu::TestStatus vkt::subgroups::makeTessellationEvaluationTest( DescriptorSetUpdateBuilder updateBuilder; - for (deUint32 i = 0; i < inputBuffers.size(); i++) + for (deUint32 ndx = 0u; ndx < stagesCount; ndx++) { - if (inputBuffers[i]->isImage()) + if (inputBuffers[ndx]->isImage()) { VkDescriptorImageInfo info = - makeDescriptorImageInfo(inputBuffers[i]->getAsImage()->getSampler(), - inputBuffers[i]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); + makeDescriptorImageInfo(inputBuffers[ndx]->getAsImage()->getSampler(), + inputBuffers[ndx]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); + DescriptorSetUpdateBuilder::Location::binding(getResultBinding(stagesVector[ndx])), + inputBuffers[ndx]->getType(), &info); } else { VkDescriptorBufferInfo info = - makeDescriptorBufferInfo(inputBuffers[i]->getAsBuffer()->getBuffer(), - 0ull, inputBuffers[i]->getAsBuffer()->getSize()); + makeDescriptorBufferInfo(inputBuffers[ndx]->getAsBuffer()->getBuffer(), + 0ull, inputBuffers[ndx]->getAsBuffer()->getSize()); updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); + DescriptorSetUpdateBuilder::Location::binding(getResultBinding(stagesVector[ndx])), + inputBuffers[ndx]->getType(), &info); } } - updateBuilder.update(context.getDeviceInterface(), context.getDevice()); - - const Unique cmdPool(makeCommandPool(context)); - - const deUint32 subgroupSize = getSubgroupSize(context); - - const Unique cmdBuffer( - makeCommandBuffer(context, *cmdPool)); + for (deUint32 ndx = stagesCount; ndx < stagesCount + extraDatasCount; ndx++) + { + if (inputBuffers[ndx]->isImage()) + { + VkDescriptorImageInfo info = + makeDescriptorImageInfo(inputBuffers[ndx]->getAsImage()->getSampler(), + inputBuffers[ndx]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); - unsigned totalIterations = 0; - unsigned failedIterations = 0; + updateBuilder.writeSingle(*descriptorSet, + DescriptorSetUpdateBuilder::Location::binding(extraDatas[ndx -stagesCount].binding), + inputBuffers[ndx]->getType(), &info); + } + else + { + VkDescriptorBufferInfo info = + makeDescriptorBufferInfo(inputBuffers[ndx]->getAsBuffer()->getBuffer(), + 0ull, inputBuffers[ndx]->getAsBuffer()->getSize()); - Image discardableImage(context, 1, 1, VK_FORMAT_R32_SFLOAT, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | - VK_IMAGE_USAGE_TRANSFER_SRC_BIT); + updateBuilder.writeSingle(*descriptorSet, + DescriptorSetUpdateBuilder::Location::binding(extraDatas[ndx - stagesCount].binding), + inputBuffers[ndx]->getType(), &info); + } + } + updateBuilder.update(context.getDeviceInterface(), context.getDevice()); - for (deUint32 width = 1; width < maxWidth; width++) { - for (deUint32 i = 1; i < inputBuffers.size(); i++) + const Unique cmdPool (makeCommandPool(context)); + const deUint32 subgroupSize = getSubgroupSize(context); + const Unique cmdBuffer (makeCommandBuffer(context, *cmdPool)); + unsigned totalIterations = 0u; + unsigned failedIterations = 0u; + const VkClearValue clearValue = {{{0.0f, 0.0f, 0.0f, 0.0f}}}; + const VkDeviceSize resultImageSizeInBytes = maxWidth * 1 * getFormatSizeInBytes(format); + Image resultImage (context, maxWidth, 1, format, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT); + const Unique framebuffer (makeFramebuffer(context, *renderPass, resultImage.getImageView(), maxWidth, 1)); + const VkViewport viewport = {0.0f, 0.0f, static_cast(maxWidth), 1.0f, 0.0f, 1.0f}; + const VkRect2D scissor = {{0, 0}, {maxWidth, 1}}; + const vk::VkDeviceSize imageResultSize = tcu::getPixelSize(vk::mapVkFormat(format)) * maxWidth; + Buffer imageBufferResult (context, imageResultSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT); + const VkRenderPassBeginInfo renderPassBeginInfo = { - // re-init the data - const Allocation& alloc = inputBuffers[i]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i - 1]); - } + VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, DE_NULL, *renderPass, + *framebuffer, {{0, 0}, {maxWidth, 1}}, 1, &clearValue, + }; + const VkImageSubresourceRange subresourceRange = + { + VK_IMAGE_ASPECT_COLOR_BIT, //VkImageAspectFlags aspectMask + 0u, //deUint32 baseMipLevel + 1u, //deUint32 levelCount + 0u, //deUint32 baseArrayLayer + 1u //deUint32 layerCount + }; - totalIterations++; + const VkImageMemoryBarrier colorAttachmentBarrier = makeImageMemoryBarrier( + (VkAccessFlags)0u, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, + VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + resultImage.getImage(), subresourceRange); - const Unique framebuffer(makeFramebuffer(context, - *renderPass, discardableImage.getImageView(), 1, 1)); + const VkImageMemoryBarrier prepareForTransferBarrier = makeImageMemoryBarrier( + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + resultImage.getImage(), subresourceRange); - const VkClearValue clearValue = {{{0.0f, 0.0f, 0.0f, 0.0f}}}; + const VkBufferMemoryBarrier copyBarrier = makeBufferMemoryBarrier( + VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, + imageBufferResult.getBuffer(), 0ull, imageResultSize); - const VkRenderPassBeginInfo renderPassBeginInfo = { - VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, DE_NULL, *renderPass, - *framebuffer, {{0, 0}, {1, 1}}, 1, &clearValue, - }; + for (deUint32 width = 1u; width < maxWidth; width++) + { + for (deUint32 ndx = stagesCount; ndx < stagesCount + extraDatasCount; ++ndx) + { + // re-init the data + const Allocation& alloc = inputBuffers[ndx]->getAllocation(); + initializeMemory(context, alloc, extraDatas[ndx - stagesCount]); + } - beginCommandBuffer(context, *cmdBuffer); + const VkBufferImageCopy region = {0, 0, 0, + {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, + {width, 1, 1} + }; - VkViewport viewport = {0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f}; + totalIterations++; - context.getDeviceInterface().cmdSetViewport( - *cmdBuffer, 0, 1, &viewport); + beginCommandBuffer(context, *cmdBuffer); - VkRect2D scissor = {{0, 0}, {1, 1}}; + context.getDeviceInterface().cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 0u, (const VkBufferMemoryBarrier*)DE_NULL, 1u, &colorAttachmentBarrier); - context.getDeviceInterface().cmdSetScissor( - *cmdBuffer, 0, 1, &scissor); + context.getDeviceInterface().cmdSetViewport(*cmdBuffer, 0, 1, &viewport); - context.getDeviceInterface().cmdBeginRenderPass( - *cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + context.getDeviceInterface().cmdSetScissor(*cmdBuffer, 0, 1, &scissor); - context.getDeviceInterface().cmdBindPipeline( - *cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); + context.getDeviceInterface().cmdBeginRenderPass(*cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); - context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, - &descriptorSet.get(), 0u, DE_NULL); + context.getDeviceInterface().cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); - context.getDeviceInterface().cmdDraw(*cmdBuffer, width, 1, 0, 0); + context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, + VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, + &descriptorSet.get(), 0u, DE_NULL); - context.getDeviceInterface().cmdEndRenderPass(*cmdBuffer); + context.getDeviceInterface().cmdDraw(*cmdBuffer, width, 1, 0, 0); - endCommandBuffer(context, *cmdBuffer); + context.getDeviceInterface().cmdEndRenderPass(*cmdBuffer); - Move fence(submitCommandBuffer(context, *cmdBuffer)); + context.getDeviceInterface().cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 0u, (const VkBufferMemoryBarrier*)DE_NULL, 1u, &prepareForTransferBarrier); + context.getDeviceInterface().cmdCopyImageToBuffer(*cmdBuffer, resultImage.getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, imageBufferResult.getBuffer(), 1u, ®ion); + context.getDeviceInterface().cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 1u, ©Barrier, 0u, (const VkImageMemoryBarrier*)DE_NULL); - waitFence(context, fence); + endCommandBuffer(context, *cmdBuffer); - std::vector datas; + Move fence(submitCommandBuffer(context, *cmdBuffer)); + waitFence(context, fence); - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - if (!inputBuffers[i]->isImage()) + for (deUint32 ndx = 0u; ndx < stagesCount; ++ndx) { - const Allocation& resultAlloc = inputBuffers[i]->getAllocation(); + std::vector datas; + if (!inputBuffers[ndx]->isImage()) + { + const Allocation& resultAlloc = inputBuffers[ndx]->getAllocation(); + invalidateMappedMemoryRange(context.getDeviceInterface(), + context.getDevice(), resultAlloc.getMemory(), + resultAlloc.getOffset(), inputBuffers[ndx]->getAsBuffer()->getSize()); + // we always have our result data first + datas.push_back(resultAlloc.getHostPtr()); + } + + for (deUint32 index = stagesCount; index < stagesCount + extraDatasCount; ++index) + { + const deUint32 datasNdx = index - stagesCount; + if ((stagesVector[ndx] & extraDatas[datasNdx].stages) && (!inputBuffers[index]->isImage())) + { + const Allocation& resultAlloc = inputBuffers[index]->getAllocation(); + invalidateMappedMemoryRange(context.getDeviceInterface(), + context.getDevice(), resultAlloc.getMemory(), + resultAlloc.getOffset(), inputBuffers[index]->getAsBuffer()->getSize()); + // we always have our result data first + datas.push_back(resultAlloc.getHostPtr()); + } + } + + if (!checkResult(datas, (stagesVector[ndx] == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) ? width * 2 : width , subgroupSize)) + failedIterations++; + } + if (shaderStageTested & VK_SHADER_STAGE_FRAGMENT_BIT) + { + std::vector datas; + const Allocation& resultAlloc = imageBufferResult.getAllocation(); invalidateMappedMemoryRange(context.getDeviceInterface(), context.getDevice(), resultAlloc.getMemory(), - resultAlloc.getOffset(), inputBuffers[i]->getAsBuffer()->getSize()); + resultAlloc.getOffset(), resultImageSizeInBytes); // we always have our result data first datas.push_back(resultAlloc.getHostPtr()); + + for (deUint32 index = stagesCount; index < stagesCount + extraDatasCount; ++index) + { + const deUint32 datasNdx = index - stagesCount; + if (VK_SHADER_STAGE_FRAGMENT_BIT & extraDatas[datasNdx].stages && (!inputBuffers[index]->isImage())) + { + const Allocation& alloc = inputBuffers[index]->getAllocation(); + invalidateMappedMemoryRange(context.getDeviceInterface(), + context.getDevice(), alloc.getMemory(), + alloc.getOffset(), inputBuffers[index]->getAsBuffer()->getSize()); + // we always have our result data first + datas.push_back(alloc.getHostPtr()); + } + } + + if (!checkResult(datas, width , subgroupSize)) + failedIterations++; } + + context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); } - if (!checkResult(datas, width * 2, subgroupSize)) + if (0 < failedIterations) { - failedIterations++; + context.getTestContext().getLog() + << TestLog::Message << (totalIterations - failedIterations) << " / " + << totalIterations << " values passed" << TestLog::EndMessage; + return tcu::TestStatus::fail("Failed!"); } - - context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); - } - - if (0 < failedIterations) - { - context.getTestContext().getLog() - << TestLog::Message << (totalIterations - failedIterations) << " / " - << totalIterations << " values passed" << TestLog::EndMessage; - return tcu::TestStatus::fail("Failed!"); } return tcu::TestStatus::pass("OK"); } -tcu::TestStatus vkt::subgroups::makeTessellationControlTest( - Context& context, VkFormat format, SSBOData* extraDatas, - deUint32 extraDatasCount, +tcu::TestStatus vkt::subgroups::makeVertexFrameBufferTest(Context& context, vk::VkFormat format, + SSBOData* extraData, deUint32 extraDataCount, bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)) { - const deUint32 maxWidth = 1024; - - const Unique vertexShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("vert"), 0u)); - const Unique tessellationControlShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("tesc"), 0u)); - const Unique tessellationEvaluationShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("tese"), 0u)); + const deUint32 maxWidth = 1024u; + vector > inputBuffers (extraDataCount); + DescriptorSetLayoutBuilder layoutBuilder; + const Unique vertexShaderModule (createShaderModule + (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("vert"), 0u)); + const Unique fragmentShaderModule (createShaderModule + (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("fragment"), 0u)); + const Unique renderPass (makeRenderPass(context, format)); - std::vector< de::SharedPtr > inputBuffers(extraDatasCount + 1); + const VkVertexInputBindingDescription vertexInputBinding = + { + 0u, // binding; + static_cast(sizeof(tcu::Vec4)), // stride; + VK_VERTEX_INPUT_RATE_VERTEX // inputRate + }; - // The implicit result SSBO we use to store our outputs from the vertex shader + const VkVertexInputAttributeDescription vertexInputAttribute = { - vk::VkDeviceSize size = getFormatSizeInBytes(format) * maxWidth; - inputBuffers[0] = de::SharedPtr(new Buffer(context, size)); - } + 0u, + 0u, + VK_FORMAT_R32G32B32A32_SFLOAT, + 0u + }; - for (deUint32 i = 0; i < (inputBuffers.size() - 1); i++) + for (deUint32 i = 0u; i < extraDataCount; i++) { - if (extraDatas[i].isImage) + if (extraData[i].isImage) { - inputBuffers[i + 1] = de::SharedPtr(new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); + inputBuffers[i] = de::SharedPtr(new Image(context, static_cast(extraData[i].numElements), 1u, extraData[i].format)); } else { - vk::VkDeviceSize size = - getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i + 1] = de::SharedPtr(new Buffer(context, size)); + vk::VkDeviceSize size = getFormatSizeInBytes(extraData[i].format) * extraData[i].numElements; + inputBuffers[i] = de::SharedPtr(new Buffer(context, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)); } - - const Allocation& alloc = inputBuffers[i + 1]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i]); - } - - DescriptorSetLayoutBuilder layoutBuilder; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - layoutBuilder.addBinding(inputBuffers[i]->getType(), 1, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, DE_NULL); + const Allocation& alloc = inputBuffers[i]->getAllocation(); + initializeMemory(context, alloc, extraData[i]); } - const Unique descriptorSetLayout( - layoutBuilder.build(context.getDeviceInterface(), context.getDevice())); - - const Unique pipelineLayout( - makePipelineLayout(context, *descriptorSetLayout)); + for (deUint32 ndx = 0u; ndx < extraDataCount; ndx++) + layoutBuilder.addBinding(inputBuffers[ndx]->getType(), 1u, VK_SHADER_STAGE_VERTEX_BIT, DE_NULL); - const Unique renderPass(makeRenderPass(context, VK_FORMAT_R32_SFLOAT)); - const Unique pipeline(makeGraphicsPipeline(context, *pipelineLayout, - VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - *vertexShaderModule, DE_NULL, DE_NULL, *tessellationControlShaderModule, *tessellationEvaluationShaderModule, - *renderPass, VK_PRIMITIVE_TOPOLOGY_PATCH_LIST)); + const Unique descriptorSetLayout (layoutBuilder.build(context.getDeviceInterface(), context.getDevice())); - DescriptorPoolBuilder poolBuilder; + const Unique pipelineLayout (makePipelineLayout(context, *descriptorSetLayout)); - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - poolBuilder.addType(inputBuffers[i]->getType()); - } - - const Unique descriptorPool( - poolBuilder.build(context.getDeviceInterface(), context.getDevice(), - VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u)); - - // Create descriptor set - const Unique descriptorSet( - makeDescriptorSet(context, *descriptorPool, *descriptorSetLayout)); - - DescriptorSetUpdateBuilder updateBuilder; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - if (inputBuffers[i]->isImage()) - { - VkDescriptorImageInfo info = - makeDescriptorImageInfo(inputBuffers[i]->getAsImage()->getSampler(), - inputBuffers[i]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); - - updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); - } - else - { - VkDescriptorBufferInfo info = - makeDescriptorBufferInfo(inputBuffers[i]->getAsBuffer()->getBuffer(), - 0ull, inputBuffers[i]->getAsBuffer()->getSize()); - - updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); - } - } - - updateBuilder.update(context.getDeviceInterface(), context.getDevice()); - - const Unique cmdPool(makeCommandPool(context)); - - const deUint32 subgroupSize = getSubgroupSize(context); - - const Unique cmdBuffer( - makeCommandBuffer(context, *cmdPool)); - - unsigned totalIterations = 0; - unsigned failedIterations = 0; - - Image discardableImage(context, 1, 1, VK_FORMAT_R32_SFLOAT, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | - VK_IMAGE_USAGE_TRANSFER_SRC_BIT); - - for (deUint32 width = 1; width < maxWidth; width++) - { - for (deUint32 i = 1; i < inputBuffers.size(); i++) - { - // re-init the data - const Allocation& alloc = inputBuffers[i]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i - 1]); - } - - totalIterations++; - - const Unique framebuffer(makeFramebuffer(context, - *renderPass, discardableImage.getImageView(), 1, 1)); - - const VkClearValue clearValue = {{{0.0f, 0.0f, 0.0f, 0.0f}}}; - - const VkRenderPassBeginInfo renderPassBeginInfo = { - VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, DE_NULL, *renderPass, - *framebuffer, {{0, 0}, {1, 1}}, 1, &clearValue, - }; - - beginCommandBuffer(context, *cmdBuffer); - - VkViewport viewport = {0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f}; - - context.getDeviceInterface().cmdSetViewport( - *cmdBuffer, 0, 1, &viewport); - - VkRect2D scissor = {{0, 0}, {1, 1}}; - - context.getDeviceInterface().cmdSetScissor( - *cmdBuffer, 0, 1, &scissor); - - context.getDeviceInterface().cmdBeginRenderPass( - *cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); - - context.getDeviceInterface().cmdBindPipeline( - *cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); - - context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, - &descriptorSet.get(), 0u, DE_NULL); - - context.getDeviceInterface().cmdDraw(*cmdBuffer, width, 1, 0, 0); - - context.getDeviceInterface().cmdEndRenderPass(*cmdBuffer); - - endCommandBuffer(context, *cmdBuffer); - - Move fence(submitCommandBuffer(context, *cmdBuffer)); - - waitFence(context, fence); - - std::vector datas; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - if (!inputBuffers[i]->isImage()) - { - const Allocation& resultAlloc = inputBuffers[i]->getAllocation(); - invalidateMappedMemoryRange(context.getDeviceInterface(), - context.getDevice(), resultAlloc.getMemory(), - resultAlloc.getOffset(), inputBuffers[i]->getAsBuffer()->getSize()); - - // we always have our result data first - datas.push_back(resultAlloc.getHostPtr()); - } - } - - if (!checkResult(datas, width, subgroupSize)) - { - failedIterations++; - } - - context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); - } - - if (0 < failedIterations) - { - context.getTestContext().getLog() - << TestLog::Message << (totalIterations - failedIterations) << " / " - << totalIterations << " values passed" << TestLog::EndMessage; - return tcu::TestStatus::fail("Failed!"); - } - - return tcu::TestStatus::pass("OK"); -} - -tcu::TestStatus vkt::subgroups::makeGeometryTest( - Context& context, VkFormat format, SSBOData* extraDatas, - deUint32 extraDatasCount, - bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)) -{ - const deUint32 maxWidth = 1024; - - const Unique vertexShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("vert"), 0u)); - const Unique geometryShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("geom"), 0u)); - - std::vector< de::SharedPtr > inputBuffers(extraDatasCount + 1); - - // The implicit result SSBO we use to store our outputs from the vertex shader - { - vk::VkDeviceSize size = getFormatSizeInBytes(format) * maxWidth; - inputBuffers[0] = de::SharedPtr(new Buffer(context, size)); - } - - for (deUint32 i = 0; i < (inputBuffers.size() - 1); i++) - { - if (extraDatas[i].isImage) - { - inputBuffers[i + 1] = de::SharedPtr(new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); - } - else - { - vk::VkDeviceSize size = - getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i + 1] = de::SharedPtr(new Buffer(context, size)); - } - - const Allocation& alloc = inputBuffers[i + 1]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i]); - } - - DescriptorSetLayoutBuilder layoutBuilder; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - layoutBuilder.addBinding(inputBuffers[i]->getType(), 1, - VK_SHADER_STAGE_GEOMETRY_BIT, DE_NULL); - } - - const Unique descriptorSetLayout( - layoutBuilder.build(context.getDeviceInterface(), context.getDevice())); - - const Unique pipelineLayout( - makePipelineLayout(context, *descriptorSetLayout)); - - const Unique renderPass(makeRenderPass(context, VK_FORMAT_R32_SFLOAT)); - const Unique pipeline(makeGraphicsPipeline(context, *pipelineLayout, - VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_GEOMETRY_BIT, - *vertexShaderModule, DE_NULL, *geometryShaderModule, DE_NULL, DE_NULL, - *renderPass, VK_PRIMITIVE_TOPOLOGY_POINT_LIST)); - - DescriptorPoolBuilder poolBuilder; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - poolBuilder.addType(inputBuffers[i]->getType()); - } - - const Unique descriptorPool( - poolBuilder.build(context.getDeviceInterface(), context.getDevice(), - VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u)); - - // Create descriptor set - const Unique descriptorSet( - makeDescriptorSet(context, *descriptorPool, *descriptorSetLayout)); - - DescriptorSetUpdateBuilder updateBuilder; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - if (inputBuffers[i]->isImage()) - { - VkDescriptorImageInfo info = - makeDescriptorImageInfo(inputBuffers[i]->getAsImage()->getSampler(), - inputBuffers[i]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); - - updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); - } - else - { - VkDescriptorBufferInfo info = - makeDescriptorBufferInfo(inputBuffers[i]->getAsBuffer()->getBuffer(), - 0ull, inputBuffers[i]->getAsBuffer()->getSize()); - - updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); - } - } - - updateBuilder.update(context.getDeviceInterface(), context.getDevice()); - - const Unique cmdPool(makeCommandPool(context)); - - const deUint32 subgroupSize = getSubgroupSize(context); - - const Unique cmdBuffer( - makeCommandBuffer(context, *cmdPool)); - - unsigned totalIterations = 0; - unsigned failedIterations = 0; - - Image discardableImage(context, 1, 1, VK_FORMAT_R32_SFLOAT, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | - VK_IMAGE_USAGE_TRANSFER_SRC_BIT); - - for (deUint32 width = 1; width < maxWidth; width++) - { - for (deUint32 i = 1; i < inputBuffers.size(); i++) - { - // re-init the data - const Allocation& alloc = inputBuffers[i]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i - 1]); - } - - totalIterations++; - - const Unique framebuffer(makeFramebuffer(context, - *renderPass, discardableImage.getImageView(), 1, 1)); - - const VkClearValue clearValue = {{{0.0f, 0.0f, 0.0f, 0.0f}}}; - - const VkRenderPassBeginInfo renderPassBeginInfo = { - VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, DE_NULL, *renderPass, - *framebuffer, {{0, 0}, {1, 1}}, 1, &clearValue, - }; - - beginCommandBuffer(context, *cmdBuffer); - - VkViewport viewport = {0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f}; - - context.getDeviceInterface().cmdSetViewport( - *cmdBuffer, 0, 1, &viewport); - - VkRect2D scissor = {{0, 0}, {1, 1}}; - - context.getDeviceInterface().cmdSetScissor( - *cmdBuffer, 0, 1, &scissor); - - context.getDeviceInterface().cmdBeginRenderPass( - *cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); - - context.getDeviceInterface().cmdBindPipeline( - *cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); - - context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, - &descriptorSet.get(), 0u, DE_NULL); - - context.getDeviceInterface().cmdDraw(*cmdBuffer, width, 1, 0, 0); - - context.getDeviceInterface().cmdEndRenderPass(*cmdBuffer); - - endCommandBuffer(context, *cmdBuffer); - - Move fence(submitCommandBuffer(context, *cmdBuffer)); - - waitFence(context, fence); - - std::vector datas; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - if (!inputBuffers[i]->isImage()) - { - const Allocation& resultAlloc = inputBuffers[i]->getAllocation(); - invalidateMappedMemoryRange(context.getDeviceInterface(), - context.getDevice(), resultAlloc.getMemory(), - resultAlloc.getOffset(), inputBuffers[i]->getAsBuffer()->getSize()); - - // we always have our result data first - datas.push_back(resultAlloc.getHostPtr()); - } - } - - if (!checkResult(datas, width, subgroupSize)) - { - failedIterations++; - } - - context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); - } - - if (0 < failedIterations) - { - context.getTestContext().getLog() - << TestLog::Message << (totalIterations - failedIterations) << " / " - << totalIterations << " values passed" << TestLog::EndMessage; - return tcu::TestStatus::fail("Failed!"); - } - - return tcu::TestStatus::pass("OK"); -} - -VkImageMemoryBarrier makeImageMemoryBarrier (const VkAccessFlags srcAccessMask, - const VkAccessFlags dstAccessMask, - const VkImageLayout oldLayout, - const VkImageLayout newLayout, - const VkImage image, - const VkImageSubresourceRange subresourceRange) -{ - const VkImageMemoryBarrier barrier = - { - VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; - DE_NULL, // const void* pNext; - srcAccessMask, // VkAccessFlags outputMask; - dstAccessMask, // VkAccessFlags inputMask; - oldLayout, // VkImageLayout oldLayout; - newLayout, // VkImageLayout newLayout; - VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; - VK_QUEUE_FAMILY_IGNORED, // deUint32 destQueueFamilyIndex; - image, // VkImage image; - subresourceRange, // VkImageSubresourceRange subresourceRange; - }; - return barrier; -} - -VkBufferMemoryBarrier makeBufferMemoryBarrier (const VkAccessFlags srcAccessMask, - const VkAccessFlags dstAccessMask, - const VkBuffer buffer, - const VkDeviceSize offset, - const VkDeviceSize bufferSizeBytes) -{ - const VkBufferMemoryBarrier barrier = - { - VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // VkStructureType sType; - DE_NULL, // const void* pNext; - srcAccessMask, // VkAccessFlags srcAccessMask; - dstAccessMask, // VkAccessFlags dstAccessMask; - VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; - VK_QUEUE_FAMILY_IGNORED, // deUint32 destQueueFamilyIndex; - buffer, // VkBuffer buffer; - offset, // VkDeviceSize offset; - bufferSizeBytes, // VkDeviceSize size; - }; - return barrier; -} - -tcu::TestStatus vkt::subgroups::makeVertexFrameBufferTest(Context& context, vk::VkFormat format, - SSBOData* extraData, deUint32 extraDataCount, - bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)) -{ - const deUint32 maxWidth = 1024u; - vector > inputBuffers (extraDataCount); - DescriptorSetLayoutBuilder layoutBuilder; - const Unique vertexShaderModule (createShaderModule - (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("vert"), 0u)); - const Unique fragmentShaderModule (createShaderModule - (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("fragment"), 0u)); - const Unique renderPass (makeRenderPass(context, format)); - - const VkVertexInputBindingDescription vertexInputBinding = - { - 0u, // binding; - static_cast(sizeof(tcu::Vec4)), // stride; - VK_VERTEX_INPUT_RATE_VERTEX // inputRate - }; - - const VkVertexInputAttributeDescription vertexInputAttribute = - { - 0u, - 0u, - VK_FORMAT_R32G32B32A32_SFLOAT, - 0u - }; - - for (deUint32 i = 0u; i < extraDataCount; i++) - { - if (extraData[i].isImage) - { - inputBuffers[i] = de::SharedPtr(new Image(context, static_cast(extraData[i].numElements), 1u, extraData[i].format)); - } - else - { - vk::VkDeviceSize size = getFormatSizeInBytes(extraData[i].format) * extraData[i].numElements; - inputBuffers[i] = de::SharedPtr(new Buffer(context, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)); - } - const Allocation& alloc = inputBuffers[i]->getAllocation(); - initializeMemory(context, alloc, extraData[i]); - } - - for (deUint32 ndx = 0u; ndx < extraDataCount; ndx++) - layoutBuilder.addBinding(inputBuffers[ndx]->getType(), 1u, VK_SHADER_STAGE_VERTEX_BIT, DE_NULL); - - const Unique descriptorSetLayout (layoutBuilder.build(context.getDeviceInterface(), context.getDevice())); - - const Unique pipelineLayout (makePipelineLayout(context, *descriptorSetLayout)); - - const Unique pipeline (makeGraphicsPipeline(context, *pipelineLayout, - VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, - *vertexShaderModule, *fragmentShaderModule, - DE_NULL, DE_NULL, DE_NULL, - *renderPass, VK_PRIMITIVE_TOPOLOGY_POINT_LIST, - &vertexInputBinding, &vertexInputAttribute, format)); - DescriptorPoolBuilder poolBuilder; - DescriptorSetUpdateBuilder updateBuilder; - - - for (deUint32 ndx = 0u; ndx < inputBuffers.size(); ndx++) - poolBuilder.addType(inputBuffers[ndx]->getType()); - - Move descriptorPool; - Move descriptorSet; - - if (extraDataCount > 0) - { - descriptorPool = poolBuilder.build(context.getDeviceInterface(), context.getDevice(), - VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u); - descriptorSet = makeDescriptorSet(context, *descriptorPool, *descriptorSetLayout); - } - - for (deUint32 ndx = 0u; ndx < extraDataCount; ndx++) - { - const Allocation& alloc = inputBuffers[ndx]->getAllocation(); - initializeMemory(context, alloc, extraData[ndx]); - } - - for (deUint32 buffersNdx = 0u; buffersNdx < inputBuffers.size(); buffersNdx++) - { - if (inputBuffers[buffersNdx]->isImage()) - { - VkDescriptorImageInfo info = - makeDescriptorImageInfo(inputBuffers[buffersNdx]->getAsImage()->getSampler(), - inputBuffers[buffersNdx]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); - - updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(buffersNdx), - inputBuffers[buffersNdx]->getType(), &info); - } - else - { - VkDescriptorBufferInfo info = - makeDescriptorBufferInfo(inputBuffers[buffersNdx]->getAsBuffer()->getBuffer(), - 0ull, inputBuffers[buffersNdx]->getAsBuffer()->getSize()); - - updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(buffersNdx), - inputBuffers[buffersNdx]->getType(), &info); - } - } - updateBuilder.update(context.getDeviceInterface(), context.getDevice()); - - const Unique cmdPool (makeCommandPool(context)); - - const deUint32 subgroupSize = getSubgroupSize(context); - - const Unique cmdBuffer (makeCommandBuffer(context, *cmdPool)); - - const vk::VkDeviceSize vertexBufferSize = maxWidth * sizeof(tcu::Vec4); - Buffer vertexBuffer (context, vertexBufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT); - - unsigned totalIterations = 0u; - unsigned failedIterations = 0u; - - Image discardableImage (context, maxWidth, 1u, format, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT); - - { - const Allocation& alloc = vertexBuffer.getAllocation(); - std::vector data (maxWidth, Vec4(1.0f, 1.0f, 1.0f, 1.0f)); - const float pixelSize = 2.0f / static_cast(maxWidth); - float leftHandPosition = -1.0f; - - for(deUint32 ndx = 0u; ndx < maxWidth; ++ndx) - { - data[ndx][0] = leftHandPosition + pixelSize / 2.0f; - leftHandPosition += pixelSize; - } - - deMemcpy(alloc.getHostPtr(), &data[0], maxWidth * sizeof(tcu::Vec4)); - vk::flushMappedMemoryRange(context.getDeviceInterface(), context.getDevice(), alloc.getMemory(), alloc.getOffset(), vertexBufferSize); - } - - for (deUint32 width = 1u; width < maxWidth; width++) - { - totalIterations++; - const Unique framebuffer (makeFramebuffer(context, *renderPass, discardableImage.getImageView(), maxWidth, 1)); - const VkClearValue clearValue = {{{0.0f, 0.0f, 0.0f, 0.0f}}}; - const VkViewport viewport = {0.0f, 0.0f, static_cast(maxWidth), 1.0f, 0.0f, 1.0f}; - const VkRect2D scissor = {{0, 0}, {maxWidth, 1}}; - const vk::VkDeviceSize imageResultSize = tcu::getPixelSize(vk::mapVkFormat(format)) * maxWidth; - Buffer imageBufferResult (context, imageResultSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT); - const VkDeviceSize vertexBufferOffset = 0u; - - for (deUint32 ndx = 0u; ndx < inputBuffers.size(); ndx++) - { - const Allocation& alloc = inputBuffers[ndx]->getAllocation(); - initializeMemory(context, alloc, extraData[ndx]); - } - - const VkRenderPassBeginInfo renderPassBeginInfo = - { - VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, DE_NULL, *renderPass, - *framebuffer, {{0, 0}, {maxWidth, 1}}, 1, &clearValue, - }; - - beginCommandBuffer(context, *cmdBuffer); - { - context.getDeviceInterface().cmdSetViewport( - *cmdBuffer, 0, 1, &viewport); - - context.getDeviceInterface().cmdSetScissor( - *cmdBuffer, 0, 1, &scissor); - - context.getDeviceInterface().cmdBeginRenderPass( - *cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); - - context.getDeviceInterface().cmdBindPipeline( - *cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); - - if (extraDataCount > 0) - { - context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, - &descriptorSet.get(), 0u, DE_NULL); - } - - context.getDeviceInterface().cmdBindVertexBuffers(*cmdBuffer, 0u, 1u, vertexBuffer.getBufferPtr(), &vertexBufferOffset); - - context.getDeviceInterface().cmdDraw(*cmdBuffer, width, 1u, 0u, 0u); - - context.getDeviceInterface().cmdEndRenderPass(*cmdBuffer); - - const VkImageSubresourceRange subresourceRange = - { - VK_IMAGE_ASPECT_COLOR_BIT, //VkImageAspectFlags aspectMask - 0u, //deUint32 baseMipLevel - 1u, //deUint32 levelCount - 0u, //deUint32 baseArrayLayer - 1u //deUint32 layerCount - }; - - const VkBufferImageCopy copyRegion = - { - 0ull, // VkDeviceSize bufferOffset; - 0u, // deUint32 bufferRowLength; - 0u, // deUint32 bufferImageHeight; - makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u), // VkImageSubresourceLayers imageSubresource; - makeOffset3D(0, 0, 0), // VkOffset3D imageOffset; - makeExtent3D(IVec3(maxWidth,1,1)), // VkExtent3D imageExtent; - }; - - const VkImageMemoryBarrier prepareForTransferBarrier = makeImageMemoryBarrier( - VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - discardableImage.getImage(), subresourceRange); - - const VkBufferMemoryBarrier copyBarrier = makeBufferMemoryBarrier( - VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, - imageBufferResult.getBuffer(), 0ull, imageResultSize); - - context.getDeviceInterface().cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 0u, (const VkBufferMemoryBarrier*)DE_NULL, 1u, &prepareForTransferBarrier); - context.getDeviceInterface().cmdCopyImageToBuffer(*cmdBuffer, discardableImage.getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, imageBufferResult.getBuffer(), 1u, ©Region); - context.getDeviceInterface().cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 1u, ©Barrier, 0u, (const VkImageMemoryBarrier*)DE_NULL); - - endCommandBuffer(context, *cmdBuffer); - Move fence(submitCommandBuffer(context, *cmdBuffer)); - waitFence(context, fence); - } - - { - const Allocation& allocResult = imageBufferResult.getAllocation(); - invalidateMappedMemoryRange(context.getDeviceInterface(), context.getDevice(), allocResult.getMemory(), allocResult.getOffset(), imageResultSize); - - std::vector datas; - datas.push_back(allocResult.getHostPtr()); - if (!checkResult(datas, width, subgroupSize)) - failedIterations++; - } - } - - if (0 < failedIterations) - { - context.getTestContext().getLog() - << TestLog::Message << (totalIterations - failedIterations) << " / " - << totalIterations << " values passed" << TestLog::EndMessage; - return tcu::TestStatus::fail("Failed!"); - } - - return tcu::TestStatus::pass("OK"); -} - -tcu::TestStatus vkt::subgroups::makeVertexTest( - Context& context, VkFormat format, SSBOData* extraDatas, - deUint32 extraDatasCount, - bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)) -{ - const deUint32 maxWidth = 1024; - - const Unique vertexShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("vert"), 0u)); - - std::vector< de::SharedPtr > inputBuffers(extraDatasCount + 1); - - // The implicit result SSBO we use to store our outputs from the vertex shader - { - vk::VkDeviceSize size = getFormatSizeInBytes(format) * maxWidth; - inputBuffers[0] = de::SharedPtr(new Buffer(context, size)); - } - - for (deUint32 i = 0; i < (inputBuffers.size() - 1); i++) - { - if (extraDatas[i].isImage) - { - inputBuffers[i + 1] = de::SharedPtr(new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); - } - else - { - vk::VkDeviceSize size = - getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i + 1] = de::SharedPtr(new Buffer(context, size)); - } - - const Allocation& alloc = inputBuffers[i + 1]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i]); - } - - DescriptorSetLayoutBuilder layoutBuilder; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - layoutBuilder.addBinding(inputBuffers[i]->getType(), 1, - VK_SHADER_STAGE_VERTEX_BIT, DE_NULL); - } - - const Unique descriptorSetLayout( - layoutBuilder.build(context.getDeviceInterface(), context.getDevice())); - - const Unique pipelineLayout( - makePipelineLayout(context, *descriptorSetLayout)); - - const Unique renderPass(makeRenderPass(context, VK_FORMAT_R32_SFLOAT)); - const Unique pipeline(makeGraphicsPipeline(context, *pipelineLayout, - VK_SHADER_STAGE_VERTEX_BIT, *vertexShaderModule, DE_NULL, DE_NULL, DE_NULL, DE_NULL, - *renderPass, VK_PRIMITIVE_TOPOLOGY_POINT_LIST)); - - DescriptorPoolBuilder poolBuilder; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - poolBuilder.addType(inputBuffers[i]->getType()); - } - - const Unique descriptorPool( - poolBuilder.build(context.getDeviceInterface(), context.getDevice(), - VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u)); - - // Create descriptor set - const Unique descriptorSet( - makeDescriptorSet(context, *descriptorPool, *descriptorSetLayout)); - - DescriptorSetUpdateBuilder updateBuilder; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - if (inputBuffers[i]->isImage()) - { - VkDescriptorImageInfo info = - makeDescriptorImageInfo(inputBuffers[i]->getAsImage()->getSampler(), - inputBuffers[i]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); - - updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); - } - else - { - VkDescriptorBufferInfo info = - makeDescriptorBufferInfo(inputBuffers[i]->getAsBuffer()->getBuffer(), - 0ull, inputBuffers[i]->getAsBuffer()->getSize()); - - updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); - } - } - - updateBuilder.update(context.getDeviceInterface(), context.getDevice()); - - const Unique cmdPool(makeCommandPool(context)); - - const deUint32 subgroupSize = getSubgroupSize(context); - - const Unique cmdBuffer( - makeCommandBuffer(context, *cmdPool)); - - unsigned totalIterations = 0; - unsigned failedIterations = 0; - - Image discardableImage(context, 1, 1, VK_FORMAT_R32_SFLOAT, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | - VK_IMAGE_USAGE_TRANSFER_SRC_BIT); - - for (deUint32 width = 1; width < maxWidth; width++) - { - for (deUint32 i = 1; i < inputBuffers.size(); i++) - { - // re-init the data - const Allocation& alloc = inputBuffers[i]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i - 1]); - } - - totalIterations++; - - const Unique framebuffer(makeFramebuffer(context, - *renderPass, discardableImage.getImageView(), 1, 1)); - - const VkClearValue clearValue = {{{0.0f, 0.0f, 0.0f, 0.0f}}}; - - const VkRenderPassBeginInfo renderPassBeginInfo = { - VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, DE_NULL, *renderPass, - *framebuffer, {{0, 0}, {1, 1}}, 1, &clearValue, - }; - - beginCommandBuffer(context, *cmdBuffer); - - VkViewport viewport = {0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f}; - - context.getDeviceInterface().cmdSetViewport( - *cmdBuffer, 0, 1, &viewport); - - VkRect2D scissor = {{0, 0}, {1, 1}}; - - context.getDeviceInterface().cmdSetScissor( - *cmdBuffer, 0, 1, &scissor); - - context.getDeviceInterface().cmdBeginRenderPass( - *cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); - - context.getDeviceInterface().cmdBindPipeline( - *cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); - - context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, - &descriptorSet.get(), 0u, DE_NULL); - - context.getDeviceInterface().cmdDraw(*cmdBuffer, width, 1, 0, 0); - - context.getDeviceInterface().cmdEndRenderPass(*cmdBuffer); - - endCommandBuffer(context, *cmdBuffer); - - Move fence(submitCommandBuffer(context, *cmdBuffer)); - - waitFence(context, fence); - - std::vector datas; - - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - if (!inputBuffers[i]->isImage()) - { - const Allocation& resultAlloc = inputBuffers[i]->getAllocation(); - invalidateMappedMemoryRange(context.getDeviceInterface(), - context.getDevice(), resultAlloc.getMemory(), - resultAlloc.getOffset(), inputBuffers[i]->getAsBuffer()->getSize()); - - // we always have our result data first - datas.push_back(resultAlloc.getHostPtr()); - } - } - if (!checkResult(datas, width, subgroupSize)) - { - failedIterations++; - } - - context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); - } - - if (0 < failedIterations) - { - context.getTestContext().getLog() - << TestLog::Message << (totalIterations - failedIterations) << " / " - << totalIterations << " values passed" << TestLog::EndMessage; - return tcu::TestStatus::fail("Failed!"); - } - - return tcu::TestStatus::pass("OK"); -} - -tcu::TestStatus vkt::subgroups::makeFragmentFrameBufferTest (Context& context, VkFormat format, SSBOData* extraDatas, - deUint32 extraDatasCount, - bool (*checkResult)(std::vector datas, deUint32 width, - deUint32 height, deUint32 subgroupSize)) -{ - const Unique vertexShaderModule (createShaderModule - (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("vert"), 0u)); - const Unique fragmentShaderModule (createShaderModule - (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("fragment"), 0u)); - - std::vector< de::SharedPtr > inputBuffers(extraDatasCount); - - for (deUint32 i = 0; i < extraDatasCount; i++) - { - if (extraDatas[i].isImage) - { - inputBuffers[i] = de::SharedPtr(new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); - } - else - { - vk::VkDeviceSize size = - getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i] = de::SharedPtr(new Buffer(context, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)); - } - - const Allocation& alloc = inputBuffers[i]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i]); - } - - DescriptorSetLayoutBuilder layoutBuilder; - - for (deUint32 i = 0; i < extraDatasCount; i++) - { - layoutBuilder.addBinding(inputBuffers[i]->getType(), 1, - VK_SHADER_STAGE_FRAGMENT_BIT, DE_NULL); - } - - const Unique descriptorSetLayout( - layoutBuilder.build(context.getDeviceInterface(), context.getDevice())); - - const Unique pipelineLayout( - makePipelineLayout(context, *descriptorSetLayout)); - - const Unique renderPass(makeRenderPass(context, format)); - const Unique pipeline(makeGraphicsPipeline(context, *pipelineLayout, - VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, - *vertexShaderModule, *fragmentShaderModule, DE_NULL, DE_NULL, DE_NULL, *renderPass)); + const Unique pipeline (makeGraphicsPipeline(context, *pipelineLayout, + VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, + *vertexShaderModule, *fragmentShaderModule, + DE_NULL, DE_NULL, DE_NULL, + *renderPass, VK_PRIMITIVE_TOPOLOGY_POINT_LIST, + &vertexInputBinding, &vertexInputAttribute, format)); + DescriptorPoolBuilder poolBuilder; + DescriptorSetUpdateBuilder updateBuilder; - DescriptorPoolBuilder poolBuilder; - // To stop validation complaining, always add at least one type to pool. - poolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); - for (deUint32 i = 0; i < extraDatasCount; i++) - { - poolBuilder.addType(inputBuffers[i]->getType()); - } + for (deUint32 ndx = 0u; ndx < inputBuffers.size(); ndx++) + poolBuilder.addType(inputBuffers[ndx]->getType()); - Move descriptorPool; - // Create descriptor set - Move descriptorSet; + Move descriptorPool; + Move descriptorSet; - if (extraDatasCount > 0) + if (extraDataCount > 0) { descriptorPool = poolBuilder.build(context.getDeviceInterface(), context.getDevice(), - VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u); - - descriptorSet = makeDescriptorSet(context, *descriptorPool, *descriptorSetLayout); + VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u); + descriptorSet = makeDescriptorSet(context, *descriptorPool, *descriptorSetLayout); } - DescriptorSetUpdateBuilder updateBuilder; + for (deUint32 ndx = 0u; ndx < extraDataCount; ndx++) + { + const Allocation& alloc = inputBuffers[ndx]->getAllocation(); + initializeMemory(context, alloc, extraData[ndx]); + } - for (deUint32 i = 0; i < extraDatasCount; i++) + for (deUint32 buffersNdx = 0u; buffersNdx < inputBuffers.size(); buffersNdx++) { - if (inputBuffers[i]->isImage()) + if (inputBuffers[buffersNdx]->isImage()) { VkDescriptorImageInfo info = - makeDescriptorImageInfo(inputBuffers[i]->getAsImage()->getSampler(), - inputBuffers[i]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); + makeDescriptorImageInfo(inputBuffers[buffersNdx]->getAsImage()->getSampler(), + inputBuffers[buffersNdx]->getAsImage()->getImageView(), VK_IMAGE_LAYOUT_GENERAL); updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); + DescriptorSetUpdateBuilder::Location::binding(buffersNdx), + inputBuffers[buffersNdx]->getType(), &info); } else { VkDescriptorBufferInfo info = - makeDescriptorBufferInfo(inputBuffers[i]->getAsBuffer()->getBuffer(), - 0ull, inputBuffers[i]->getAsBuffer()->getSize()); + makeDescriptorBufferInfo(inputBuffers[buffersNdx]->getAsBuffer()->getBuffer(), + 0ull, inputBuffers[buffersNdx]->getAsBuffer()->getSize()); updateBuilder.writeSingle(*descriptorSet, - DescriptorSetUpdateBuilder::Location::binding(i), - inputBuffers[i]->getType(), &info); + DescriptorSetUpdateBuilder::Location::binding(buffersNdx), + inputBuffers[buffersNdx]->getType(), &info); } } + updateBuilder.update(context.getDeviceInterface(), context.getDevice()); - if (extraDatasCount > 0) - updateBuilder.update(context.getDeviceInterface(), context.getDevice()); - - const Unique cmdPool(makeCommandPool(context)); - - const deUint32 subgroupSize = getSubgroupSize(context); - - const Unique cmdBuffer( - makeCommandBuffer(context, *cmdPool)); + const Unique cmdPool (makeCommandPool(context)); - unsigned totalIterations = 0; - unsigned failedIterations = 0; + const deUint32 subgroupSize = getSubgroupSize(context); - for (deUint32 width = 8; width <= subgroupSize; width *= 2) - { - for (deUint32 height = 8; height <= subgroupSize; height *= 2) - { - totalIterations++; + const Unique cmdBuffer (makeCommandBuffer(context, *cmdPool)); - // re-init the data - for (deUint32 i = 0; i < extraDatasCount; i++) - { - const Allocation& alloc = inputBuffers[i]->getAllocation(); - initializeMemory(context, alloc, extraDatas[i]); - } + const vk::VkDeviceSize vertexBufferSize = maxWidth * sizeof(tcu::Vec4); + Buffer vertexBuffer (context, vertexBufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT); - VkDeviceSize formatSize = getFormatSizeInBytes(format); - const VkDeviceSize resultImageSizeInBytes = - width * height * formatSize; + unsigned totalIterations = 0u; + unsigned failedIterations = 0u; - Image resultImage(context, width, height, format, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | - VK_IMAGE_USAGE_TRANSFER_SRC_BIT); + Image discardableImage (context, maxWidth, 1u, format, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT); - Buffer resultBuffer(context, resultImageSizeInBytes, - VK_IMAGE_USAGE_TRANSFER_DST_BIT); + { + const Allocation& alloc = vertexBuffer.getAllocation(); + std::vector data (maxWidth, Vec4(1.0f, 1.0f, 1.0f, 1.0f)); + const float pixelSize = 2.0f / static_cast(maxWidth); + float leftHandPosition = -1.0f; - const Unique framebuffer(makeFramebuffer(context, - *renderPass, resultImage.getImageView(), width, height)); + for(deUint32 ndx = 0u; ndx < maxWidth; ++ndx) + { + data[ndx][0] = leftHandPosition + pixelSize / 2.0f; + leftHandPosition += pixelSize; + } - const VkClearValue clearValue = {{{0.0f, 0.0f, 0.0f, 0.0f}}}; + deMemcpy(alloc.getHostPtr(), &data[0], maxWidth * sizeof(tcu::Vec4)); + vk::flushMappedMemoryRange(context.getDeviceInterface(), context.getDevice(), alloc.getMemory(), alloc.getOffset(), vertexBufferSize); + } - const VkRenderPassBeginInfo renderPassBeginInfo = { - VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, DE_NULL, *renderPass, - *framebuffer, {{0, 0}, {width, height}}, 1, &clearValue, - }; + for (deUint32 width = 1u; width < maxWidth; width++) + { + totalIterations++; + const Unique framebuffer (makeFramebuffer(context, *renderPass, discardableImage.getImageView(), maxWidth, 1)); + const VkClearValue clearValue = {{{0.0f, 0.0f, 0.0f, 0.0f}}}; + const VkViewport viewport = {0.0f, 0.0f, static_cast(maxWidth), 1.0f, 0.0f, 1.0f}; + const VkRect2D scissor = {{0, 0}, {maxWidth, 1}}; + const vk::VkDeviceSize imageResultSize = tcu::getPixelSize(vk::mapVkFormat(format)) * maxWidth; + Buffer imageBufferResult (context, imageResultSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT); + const VkDeviceSize vertexBufferOffset = 0u; - beginCommandBuffer(context, *cmdBuffer); + for (deUint32 ndx = 0u; ndx < inputBuffers.size(); ndx++) + { + const Allocation& alloc = inputBuffers[ndx]->getAllocation(); + initializeMemory(context, alloc, extraData[ndx]); + } - VkViewport viewport = {0.0f, 0.0f, static_cast(width), - static_cast(height), 0.0f, 1.0f - }; + const VkRenderPassBeginInfo renderPassBeginInfo = + { + VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, DE_NULL, *renderPass, + *framebuffer, {{0, 0}, {maxWidth, 1}}, 1, &clearValue, + }; + beginCommandBuffer(context, *cmdBuffer); + { context.getDeviceInterface().cmdSetViewport( *cmdBuffer, 0, 1, &viewport); - VkRect2D scissor = {{0, 0}, {width, height}}; - context.getDeviceInterface().cmdSetScissor( *cmdBuffer, 0, 1, &scissor); @@ -2301,48 +1848,64 @@ tcu::TestStatus vkt::subgroups::makeFragmentFrameBufferTest (Context& context, V context.getDeviceInterface().cmdBindPipeline( *cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); - if (extraDatasCount > 0) + if (extraDataCount > 0) { context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, - &descriptorSet.get(), 0u, DE_NULL); + VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, + &descriptorSet.get(), 0u, DE_NULL); } - context.getDeviceInterface().cmdDraw(*cmdBuffer, 3, 1, 0, 0); + context.getDeviceInterface().cmdBindVertexBuffers(*cmdBuffer, 0u, 1u, vertexBuffer.getBufferPtr(), &vertexBufferOffset); + + context.getDeviceInterface().cmdDraw(*cmdBuffer, width, 1u, 0u, 0u); context.getDeviceInterface().cmdEndRenderPass(*cmdBuffer); - vk::VkBufferImageCopy region = {0, 0, 0, - {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0}, - {width, height, 1} + const VkImageSubresourceRange subresourceRange = + { + VK_IMAGE_ASPECT_COLOR_BIT, //VkImageAspectFlags aspectMask + 0u, //deUint32 baseMipLevel + 1u, //deUint32 levelCount + 0u, //deUint32 baseArrayLayer + 1u //deUint32 layerCount }; - context.getDeviceInterface().cmdCopyImageToBuffer(*cmdBuffer, - resultImage.getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - resultBuffer.getBuffer(), 1, ®ion); - endCommandBuffer(context, *cmdBuffer); + const VkBufferImageCopy copyRegion = + { + 0ull, // VkDeviceSize bufferOffset; + 0u, // deUint32 bufferRowLength; + 0u, // deUint32 bufferImageHeight; + makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u), // VkImageSubresourceLayers imageSubresource; + makeOffset3D(0, 0, 0), // VkOffset3D imageOffset; + makeExtent3D(IVec3(maxWidth,1,1)), // VkExtent3D imageExtent; + }; - Move fence(submitCommandBuffer(context, *cmdBuffer)); + const VkImageMemoryBarrier prepareForTransferBarrier = makeImageMemoryBarrier( + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, + VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + discardableImage.getImage(), subresourceRange); - waitFence(context, fence); + const VkBufferMemoryBarrier copyBarrier = makeBufferMemoryBarrier( + VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, + imageBufferResult.getBuffer(), 0ull, imageResultSize); - std::vector datas; - { - const Allocation& resultAlloc = resultBuffer.getAllocation(); - invalidateMappedMemoryRange(context.getDeviceInterface(), - context.getDevice(), resultAlloc.getMemory(), - resultAlloc.getOffset(), resultImageSizeInBytes); + context.getDeviceInterface().cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 0u, (const VkBufferMemoryBarrier*)DE_NULL, 1u, &prepareForTransferBarrier); + context.getDeviceInterface().cmdCopyImageToBuffer(*cmdBuffer, discardableImage.getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, imageBufferResult.getBuffer(), 1u, ©Region); + context.getDeviceInterface().cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 1u, ©Barrier, 0u, (const VkImageMemoryBarrier*)DE_NULL); - // we always have our result data first - datas.push_back(resultAlloc.getHostPtr()); - } + endCommandBuffer(context, *cmdBuffer); + Move fence(submitCommandBuffer(context, *cmdBuffer)); + waitFence(context, fence); + } - if (!checkResult(datas, width, height, subgroupSize)) - { - failedIterations++; - } + { + const Allocation& allocResult = imageBufferResult.getAllocation(); + invalidateMappedMemoryRange(context.getDeviceInterface(), context.getDevice(), allocResult.getMemory(), allocResult.getOffset(), imageResultSize); - context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); + std::vector datas; + datas.push_back(allocResult.getHostPtr()); + if (!checkResult(datas, width, subgroupSize)) + failedIterations++; } } @@ -2357,18 +1920,16 @@ tcu::TestStatus vkt::subgroups::makeFragmentFrameBufferTest (Context& context, V return tcu::TestStatus::pass("OK"); } -tcu::TestStatus vkt::subgroups::makeFragmentTest( - Context& context, VkFormat format, SSBOData* extraDatas, + +tcu::TestStatus vkt::subgroups::makeFragmentFrameBufferTest (Context& context, VkFormat format, SSBOData* extraDatas, deUint32 extraDatasCount, bool (*checkResult)(std::vector datas, deUint32 width, deUint32 height, deUint32 subgroupSize)) { - const Unique vertexShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("vert"), 0u)); - const Unique fragmentShaderModule( - createShaderModule(context.getDeviceInterface(), context.getDevice(), - context.getBinaryCollection().get("frag"), 0u)); + const Unique vertexShaderModule (createShaderModule + (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("vert"), 0u)); + const Unique fragmentShaderModule (createShaderModule + (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("fragment"), 0u)); std::vector< de::SharedPtr > inputBuffers(extraDatasCount); @@ -2383,7 +1944,7 @@ tcu::TestStatus vkt::subgroups::makeFragmentTest( { vk::VkDeviceSize size = getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i] = de::SharedPtr(new Buffer(context, size)); + inputBuffers[i] = de::SharedPtr(new Buffer(context, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)); } const Allocation& alloc = inputBuffers[i]->getAllocation(); @@ -2418,13 +1979,17 @@ tcu::TestStatus vkt::subgroups::makeFragmentTest( poolBuilder.addType(inputBuffers[i]->getType()); } - const Unique descriptorPool( - poolBuilder.build(context.getDeviceInterface(), context.getDevice(), - VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u)); - + Move descriptorPool; // Create descriptor set - const Unique descriptorSet( - makeDescriptorSet(context, *descriptorPool, *descriptorSetLayout)); + Move descriptorSet; + + if (extraDatasCount > 0) + { + descriptorPool = poolBuilder.build(context.getDeviceInterface(), context.getDevice(), + VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u); + + descriptorSet = makeDescriptorSet(context, *descriptorPool, *descriptorSetLayout); + } DescriptorSetUpdateBuilder updateBuilder; @@ -2452,7 +2017,8 @@ tcu::TestStatus vkt::subgroups::makeFragmentTest( } } - updateBuilder.update(context.getDeviceInterface(), context.getDevice()); + if (extraDatasCount > 0) + updateBuilder.update(context.getDeviceInterface(), context.getDevice()); const Unique cmdPool(makeCommandPool(context)); @@ -2518,9 +2084,12 @@ tcu::TestStatus vkt::subgroups::makeFragmentTest( context.getDeviceInterface().cmdBindPipeline( *cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); - context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, - &descriptorSet.get(), 0u, DE_NULL); + if (extraDatasCount > 0) + { + context.getDeviceInterface().cmdBindDescriptorSets(*cmdBuffer, + VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1u, + &descriptorSet.get(), 0u, DE_NULL); + } context.getDeviceInterface().cmdDraw(*cmdBuffer, 3, 1, 0, 0); @@ -2551,20 +2120,6 @@ tcu::TestStatus vkt::subgroups::makeFragmentTest( datas.push_back(resultAlloc.getHostPtr()); } - for (deUint32 i = 0; i < extraDatasCount; i++) - { - if (!inputBuffers[i]->isImage()) - { - const Allocation& resultAlloc = inputBuffers[i]->getAllocation(); - invalidateMappedMemoryRange(context.getDeviceInterface(), - context.getDevice(), resultAlloc.getMemory(), - resultAlloc.getOffset(), inputBuffers[i]->getAsBuffer()->getSize()); - - // we always have our result data first - datas.push_back(resultAlloc.getHostPtr()); - } - } - if (!checkResult(datas, width, height, subgroupSize)) { failedIterations++; diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp index cd81d49..46ca873 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.hpp @@ -57,10 +57,13 @@ namespace subgroups struct SSBOData { SSBOData() : - initializeType(InitializeNone), - format(vk::VK_FORMAT_UNDEFINED), - numElements(0), - isImage(false) {} + initializeType (InitializeNone), + format (vk::VK_FORMAT_UNDEFINED), + numElements (0), + isImage (false), + binding (0u), + stages ((vk::VkShaderStageFlagBits)0u) + {} enum InputDataInitializeType { @@ -69,9 +72,11 @@ struct SSBOData InitializeZero, } initializeType; - vk::VkFormat format; - vk::VkDeviceSize numElements; - bool isImage; + vk::VkFormat format; + vk::VkDeviceSize numElements; + bool isImage; + deUint32 binding; + vk::VkShaderStageFlagBits stages; }; std::string getSharedMemoryBallotHelper(); @@ -84,7 +89,9 @@ std::string getShaderStageName(vk::VkShaderStageFlags stage); std::string getSubgroupFeatureName(vk::VkSubgroupFeatureFlagBits bit); -std::string getVertShaderForStage(vk::VkShaderStageFlags stage); +void addNoSubgroupShader (vk::SourceCollections& programCollection); + +std::string getVertShaderForStage(vk::VkShaderStageFlags stage);//TODO bool isSubgroupSupported(Context& context); @@ -105,36 +112,20 @@ bool isDoubleFormat(vk::VkFormat format); std::string getFormatNameForGLSL(vk::VkFormat format); -tcu::TestStatus makeTessellationEvaluationTest(Context& context, vk::VkFormat format, - SSBOData* extraData, deUint32 extraDataCount, - bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)); - -tcu::TestStatus makeTessellationControlTest(Context& context, vk::VkFormat format, +tcu::TestStatus allStages(Context& context, vk::VkFormat format, SSBOData* extraData, deUint32 extraDataCount, - bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)); - -tcu::TestStatus makeGeometryTest(Context& context, vk::VkFormat format, - SSBOData* extraData, deUint32 extraDataCount, - bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)); + bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize), + const vk::VkShaderStageFlags shaderStage); tcu::TestStatus makeVertexFrameBufferTest(Context& context, vk::VkFormat format, SSBOData* extraData, deUint32 extraDataCount, bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)); -tcu::TestStatus makeVertexTest(Context& context, vk::VkFormat format, - SSBOData* extraData, deUint32 extraDataCount, - bool (*checkResult)(std::vector datas, deUint32 width, deUint32 subgroupSize)); - tcu::TestStatus makeFragmentFrameBufferTest(Context& context, vk::VkFormat format, SSBOData* extraData, deUint32 extraDataCount, bool (*checkResult)(std::vector datas, deUint32 width, deUint32 height, deUint32 subgroupSize)); -tcu::TestStatus makeFragmentTest(Context& context, vk::VkFormat format, - SSBOData* extraData, deUint32 extraDataCount, - bool (*checkResult)(std::vector datas, deUint32 width, - deUint32 height, deUint32 subgroupSize)); - tcu::TestStatus makeComputeTest( Context& context, vk::VkFormat format, SSBOData* inputs, deUint32 inputsCount, diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp index baa5348..c895b8e 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsVoteTests.cpp @@ -79,27 +79,6 @@ static bool checkVertexPipelineStagesNoSSBO(std::vector datas, return true; } -static bool checkFragment(std::vector datas, deUint32 width, - deUint32 height, deUint32) -{ - const deUint32* data = - reinterpret_cast(datas[0]); - for (deUint32 x = 0; x < width; ++x) - { - for (deUint32 y = 0; y < height; ++y) - { - deUint32 val = data[x * height + y]; - - if (0x7 != val) - { - return false; - } - } - } - - return true; -} - static bool checkCompute(std::vector datas, const deUint32 numWorkgroups[3], const deUint32 localSize[3], deUint32) @@ -357,309 +336,197 @@ void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef) programCollection.glslSources.add("comp") << glu::ComputeSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream frag; - - frag << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_vote: enable\n" - << "layout(location = 0) out uint result;\n" - << "layout(set = 0, binding = 0, std430) readonly buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "void main (void)\n" - << "{\n"; - if (OPTYPE_ALL == caseDef.opType) - { - frag << " result = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result |= " << getOpTypeName(caseDef.opType) - << "(data[gl_SubgroupInvocationID] > 0) ? 0x4 : 0;\n"; - } - else if (OPTYPE_ANY == caseDef.opType) - { - frag << " result = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result |= " << getOpTypeName(caseDef.opType) - << "(data[gl_SubgroupInvocationID] == data[0]) ? 0x4 : 0;\n"; - } - else if (OPTYPE_ALLEQUAL == caseDef.opType) - { - frag << " result = " << getOpTypeName(caseDef.opType) << "(" - << subgroups::getFormatNameForGLSL(caseDef.format) << "(1)) ? 0x1 : 0;\n" - << " result |= " << getOpTypeName(caseDef.opType) - << "(gl_SubgroupInvocationID) ? 0 : 0x2;\n" - << " if (subgroupElect()) result |= 0x2;\n" - << " result |= " << getOpTypeName(caseDef.opType) - << "(data[0]) ? 0x4 : 0;\n"; - } - frag << "}\n"; - - programCollection.glslSources.add("frag") - << glu::FragmentSource(frag.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) + else { - std::ostringstream src; + const string source = + (OPTYPE_ALL == caseDef.opType) ? + " result[offset] = " + getOpTypeName(caseDef.opType) + + "(true) ? 0x1 : 0;\n" + " result[offset] |= " + getOpTypeName(caseDef.opType) + + "(false) ? 0 : 0x2;\n" + " result[offset] |= 0x4;\n" + : (OPTYPE_ANY == caseDef.opType) ? + " result[offset] = " + getOpTypeName(caseDef.opType) + + "(true) ? 0x1 : 0;\n" + " result[offset] |= " + getOpTypeName(caseDef.opType) + + "(false) ? 0 : 0x2;\n" + " result[offset] |= 0x4;\n" + : (OPTYPE_ALLEQUAL == caseDef.opType) ? + " result[offset] = " + getOpTypeName(caseDef.opType) + "(" + + subgroups::getFormatNameForGLSL(caseDef.format) + "(1)) ? 0x1 : 0;\n" + " result[offset] |= " + getOpTypeName(caseDef.opType) + + "(gl_SubgroupInvocationID) ? 0 : 0x2;\n" + " if (subgroupElect()) result[offset] |= 0x2;\n" + " result[offset] |= " + getOpTypeName(caseDef.opType) + + "(data[0]) ? 0x4 : 0;\n" + : ""; + + const string formatString = subgroups::getFormatNameForGLSL(caseDef.format); - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_vote: enable\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " highp uint offset = gl_VertexIndex;\n"; - if (OPTYPE_ALL == caseDef.opType) { - src << " result[offset] = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result[offset] |= 0x4;\n"; + const string vertex = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_vote: enable\n" + "layout(set = 0, binding = 0, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + formatString + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " highp uint offset = gl_VertexIndex;\n" + + source + + " float pixelSize = 2.0f/1024.0f;\n" + " float pixelPosition = pixelSize/2.0f - 1.0f;\n" + " gl_Position = vec4(float(gl_VertexIndex) * pixelSize + pixelPosition, 0.0f, 0.0f, 1.0f);\n" + "}\n"; + programCollection.glslSources.add("vert") + << glu::VertexSource(vertex) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (OPTYPE_ANY == caseDef.opType) - { - src << " result[offset] = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result[offset] |= 0x4;\n"; - } - else if (OPTYPE_ALLEQUAL == caseDef.opType) - { - src << " result[offset] = " << getOpTypeName(caseDef.opType) << "(" - << subgroups::getFormatNameForGLSL(caseDef.format) << "(1)) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(gl_SubgroupInvocationID) ? 0 : 0x2;\n" - << " if (subgroupElect()) result[offset] |= 0x2;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(data[0]) ? 0x4 : 0;\n"; - } - - src << "}\n"; - programCollection.glslSources.add("vert") - << glu::VertexSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_vote: enable\n" - << "layout(points) in;\n" - << "layout(points, max_vertices = 1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " highp uint offset = gl_PrimitiveIDIn;\n"; - if (OPTYPE_ALL == caseDef.opType) { - src << " result[offset] = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result[offset] |= 0x4;\n"; + const string tesc = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_vote: enable\n" + "layout(vertices=1) out;\n" + "layout(set = 0, binding = 1, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + formatString + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " highp uint offset = gl_PrimitiveID;\n" + + source + + " if (gl_InvocationID == 0)\n" + " {\n" + " gl_TessLevelOuter[0] = 1.0f;\n" + " gl_TessLevelOuter[1] = 1.0f;\n" + " }\n" + " gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n" + "}\n"; + + programCollection.glslSources.add("tesc") + << glu::TessellationControlSource(tesc) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (OPTYPE_ANY == caseDef.opType) - { - src << " result[offset] = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result[offset] |= 0x4;\n"; - } - else if (OPTYPE_ALLEQUAL == caseDef.opType) - { - src << " result[offset] = " << getOpTypeName(caseDef.opType) << "(" - << subgroups::getFormatNameForGLSL(caseDef.format) << "(1)) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(gl_SubgroupInvocationID) ? 0 : 0x2;\n" - << " if (subgroupElect()) result[offset] |= 0x2;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(data[0]) ? 0x4 : 0;\n"; - } - - src << "}\n"; - - programCollection.glslSources.add("geom") - << glu::GeometrySource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource("#version 450\nlayout(isolines) in;\nvoid main (void) {}\n"); - - std::ostringstream src; - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_vote: enable\n" - << "layout(vertices=1) out;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " highp uint offset = gl_PrimitiveID;\n"; - if (OPTYPE_ALL == caseDef.opType) - { - src << " result[offset] = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result[offset] |= 0x4;\n"; - } - else if (OPTYPE_ANY == caseDef.opType) - { - src << " result[offset] = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result[offset] |= 0x4;\n"; - } - else if (OPTYPE_ALLEQUAL == caseDef.opType) { - src << " result[offset] = " << getOpTypeName(caseDef.opType) << "(" - << subgroups::getFormatNameForGLSL(caseDef.format) << "(1)) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(gl_SubgroupInvocationID) ? 0 : 0x2;\n" - << " if (subgroupElect()) result[offset] |= 0x2;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(data[0]) ? 0x4 : 0;\n"; + const string tese = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_vote: enable\n" + "layout(isolines) in;\n" + "layout(set = 0, binding = 2, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + formatString + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " highp uint offset = gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5);\n" + + source + + " gl_Position = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);\n" + "}\n"; + + programCollection.glslSources.add("tese") + << glu::TessellationEvaluationSource(tese) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - src << "}\n"; - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { - programCollection.glslSources.add("vert") - << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage)) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - - programCollection.glslSources.add("tesc") - << glu::TessellationControlSource("#version 450\nlayout(vertices=1) out;\nvoid main (void) { for(uint i = 0; i < 4; i++) { gl_TessLevelOuter[i] = 1.0f; } }\n"); - - std::ostringstream src; - - src << "#version 450\n" - << "#extension GL_KHR_shader_subgroup_vote: enable\n" - << "layout(isolines) in;\n" - << "layout(set = 0, binding = 0, std430) buffer Buffer1\n" - << "{\n" - << " uint result[];\n" - << "};\n" - << "layout(set = 0, binding = 1, std430) buffer Buffer2\n" - << "{\n" - << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n" - << "};\n" - << "\n" - << "void main (void)\n" - << "{\n" - << " highp uint offset = gl_PrimitiveID * 2 + uint(gl_TessCoord.x + 0.5);\n"; - if (OPTYPE_ALL == caseDef.opType) - { - src << " result[offset] = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result[offset] |= 0x4;\n"; - } - else if (OPTYPE_ANY == caseDef.opType) { - src << " result[offset] = " << getOpTypeName(caseDef.opType) - << "(true) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(false) ? 0 : 0x2;\n" - << " result[offset] |= 0x4;\n"; + const string geometry = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_vote: enable\n" + "layout(points) in;\n" + "layout(points, max_vertices = 1) out;\n" + "layout(set = 0, binding = 3, std430) buffer Buffer1\n" + "{\n" + " uint result[];\n" + "};\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + formatString + " data[];\n" + "};\n" + "\n" + "void main (void)\n" + "{\n" + " highp uint offset = gl_PrimitiveIDIn;\n" + + source + + " gl_Position = gl_in[0].gl_Position;\n" + " EmitVertex();\n" + " EndPrimitive();\n" + "}\n"; + + programCollection.glslSources.add("geometry") + << glu::GeometrySource(geometry) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - else if (OPTYPE_ALLEQUAL == caseDef.opType) + { - src << " result[offset] = " << getOpTypeName(caseDef.opType) << "(" - << subgroups::getFormatNameForGLSL(caseDef.format) << "(1)) ? 0x1 : 0;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(gl_SubgroupInvocationID) ? 0 : 0x2;\n" - << " if (subgroupElect()) result[offset] |= 0x2;\n" - << " result[offset] |= " << getOpTypeName(caseDef.opType) - << "(data[0]) ? 0x4 : 0;\n"; + const string sourceFragment = + (OPTYPE_ALL == caseDef.opType) ? + " result = " + getOpTypeName(caseDef.opType) + + "(true) ? 0x1 : 0;\n" + " result |= " + getOpTypeName(caseDef.opType) + + "(false) ? 0 : 0x2;\n" + " result |= 0x4;\n" + : (OPTYPE_ANY == caseDef.opType) ? + " result = " + getOpTypeName(caseDef.opType) + + "(true) ? 0x1 : 0;\n" + " result |= " + getOpTypeName(caseDef.opType) + + "(false) ? 0 : 0x2;\n" + " result |= 0x4;\n" + : (OPTYPE_ALLEQUAL == caseDef.opType) ? + " result = " + getOpTypeName(caseDef.opType) + "(" + + subgroups::getFormatNameForGLSL(caseDef.format) + "(1)) ? 0x1 : 0;\n" + " result |= " + getOpTypeName(caseDef.opType) + + "(gl_SubgroupInvocationID) ? 0 : 0x2;\n" + " if (subgroupElect()) result |= 0x2;\n" + " result |= " + getOpTypeName(caseDef.opType) + + "(data[0]) ? 0x4 : 0;\n" + : ""; + const string fragment = + "#version 450\n" + "#extension GL_KHR_shader_subgroup_vote: enable\n" + "layout(location = 0) out uint result;\n" + "layout(set = 0, binding = 4, std430) readonly buffer Buffer2\n" + "{\n" + " " + formatString + " data[];\n" + "};\n" + "void main (void)\n" + "{\n" + + sourceFragment + + "}\n"; + + programCollection.glslSources.add("fragment") + << glu::FragmentSource(fragment)<< vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); } - src << "}\n"; - - programCollection.glslSources.add("tese") - << glu::TessellationEvaluationSource(src.str()) << vk::ShaderBuildOptions(vk::SPIRV_VERSION_1_3, 0u); - } - else - { - DE_FATAL("Unsupported shader stage"); + subgroups::addNoSubgroupShader(programCollection); } } +} tcu::TestStatus test(Context& context, const CaseDefinition caseDef) { if (!subgroups::isSubgroupSupported(context)) TCU_THROW(NotSupportedError, "Subgroup operations are not supported"); - if (!subgroups::areSubgroupOperationsSupportedForStage( - context, caseDef.shaderStage)) - { - if (subgroups::areSubgroupOperationsRequiredForStage( - caseDef.shaderStage)) - { - return tcu::TestStatus::fail( - "Shader stage " + - subgroups::getShaderStageName(caseDef.shaderStage) + - " is required to support subgroup operations!"); - } - else - { - TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); - } - } - if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_VOTE_BIT)) { TCU_THROW(NotSupportedError, "Device does not support subgroup vote operations"); } - if (subgroups::isDoubleFormat(caseDef.format) && - !subgroups::isDoubleSupportedForDevice(context)) + if (subgroups::isDoubleFormat(caseDef.format) && !subgroups::isDoubleSupportedForDevice(context)) { TCU_THROW(NotSupportedError, "Device does not support subgroup double operations"); } @@ -667,6 +534,11 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) //Tests which don't use the SSBO if (caseDef.noSSBO) { + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) + { + TCU_THROW(NotSupportedError, "Device does not support subgroup operations for this stage"); + } + if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) { subgroups::SSBOData inputData; @@ -674,87 +546,63 @@ tcu::TestStatus test(Context& context, const CaseDefinition caseDef) inputData.numElements = subgroups::maxSupportedSubgroupSize(); inputData.initializeType = subgroups::SSBOData::InitializeNonZero; - return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_SFLOAT, &inputData, - 1, checkVertexPipelineStagesNoSSBO); + return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32_SFLOAT, &inputData, 1, checkVertexPipelineStagesNoSSBO); } } - if ((VK_SHADER_STAGE_FRAGMENT_BIT != caseDef.shaderStage) && - (VK_SHADER_STAGE_COMPUTE_BIT != caseDef.shaderStage)) + if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) { - if (!subgroups::isVertexSSBOSupportedForDevice(context)) + if (!subgroups::areSubgroupOperationsSupportedForStage(context, caseDef.shaderStage)) { - TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + return tcu::TestStatus::fail( + "Shader stage " + + subgroups::getShaderStageName(caseDef.shaderStage) + + " is required to support subgroup operations!"); } - } - if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; - - return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT, - &inputData, 1, checkFragment); - } - else if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData; inputData.format = caseDef.format; inputData.numElements = subgroups::maxSupportedSubgroupSize(); inputData.initializeType = subgroups::SSBOData::InitializeNonZero; return subgroups::makeComputeTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, (OPTYPE_ALLEQUAL == caseDef.opType) ? checkComputeAllEqual - : checkCompute); + 1, (OPTYPE_ALLEQUAL == caseDef.opType) ? checkComputeAllEqual : checkCompute); } - else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage) + else { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceSubgroupProperties subgroupProperties; + subgroupProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; + subgroupProperties.pNext = DE_NULL; - return subgroups::makeVertexTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_GEOMETRY_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + VkPhysicalDeviceProperties2 properties; + properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; + properties.pNext = &subgroupProperties; - return subgroups::makeGeometryTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT == caseDef.shaderStage) - { - subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + context.getInstanceInterface().getPhysicalDeviceProperties2(context.getPhysicalDevice(), &properties); + + VkShaderStageFlagBits stages = (VkShaderStageFlagBits)(caseDef.shaderStage & subgroupProperties.supportedStages); + + if (VK_SHADER_STAGE_FRAGMENT_BIT != stages && !subgroups::isVertexSSBOSupportedForDevice(context)) + { + if ( (stages & VK_SHADER_STAGE_FRAGMENT_BIT) == 0) + TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes"); + else + stages = VK_SHADER_STAGE_FRAGMENT_BIT; + } + + if ((VkShaderStageFlagBits)0u == stages) + TCU_THROW(NotSupportedError, "Subgroup operations are not supported for any graphic shader"); - return subgroups::makeTessellationControlTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else if (VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT == caseDef.shaderStage) - { subgroups::SSBOData inputData; - inputData.format = caseDef.format; - inputData.numElements = subgroups::maxSupportedSubgroupSize(); - inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.format = caseDef.format; + inputData.numElements = subgroups::maxSupportedSubgroupSize(); + inputData.initializeType = subgroups::SSBOData::InitializeNonZero; + inputData.binding = 4u; + inputData.stages = stages; - return subgroups::makeTessellationEvaluationTest(context, VK_FORMAT_R32_UINT, &inputData, - 1, checkVertexPipelineStages); - } - else - { - TCU_THROW(InternalError, "Unhandled shader stage"); + return subgroups::allStages(context, VK_FORMAT_R32_UINT, &inputData, 1, checkVertexPipelineStages, stages); } } -} namespace vkt { @@ -765,16 +613,6 @@ tcu::TestCaseGroup* createSubgroupsVoteTests(tcu::TestContext& testCtx) de::MovePtr group(new tcu::TestCaseGroup( testCtx, "vote", "Subgroup vote category tests")); - const VkShaderStageFlags stages[] = - { - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, - VK_SHADER_STAGE_GEOMETRY_BIT, - VK_SHADER_STAGE_VERTEX_BIT, - VK_SHADER_STAGE_FRAGMENT_BIT, - VK_SHADER_STAGE_COMPUTE_BIT - }; - const VkFormat formats[] = { VK_FORMAT_R32_SINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32B32_SINT, @@ -788,43 +626,43 @@ tcu::TestCaseGroup* createSubgroupsVoteTests(tcu::TestContext& testCtx) VK_FORMAT_R8G8B8_USCALED, VK_FORMAT_R8G8B8A8_USCALED, }; - for (int stageIndex = 0; stageIndex < DE_LENGTH_OF_ARRAY(stages); ++stageIndex) + for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) { - const VkShaderStageFlags stage = stages[stageIndex]; + const VkFormat format = formats[formatIndex]; - for (int formatIndex = 0; formatIndex < DE_LENGTH_OF_ARRAY(formats); ++formatIndex) + for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) { - const VkFormat format = formats[formatIndex]; - - for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex) + // Skip the typed tests for all but subgroupAllEqual() + if ((VK_FORMAT_R32_UINT != format) && (OPTYPE_ALLEQUAL != opTypeIndex)) { - // Skip the typed tests for all but subgroupAllEqual() - if ((VK_FORMAT_R32_UINT != format) && (OPTYPE_ALLEQUAL != opTypeIndex)) - { - continue; - } - - CaseDefinition caseDef = {opTypeIndex, stage, format, false}; + continue; + } - std::string op = getOpTypeName(opTypeIndex); + const std::string op = de::toLower(getOpTypeName(opTypeIndex)); + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_COMPUTE_BIT, format, false}; addFunctionCaseWithPrograms(group.get(), - de::toLower(op) + "_" + - subgroups::getFormatNameForGLSL(format) - + "_" + getShaderStageName(stage), + op + "_" + subgroups::getFormatNameForGLSL(format) + "_" + getShaderStageName(caseDef.shaderStage), "", initPrograms, test, caseDef); + } - if (VK_SHADER_STAGE_VERTEX_BIT == stage ) - { - caseDef.noSSBO = true; - addFunctionCaseWithPrograms(group.get(), - de::toLower(op) + "_" + - subgroups::getFormatNameForGLSL(format) - + "_" + getShaderStageName(stage)+"_framebuffer", "", - initFrameBufferPrograms, test, caseDef); - } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_ALL_GRAPHICS, format, false}; + addFunctionCaseWithPrograms(group.get(), + op + "_" + subgroups::getFormatNameForGLSL(format) + "_graphic", + "", initPrograms, test, caseDef); + } + { + const CaseDefinition caseDef = {opTypeIndex, VK_SHADER_STAGE_VERTEX_BIT, format, true}; + addFunctionCaseWithPrograms(group.get(), + op + "_" + + subgroups::getFormatNameForGLSL(format) + + "_" + getShaderStageName(caseDef.shaderStage)+"_framebuffer", "", + initFrameBufferPrograms, test, caseDef); } + } } diff --git a/external/vulkancts/mustpass/1.1.0/vk-default.txt b/external/vulkancts/mustpass/1.1.0/vk-default.txt index fb63f94..cec9583 100755 --- a/external/vulkancts/mustpass/1.1.0/vk-default.txt +++ b/external/vulkancts/mustpass/1.1.0/vk-default.txt @@ -253704,4941 +253704,2125 @@ dEQP-VK.multiview.index.tesellation_shader.15_15_15_15 dEQP-VK.multiview.index.tesellation_shader.8_1_1_8 dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32 dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count -dEQP-VK.subgroups.builtin_var.subgroupsize_tess_eval -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_tess_eval -dEQP-VK.subgroups.builtin_var.subgroupsize_tess_control -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_tess_control -dEQP-VK.subgroups.builtin_var.subgroupsize_geometry -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_geometry -dEQP-VK.subgroups.builtin_var.subgroupsize_vertex -dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_vertex -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_vertex_framebuffer -dEQP-VK.subgroups.builtin_var.subgroupsize_fragment -dEQP-VK.subgroups.builtin_var.subgroupinvocationid_fragment +dEQP-VK.subgroups.builtin_var.subgroupsize_graphic dEQP-VK.subgroups.builtin_var.subgroupsize_compute +dEQP-VK.subgroups.builtin_var.subgroupsize_vertex_framebuffer +dEQP-VK.subgroups.builtin_var.subgroupinvocationid_graphic dEQP-VK.subgroups.builtin_var.subgroupinvocationid_compute +dEQP-VK.subgroups.builtin_var.subgroupinvocationid_vertex_framebuffer dEQP-VK.subgroups.builtin_var.numsubgroups_compute dEQP-VK.subgroups.builtin_var.subgroupid_compute -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_tess_eval -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_tess_control -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_geometry -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_vertex -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_vertex_framebuffer -dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_fragment -dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_fragment -dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_fragment -dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_fragment -dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_fragment +dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_graphic dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_compute +dEQP-VK.subgroups.builtin_mask_var.subgroupeqmask_vertex_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_graphic dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_compute +dEQP-VK.subgroups.builtin_mask_var.subgroupgemask_vertex_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_graphic dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_compute +dEQP-VK.subgroups.builtin_mask_var.subgroupgtmask_vertex_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_graphic dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_compute +dEQP-VK.subgroups.builtin_mask_var.subgrouplemask_vertex_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_graphic dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_compute -dEQP-VK.subgroups.basic.subgroupelect_tess_eval -dEQP-VK.subgroups.basic.subgroupbarrier_tess_eval -dEQP-VK.subgroups.basic.subgroupmemorybarrier_tess_eval -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_tess_eval -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_tess_eval -dEQP-VK.subgroups.basic.subgroupelect_tess_control -dEQP-VK.subgroups.basic.subgroupbarrier_tess_control -dEQP-VK.subgroups.basic.subgroupmemorybarrier_tess_control -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_tess_control -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_tess_control -dEQP-VK.subgroups.basic.subgroupelect_geometry -dEQP-VK.subgroups.basic.subgroupbarrier_geometry -dEQP-VK.subgroups.basic.subgroupmemorybarrier_geometry -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_geometry -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_geometry -dEQP-VK.subgroups.basic.subgroupelect_vertex -dEQP-VK.subgroups.basic.subgroupelect_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupbarrier_vertex -dEQP-VK.subgroups.basic.subgroupbarrier_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrier_vertex -dEQP-VK.subgroups.basic.subgroupmemorybarrier_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_vertex -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_vertex -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_vertex_framebuffer -dEQP-VK.subgroups.basic.subgroupelect_fragment -dEQP-VK.subgroups.basic.subgroupbarrier_fragment -dEQP-VK.subgroups.basic.subgroupbarrier_fragment_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrier_fragment -dEQP-VK.subgroups.basic.subgroupmemorybarrier_fragment_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_fragment -dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_fragment_framebuffer -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_fragment -dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_fragment_framebuffer +dEQP-VK.subgroups.builtin_mask_var.subgroupltmask_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupelect_compute +dEQP-VK.subgroups.basic.subgroupelect_graphic +dEQP-VK.subgroups.basic.subgroupelect_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupbarrier_compute +dEQP-VK.subgroups.basic.subgroupbarrier_graphic +dEQP-VK.subgroups.basic.subgroupbarrier_fragment_framebuffer +dEQP-VK.subgroups.basic.subgroupbarrier_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupmemorybarrier_compute +dEQP-VK.subgroups.basic.subgroupmemorybarrier_graphic +dEQP-VK.subgroups.basic.subgroupmemorybarrier_fragment_framebuffer +dEQP-VK.subgroups.basic.subgroupmemorybarrier_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_compute +dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_graphic +dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_fragment_framebuffer +dEQP-VK.subgroups.basic.subgroupmemorybarrierbuffer_vertex_framebuffer dEQP-VK.subgroups.basic.subgroupmemorybarriershared_compute dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_compute -dEQP-VK.subgroups.vote.subgroupallequal_int_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_tess_eval -dEQP-VK.subgroups.vote.subgroupall_uint_tess_eval -dEQP-VK.subgroups.vote.subgroupany_uint_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_uint_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_float_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_vec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_vec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_vec4_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_double_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_bool_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_tess_eval -dEQP-VK.subgroups.vote.subgroupallequal_int_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_tess_control -dEQP-VK.subgroups.vote.subgroupall_uint_tess_control -dEQP-VK.subgroups.vote.subgroupany_uint_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_uint_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_float_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_vec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_vec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_vec4_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_double_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_bool_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_tess_control -dEQP-VK.subgroups.vote.subgroupallequal_int_geometry -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_geometry -dEQP-VK.subgroups.vote.subgroupall_uint_geometry -dEQP-VK.subgroups.vote.subgroupany_uint_geometry -dEQP-VK.subgroups.vote.subgroupallequal_uint_geometry -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_geometry -dEQP-VK.subgroups.vote.subgroupallequal_float_geometry -dEQP-VK.subgroups.vote.subgroupallequal_vec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_vec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_vec4_geometry -dEQP-VK.subgroups.vote.subgroupallequal_double_geometry -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_geometry -dEQP-VK.subgroups.vote.subgroupallequal_bool_geometry -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_geometry -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_geometry -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_geometry -dEQP-VK.subgroups.vote.subgroupallequal_int_vertex -dEQP-VK.subgroups.vote.subgroupallequal_int_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupall_uint_vertex -dEQP-VK.subgroups.vote.subgroupall_uint_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupany_uint_vertex -dEQP-VK.subgroups.vote.subgroupany_uint_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_uint_vertex -dEQP-VK.subgroups.vote.subgroupallequal_uint_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_float_vertex -dEQP-VK.subgroups.vote.subgroupallequal_float_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_vec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_vec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_vec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_vec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_vec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_vec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_double_vertex -dEQP-VK.subgroups.vote.subgroupallequal_double_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_bool_vertex -dEQP-VK.subgroups.vote.subgroupallequal_bool_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_vertex -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_vertex -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_vertex -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_vertex_framebuffer -dEQP-VK.subgroups.vote.subgroupallequal_int_fragment -dEQP-VK.subgroups.vote.subgroupallequal_ivec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_ivec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_ivec4_fragment -dEQP-VK.subgroups.vote.subgroupall_uint_fragment -dEQP-VK.subgroups.vote.subgroupany_uint_fragment -dEQP-VK.subgroups.vote.subgroupallequal_uint_fragment -dEQP-VK.subgroups.vote.subgroupallequal_uvec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_uvec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_uvec4_fragment -dEQP-VK.subgroups.vote.subgroupallequal_float_fragment -dEQP-VK.subgroups.vote.subgroupallequal_vec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_vec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_vec4_fragment -dEQP-VK.subgroups.vote.subgroupallequal_double_fragment -dEQP-VK.subgroups.vote.subgroupallequal_dvec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_dvec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_dvec4_fragment -dEQP-VK.subgroups.vote.subgroupallequal_bool_fragment -dEQP-VK.subgroups.vote.subgroupallequal_bvec2_fragment -dEQP-VK.subgroups.vote.subgroupallequal_bvec3_fragment -dEQP-VK.subgroups.vote.subgroupallequal_bvec4_fragment +dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_graphic +dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_fragment_framebuffer +dEQP-VK.subgroups.basic.subgroupmemorybarrierimage_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_int_compute +dEQP-VK.subgroups.vote.subgroupallequal_int_graphic +dEQP-VK.subgroups.vote.subgroupallequal_int_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_ivec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_ivec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_ivec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_ivec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_ivec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_ivec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_ivec4_compute +dEQP-VK.subgroups.vote.subgroupallequal_ivec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_ivec4_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupall_uint_compute +dEQP-VK.subgroups.vote.subgroupall_uint_graphic +dEQP-VK.subgroups.vote.subgroupall_uint_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupany_uint_compute +dEQP-VK.subgroups.vote.subgroupany_uint_graphic +dEQP-VK.subgroups.vote.subgroupany_uint_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_uint_compute +dEQP-VK.subgroups.vote.subgroupallequal_uint_graphic +dEQP-VK.subgroups.vote.subgroupallequal_uint_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_uvec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_uvec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_uvec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_uvec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_uvec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_uvec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_uvec4_compute +dEQP-VK.subgroups.vote.subgroupallequal_uvec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_uvec4_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_float_compute +dEQP-VK.subgroups.vote.subgroupallequal_float_graphic +dEQP-VK.subgroups.vote.subgroupallequal_float_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_vec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_vec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_vec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_vec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_vec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_vec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_vec4_compute +dEQP-VK.subgroups.vote.subgroupallequal_vec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_vec4_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_double_compute +dEQP-VK.subgroups.vote.subgroupallequal_double_graphic +dEQP-VK.subgroups.vote.subgroupallequal_double_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_dvec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_dvec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_dvec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_dvec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_dvec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_dvec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_dvec4_compute +dEQP-VK.subgroups.vote.subgroupallequal_dvec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_dvec4_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_bool_compute +dEQP-VK.subgroups.vote.subgroupallequal_bool_graphic +dEQP-VK.subgroups.vote.subgroupallequal_bool_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_bvec2_compute +dEQP-VK.subgroups.vote.subgroupallequal_bvec2_graphic +dEQP-VK.subgroups.vote.subgroupallequal_bvec2_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_bvec3_compute +dEQP-VK.subgroups.vote.subgroupallequal_bvec3_graphic +dEQP-VK.subgroups.vote.subgroupallequal_bvec3_vertex_framebuffer dEQP-VK.subgroups.vote.subgroupallequal_bvec4_compute -dEQP-VK.subgroups.ballot.tess_eval -dEQP-VK.subgroups.ballot.tess_control -dEQP-VK.subgroups.ballot.geometry -dEQP-VK.subgroups.ballot.vertex -dEQP-VK.subgroups.ballot.vertex_framebuffer -dEQP-VK.subgroups.ballot.fragment +dEQP-VK.subgroups.vote.subgroupallequal_bvec4_graphic +dEQP-VK.subgroups.vote.subgroupallequal_bvec4_vertex_framebuffer dEQP-VK.subgroups.ballot.compute -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_tess_eval -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_tess_control -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_geometry -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_vertex -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_vertex_framebuffer -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_fragment -dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_fragment +dEQP-VK.subgroups.ballot.graphic +dEQP-VK.subgroups.ballot.vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_int_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_ivec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_ivec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uint_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uint_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_uvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_uvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_float_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_float_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_vec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_vec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_double_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_double_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_dvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_dvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bool_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bool_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec2_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec3_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_compute +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_bvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_compute -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_tess_eval -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_tess_control -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_tess_control -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_geometry -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_geometry -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_vertex -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_vertex -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_vertex_framebuffer -dEQP-VK.subgroups.ballot_other.subgroupinverseballot_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_fragment -dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_fragment +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_graphic +dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcastfirst_bvec4_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupinverseballot_compute +dEQP-VK.subgroups.ballot_other.subgroupinverseballot_graphic +dEQP-VK.subgroups.ballot_other.subgroupinverseballot_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_compute +dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotbitextract_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_compute +dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotbitcount_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_compute +dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotinclusivebitcount_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_compute +dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotexclusivebitcount_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_compute +dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotfindlsb_vertex_framebuffer dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_tess_eval -dEQP-VK.subgroups.arithmetic.subgroupadd_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_tess_control -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_tess_control -dEQP-VK.subgroups.arithmetic.subgroupadd_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_geometry -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_geometry -dEQP-VK.subgroups.arithmetic.subgroupadd_int_vertex +dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_graphic +dEQP-VK.subgroups.ballot_other.subgroupballotfindmsb_vertex_framebuffer +dEQP-VK.subgroups.arithmetic.subgroupadd_int_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_int_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_int_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_int_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_int_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_int_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_int_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_int_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_int_compute +dEQP-VK.subgroups.arithmetic.subgroupand_int_graphic dEQP-VK.subgroups.arithmetic.subgroupand_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupand_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupand_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_float_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_float_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_float_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_float_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_float_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_float_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_float_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_float_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_double_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_double_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_double_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_double_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_double_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_double_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_double_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_double_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupand_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupand_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_vertex +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_compute +dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_graphic dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.arithmetic.subgroupadd_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_fragment -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_fragment -dEQP-VK.subgroups.arithmetic.subgroupadd_int_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_int_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_int_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_int_compute -dEQP-VK.subgroups.arithmetic.subgroupand_int_compute -dEQP-VK.subgroups.arithmetic.subgroupor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupand_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_float_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_float_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_float_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_float_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_double_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_double_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_double_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_double_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupand_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_compute -dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_compute -dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_compute -dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_compute -dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_compute -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_tess_eval -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_tess_control -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_geometry -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_vertex -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_fragment -dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_fragment dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_int_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_ivec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uint_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_uvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_float_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_float_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_float_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_float_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_vec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_vec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_vec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_vec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_double_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_double_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_double_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_double_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredadd_dvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmul_dvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmin_dvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredmax_dvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_bool_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_bool_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bool_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec2_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_compute +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec3_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredand_bvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_compute +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredor_bvec4_framebuffer dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_tess_eval -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_tess_control -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_geometry -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_vertex -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_vertex_framebuffer -dEQP-VK.subgroups.shuffle.subgroupshuffle_int_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_float_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_double_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_fragment -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_fragment +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_graphic +dEQP-VK.subgroups.clustered.subgroupclusteredxor_bvec4_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_int_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_int_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_int_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_int_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_int_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_int_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_ivec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_ivec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_ivec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_ivec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_uint_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uint_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uint_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uint_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_uvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_uvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_uvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_uvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_float_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_float_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_float_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_float_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_float_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_float_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_vec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_vec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_vec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_vec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_double_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_double_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_double_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_double_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_graphic dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_double_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_graphic dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_double_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_graphic dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_compute -dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_compute -dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_compute -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_fragment +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_dvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_dvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_dvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_dvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_bool_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bool_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bool_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bool_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec2_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec3_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffle_bvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshufflexor_bvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffleup_bvec4_vertex_framebuffer +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_graphic +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_compute +dEQP-VK.subgroups.shuffle.subgroupshuffledown_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_0_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswaphorizontal_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_compute +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapvertical_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_compute -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_fragment +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadswapdiagonal_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_compute -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_fragment +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_1_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_compute -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_tess_eval -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_tess_control -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_geometry -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_vertex -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_vertex_framebuffer -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_fragment -dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_fragment +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_2_bvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_int_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_ivec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uint_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_uvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_float_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_vec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_double_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_dvec4_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bool_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec2_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_compute +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec3_vertex_framebuffer dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_compute -dEQP-VK.subgroups.shape.clustered_tess_eval -dEQP-VK.subgroups.shape.quad_tess_eval -dEQP-VK.subgroups.shape.clustered_tess_control -dEQP-VK.subgroups.shape.quad_tess_control -dEQP-VK.subgroups.shape.clustered_geometry -dEQP-VK.subgroups.shape.quad_geometry -dEQP-VK.subgroups.shape.clustered_vertex -dEQP-VK.subgroups.shape.clustered_vertex_framebuffer -dEQP-VK.subgroups.shape.quad_vertex -dEQP-VK.subgroups.shape.quad_vertex_framebuffer -dEQP-VK.subgroups.shape.clustered_fragment -dEQP-VK.subgroups.shape.quad_fragment +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_graphic +dEQP-VK.subgroups.quad.subgroupquadbroadcast_3_bvec4_vertex_framebuffer dEQP-VK.subgroups.shape.clustered_compute +dEQP-VK.subgroups.shape.clustered_graphic +dEQP-VK.subgroups.shape.clustered_vertex_framebuffer dEQP-VK.subgroups.shape.quad_compute +dEQP-VK.subgroups.shape.quad_graphic +dEQP-VK.subgroups.shape.quad_vertex_framebuffer dEQP-VK.ycbcr.format.g8b8g8r8_422_unorm.vertex_optimal dEQP-VK.ycbcr.format.g8b8g8r8_422_unorm.vertex_linear dEQP-VK.ycbcr.format.g8b8g8r8_422_unorm.vertex_linear_mapped -- 2.7.4