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_compute
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.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.basic.subgroupelect_compute
dEQP-VK.subgroups.basic.subgroupbarrier_compute
dEQP-VK.subgroups.basic.subgroupmemorybarrier_compute
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.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.ballot.compute
dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_tess_eval
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_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.arithmetic.subgroupexclusiveor_bvec4_geometry
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_geometry
dEQP-VK.subgroups.arithmetic.subgroupadd_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_vertex
+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.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.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.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.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_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_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.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.shape.clustered_compute
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
- VkFormat format;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ VkFormat format;
+ bool noSSBO;
};
+void initFrameBufferPrograms (SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::string indexVars;
+ switch (caseDef.opType)
+ {
+ default:
+ indexVars = " uint start = 0, end = gl_SubgroupSize;\n";
+ break;
+ case OPTYPE_INCLUSIVE_ADD:
+ case OPTYPE_INCLUSIVE_MUL:
+ case OPTYPE_INCLUSIVE_MIN:
+ case OPTYPE_INCLUSIVE_MAX:
+ case OPTYPE_INCLUSIVE_AND:
+ case OPTYPE_INCLUSIVE_OR:
+ case OPTYPE_INCLUSIVE_XOR:
+ indexVars = " uint start = 0, end = gl_SubgroupInvocationID + 1;\n";
+ break;
+ case OPTYPE_EXCLUSIVE_ADD:
+ case OPTYPE_EXCLUSIVE_MUL:
+ case OPTYPE_EXCLUSIVE_MIN:
+ case OPTYPE_EXCLUSIVE_MAX:
+ case OPTYPE_EXCLUSIVE_AND:
+ case OPTYPE_EXCLUSIVE_OR:
+ case OPTYPE_EXCLUSIVE_XOR:
+ indexVars = " uint start = 0, end = gl_SubgroupInvocationID;\n";
+ 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";
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ std::ostringstream src;
+ std::ostringstream fragmentSrc;
+
+ src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "#extension GL_KHR_shader_subgroup_arithmetic: enable\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(location = 0) out float out_color;\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[" << subgroups::maxSupportedSubgroupSize() << "];\n"
+ << "};\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << " uvec4 mask = subgroupBallot(true);\n"
+ << bdy.str()
+ << " out_color = float(tempResult);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in float in_color;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(in_color);\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
std::string indexVars;
<< "#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) buffer Buffer2\n"
+ << "layout(set = 0, binding = 0, std430) readonly buffer Buffer2\n"
<< "{\n"
<< " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n"
<< "};\n"
TCU_THROW(NotSupportedError, "Device does not support subgroup double operations");
}
+ //Tests which don't use the SSBO
+ if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ subgroups::SSBOData inputData;
+ inputData.format = caseDef.format;
+ inputData.numElements = subgroups::maxSupportedSubgroupSize();
+ inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
+
+ 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))
{
continue;
}
- CaseDefinition caseDef = {opTypeIndex, stage, format};
+ CaseDefinition caseDef = {opTypeIndex, stage, format, false};
std::string op = getOpTypeName(opTypeIndex);
subgroups::getFormatNameForGLSL(format) +
"_" + getShaderStageName(stage),
"", 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);
+ }
}
}
}
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
- VkFormat format;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ VkFormat format;
+ bool noSSBO;
};
+void initFrameBufferPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream bdy;
+
+ bdy << " uint tempResult = 0;\n";
+
+ 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";
+ }
+ }
+ else
+ {
+ bdy << " uint firstActive = 0;\n"
+ << " for (uint i = 0; i < gl_SubgroupSize; i++)\n"
+ << " {\n"
+ << " if (subgroupBallotBitExtract(mask, i))\n"
+ << " {\n"
+ << " firstActive = i;\n"
+ << " break;\n"
+ << " }\n"
+ << " }\n"
+ << " tempResult |= (subgroupBroadcastFirst(data1[gl_SubgroupInvocationID]) == data1[firstActive]) ? 0x1 : 0;\n"
+ << " // make the firstActive invocation inactive now\n"
+ << " if (firstActive == gl_SubgroupInvocationID)\n"
+ << " {\n"
+ << " for (uint i = 0; i < gl_SubgroupSize; i++)\n"
+ << " {\n"
+ << " if (subgroupBallotBitExtract(mask, i))\n"
+ << " {\n"
+ << " firstActive = i;\n"
+ << " break;\n"
+ << " }\n"
+ << " }\n"
+ << " tempResult |= (subgroupBroadcastFirst(data1[gl_SubgroupInvocationID]) == data1[firstActive]) ? 0x2 : 0;\n"
+ << " }\n"
+ << " else\n"
+ << " {\n"
+ << " // the firstActive invocation didn't partake in the second result so set it to true\n"
+ << " tempResult |= 0x2;\n"
+ << " }\n";
+ }
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ std::ostringstream src;
+ std::ostringstream fragmentSrc;
+
+ src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(location = 0) out float out_color;\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[" << subgroups::maxSupportedSubgroupSize() << "];\n"
+ << "};\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << " uvec4 mask = subgroupBallot(true);\n"
+ << bdy.str()
+ << " out_color = float(tempResult);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert")
+ << glu::VertexSource(src.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in float in_color;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(in_color);\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
std::ostringstream bdy;
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) buffer Buffer1\n"
+ << "layout(set = 0, binding = 0, std430) readonly buffer Buffer1\n"
<< "{\n"
<< " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[];\n"
<< "};\n"
TCU_THROW(NotSupportedError, "Device does not support subgroup double operations");
}
+ //Tests which don't use the SSBO
+ if (caseDef.noSSBO && 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;
+
+ 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))
{
for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex)
{
- CaseDefinition caseDef = {opTypeIndex, stage, format};
+ CaseDefinition caseDef = {opTypeIndex, stage, format, false};
std::ostringstream name;
addFunctionCaseWithPrograms(group.get(), name.str(),
"", initPrograms, test, caseDef);
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == stage )
+ {
+ caseDef.noSSBO = true;
+ addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "",
+ initFrameBufferPrograms, test, caseDef);
+ }
}
}
}
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ bool noSSBO;
};
-void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+void initFrameBufferPrograms (SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream bdy;
+
+ bdy << " uvec4 allOnes = uvec4(0xFFFFFFFF);\n"
+ << " uvec4 allZeros = uvec4(0);\n"
+ << " uint tempResult = 0;\n"
+ << "#define MAKE_HIGH_BALLOT_RESULT(i) uvec4("
+ << "i >= 32 ? 0 : (0xFFFFFFFF << i), "
+ << "i >= 64 ? 0 : (0xFFFFFFFF << ((i < 32) ? 0 : (i - 32))), "
+ << "i >= 96 ? 0 : (0xFFFFFFFF << ((i < 64) ? 0 : (i - 64))), "
+ << " 0xFFFFFFFF << ((i < 96) ? 0 : (i - 96)))\n"
+ << "#define MAKE_SINGLE_BIT_BALLOT_RESULT(i) uvec4("
+ << "i >= 32 ? 0 : 0x1 << i, "
+ << "i < 32 || i >= 64 ? 0 : 0x1 << (i - 32), "
+ << "i < 64 || i >= 96 ? 0 : 0x1 << (i - 64), "
+ << "i < 96 ? 0 : 0x1 << (i - 96))\n";
+
+ switch (caseDef.opType)
+ {
+ default:
+ DE_FATAL("Unknown op type!");
+ case OPTYPE_INVERSE_BALLOT:
+ bdy << " tempResult |= subgroupInverseBallot(allOnes) ? 0x1 : 0;\n"
+ << " tempResult |= subgroupInverseBallot(allZeros) ? 0 : 0x2;\n"
+ << " tempResult |= subgroupInverseBallot(subgroupBallot(true)) ? 0x4 : 0;\n"
+ << " tempResult |= 0x8;\n";
+ break;
+ case OPTYPE_BALLOT_BIT_EXTRACT:
+ bdy << " tempResult |= subgroupBallotBitExtract(allOnes, gl_SubgroupInvocationID) ? 0x1 : 0;\n"
+ << " tempResult |= subgroupBallotBitExtract(allZeros, gl_SubgroupInvocationID) ? 0 : 0x2;\n"
+ << " tempResult |= subgroupBallotBitExtract(subgroupBallot(true), gl_SubgroupInvocationID) ? 0x4 : 0;\n"
+ << " tempResult |= 0x8;\n"
+ << " for (uint i = 0; i < gl_SubgroupSize; i++)\n"
+ << " {\n"
+ << " if (!subgroupBallotBitExtract(allOnes, gl_SubgroupInvocationID))\n"
+ << " {\n"
+ << " tempResult &= ~0x8;\n"
+ << " }\n"
+ << " }\n";
+ break;
+ case OPTYPE_BALLOT_BIT_COUNT:
+ bdy << " tempResult |= gl_SubgroupSize == subgroupBallotBitCount(allOnes) ? 0x1 : 0;\n"
+ << " tempResult |= 0 == subgroupBallotBitCount(allZeros) ? 0x2 : 0;\n"
+ << " tempResult |= 0 < subgroupBallotBitCount(subgroupBallot(true)) ? 0x4 : 0;\n"
+ << " tempResult |= 0 == subgroupBallotBitCount(MAKE_HIGH_BALLOT_RESULT(gl_SubgroupSize)) ? 0x8 : 0;\n";
+ break;
+ case OPTYPE_BALLOT_INCLUSIVE_BIT_COUNT:
+ bdy << " uint inclusiveOffset = gl_SubgroupInvocationID + 1;\n"
+ << " tempResult |= inclusiveOffset == subgroupBallotInclusiveBitCount(allOnes) ? 0x1 : 0;\n"
+ << " tempResult |= 0 == subgroupBallotInclusiveBitCount(allZeros) ? 0x2 : 0;\n"
+ << " tempResult |= 0 < subgroupBallotInclusiveBitCount(subgroupBallot(true)) ? 0x4 : 0;\n"
+ << " tempResult |= 0x8;\n"
+ << " uvec4 inclusiveUndef = MAKE_HIGH_BALLOT_RESULT(inclusiveOffset);\n"
+ << " bool undefTerritory = false;\n"
+ << " for (uint i = 0; i <= 128; i++)\n"
+ << " {\n"
+ << " uvec4 iUndef = MAKE_HIGH_BALLOT_RESULT(i);\n"
+ << " if (iUndef == inclusiveUndef)"
+ << " {\n"
+ << " undefTerritory = true;\n"
+ << " }\n"
+ << " uint inclusiveBitCount = subgroupBallotInclusiveBitCount(iUndef);\n"
+ << " if (undefTerritory && (0 != inclusiveBitCount))\n"
+ << " {\n"
+ << " tempResult &= ~0x8;\n"
+ << " }\n"
+ << " else if (!undefTerritory && (0 == inclusiveBitCount))\n"
+ << " {\n"
+ << " tempResult &= ~0x8;\n"
+ << " }\n"
+ << " }\n";
+ break;
+ case OPTYPE_BALLOT_EXCLUSIVE_BIT_COUNT:
+ bdy << " uint exclusiveOffset = gl_SubgroupInvocationID;\n"
+ << " tempResult |= exclusiveOffset == subgroupBallotExclusiveBitCount(allOnes) ? 0x1 : 0;\n"
+ << " tempResult |= 0 == subgroupBallotExclusiveBitCount(allZeros) ? 0x2 : 0;\n"
+ << " tempResult |= 0x4;\n"
+ << " tempResult |= 0x8;\n"
+ << " uvec4 exclusiveUndef = MAKE_HIGH_BALLOT_RESULT(exclusiveOffset);\n"
+ << " bool undefTerritory = false;\n"
+ << " for (uint i = 0; i <= 128; i++)\n"
+ << " {\n"
+ << " uvec4 iUndef = MAKE_HIGH_BALLOT_RESULT(i);\n"
+ << " if (iUndef == exclusiveUndef)"
+ << " {\n"
+ << " undefTerritory = true;\n"
+ << " }\n"
+ << " uint exclusiveBitCount = subgroupBallotExclusiveBitCount(iUndef);\n"
+ << " if (undefTerritory && (0 != exclusiveBitCount))\n"
+ << " {\n"
+ << " tempResult &= ~0x4;\n"
+ << " }\n"
+ << " else if (!undefTerritory && (0 == exclusiveBitCount))\n"
+ << " {\n"
+ << " tempResult &= ~0x8;\n"
+ << " }\n"
+ << " }\n";
+ break;
+ case OPTYPE_BALLOT_FIND_LSB:
+ bdy << " tempResult |= 0 == subgroupBallotFindLSB(allOnes) ? 0x1 : 0;\n"
+ << " if (subgroupElect())\n"
+ << " {\n"
+ << " tempResult |= 0x2;\n"
+ << " }\n"
+ << " else\n"
+ << " {\n"
+ << " tempResult |= 0 < subgroupBallotFindLSB(subgroupBallot(true)) ? 0x2 : 0;\n"
+ << " }\n"
+ << " tempResult |= gl_SubgroupSize > subgroupBallotFindLSB(subgroupBallot(true)) ? 0x4 : 0;\n"
+ << " tempResult |= 0x8;\n"
+ << " for (uint i = 0; i < gl_SubgroupSize; i++)\n"
+ << " {\n"
+ << " if (i != subgroupBallotFindLSB(MAKE_HIGH_BALLOT_RESULT(i)))\n"
+ << " {\n"
+ << " tempResult &= ~0x8;\n"
+ << " }\n"
+ << " }\n";
+ break;
+ case OPTYPE_BALLOT_FIND_MSB:
+ bdy << " tempResult |= (gl_SubgroupSize - 1) == subgroupBallotFindMSB(allOnes) ? 0x1 : 0;\n"
+ << " if (subgroupElect())\n"
+ << " {\n"
+ << " tempResult |= 0x2;\n"
+ << " }\n"
+ << " else\n"
+ << " {\n"
+ << " tempResult |= 0 < subgroupBallotFindMSB(subgroupBallot(true)) ? 0x2 : 0;\n"
+ << " }\n"
+ << " tempResult |= gl_SubgroupSize > subgroupBallotFindMSB(subgroupBallot(true)) ? 0x4 : 0;\n"
+ << " tempResult |= 0x8;\n"
+ << " for (uint i = 0; i < gl_SubgroupSize; i++)\n"
+ << " {\n"
+ << " if (i != subgroupBallotFindMSB(MAKE_SINGLE_BIT_BALLOT_RESULT(i)))\n"
+ << " {\n"
+ << " tempResult &= ~0x8;\n"
+ << " }\n"
+ << " }\n";
+ break;
+ }
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ std::ostringstream src;
+ std::ostringstream fragmentSrc;
+
+ src << "#version 450\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(location = 0) out float out_color;\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << bdy.str()
+ << " out_color = float(tempResult);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in float in_color;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(in_color);\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
+void initPrograms (SourceCollections& programCollection, CaseDefinition caseDef)
{
std::ostringstream bdy;
}
}
-tcu::TestStatus test(Context& context, const CaseDefinition caseDef)
+tcu::TestStatus test (Context& context, const CaseDefinition caseDef)
{
if (!subgroups::isSubgroupSupported(context))
TCU_THROW(NotSupportedError, "Subgroup operations are not supported");
TCU_THROW(NotSupportedError, "Device does not support subgroup ballot operations");
}
+ if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ 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))
{
for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex)
{
- CaseDefinition caseDef = {opTypeIndex, stage};
+ CaseDefinition caseDef = {opTypeIndex, stage, false};
std::ostringstream name;
addFunctionCaseWithPrograms(group.get(), name.str(),
"", initPrograms, test, caseDef);
+
+ if (VK_SHADER_STAGE_VERTEX_BIT & stage )
+ {
+ caseDef.noSSBO = true;
+ addFunctionCaseWithPrograms(group.get(), name.str() + "_framebuffer", "",
+ initFrameBufferPrograms, test, caseDef);
+ }
+
}
}
struct CaseDefinition
{
- VkShaderStageFlags shaderStage;
+ VkShaderStageFlags shaderStage;
+ bool noSSBO;
};
+void initFrameBufferPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream fragmentSrc;
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ std::ostringstream vertexSrc;
+
+ vertexSrc << "#version 450\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(location = 0) out float out_color;\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " uint data[" << subgroups::maxSupportedSubgroupSize() << "];\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"
+ << " out_color = float(tempResult);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(vertexSrc.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in float in_color;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(in_color);\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage)
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) buffer Buffer1\n"
+ << "layout(set = 0, binding = 0, std430) readonly buffer Buffer1\n"
<< "{\n"
<< " uint data[];\n"
<< "};\n"
TCU_THROW(NotSupportedError, "Device does not support subgroup ballot operations");
}
+ //Tests which don't use the SSBO
+ if (caseDef.noSSBO && 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;
+
+ 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))
{
{
const VkShaderStageFlags stage = stages[stageIndex];
- CaseDefinition caseDef = {stage};
+ CaseDefinition caseDef = {stage, false};
std::ostringstream name;
addFunctionCaseWithPrograms(group.get(), name.str(),
"", initPrograms, test, caseDef);
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == stage )
+ {
+ caseDef.noSSBO = true;
+ addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "",
+ initFrameBufferPrograms, test, caseDef);
+ }
}
return group.release();
namespace
{
-static const deUint32 ELECTED_VALUE = 42;
-static const deUint32 UNELECTED_VALUE = 13;
+static const deUint32 ELECTED_VALUE = 42u;
+static const deUint32 UNELECTED_VALUE = 13u;
+static const vk::VkDeviceSize SHADER_BUFFER_SIZE = 16384ull; //maxUniformBufferRange 128*128
static bool checkFragmentSubgroupElect(std::vector<const void*> datas,
deUint32 width, deUint32 height, deUint32)
return true;
}
+static bool checkFragmentSubgroupBarriersNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32 height, deUint32)
+{
+ const float* const resultData = reinterpret_cast<const float*>(datas[0]);
+
+ for (deUint32 x = 0u; x < width; ++x)
+ {
+ for (deUint32 y = 0u; y < height; ++y)
+ {
+ const deUint32 ndx = (x * height + y) * 4u;
+ if (1.0f == resultData[ndx +2])
+ {
+ if(resultData[ndx] != resultData[ndx +1])
+ {
+ return false;
+ }
+ }
+ else if (resultData[ndx] != resultData[ndx +3])
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+static bool checkVertexPipelineStagesSubgroupElectNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32)
+{
+ const float* const resultData = reinterpret_cast<const float*>(datas[0]);
+ float poisonValuesFound = 0.0f;
+ float numSubgroupsUsed = 0.0f;
+
+ for (deUint32 x = 0; x < width; ++x)
+ {
+ deUint32 val = static_cast<deUint32>(resultData[x * 2]);
+ numSubgroupsUsed += resultData[x * 2 + 1];
+
+ switch (val)
+ {
+ default:
+ // some garbage value was found!
+ return false;
+ case UNELECTED_VALUE:
+ break;
+ case ELECTED_VALUE:
+ poisonValuesFound += 1.0f;
+ break;
+ }
+ }
+ return numSubgroupsUsed == poisonValuesFound;
+}
+
static bool checkVertexPipelineStagesSubgroupElect(std::vector<const void*> datas,
deUint32 width, deUint32)
{
return true;
}
+static bool checkVertexPipelineStagesSubgroupBarriersNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32)
+{
+ const float* const resultData = reinterpret_cast<const float*>(datas[0]);
+
+ for (deUint32 x = 0u; x < width; ++x)
+ {
+ const deUint32 ndx = x*4u;
+ if (1.0f == resultData[ndx +2])
+ {
+ if(resultData[ndx] != resultData[ndx +1])
+ {
+ return false;
+ }
+ }
+ else if (resultData[ndx] != resultData[ndx +3])
+ {
+ return false;
+ }
+
+ }
+
+ return true;
+}
+
static bool checkComputeSubgroupElect(std::vector<const void*> datas,
const deUint32 numWorkgroups[3], const deUint32 localSize[3],
deUint32)
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ bool noSSBO;
};
+void initFrameBufferPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream vertexSrc;
+ std::ostringstream fragmentSrc;
+ if(VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in vec4 in_color;\n"
+ << "layout(location = 0) out vec4 out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = in_color;\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage)
+ {
+ programCollection.glslSources.add("vert") << glu::VertexSource(subgroups::getVertShaderForStage(caseDef.shaderStage));
+ }
+
+ if (OPTYPE_ELECT == caseDef.opType)
+ {
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ vertexSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "#extension GL_KHR_shader_subgroup_basic: enable\n"
+ << "layout(location = 0) out vec4 out_color;\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << " if (subgroupElect())\n"
+ << " {\n"
+ << " out_color.r = " << ELECTED_VALUE << ";\n"
+ << " out_color.g = 1.0f;\n"
+ << " }\n"
+ << " else\n"
+ << " {\n"
+ << " out_color.r = " << UNELECTED_VALUE << ";\n"
+ << " out_color.g = 0.0f;\n"
+ << " }\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+ programCollection.glslSources.add("vert")
+ << glu::VertexSource(vertexSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+ }
+ else
+ {
+ std::ostringstream bdy;
+ switch (caseDef.opType)
+ {
+ default:
+ DE_FATAL("Unhandled op type!");
+ case OPTYPE_SUBGROUP_BARRIER:
+ case OPTYPE_SUBGROUP_MEMORY_BARRIER:
+ case OPTYPE_SUBGROUP_MEMORY_BARRIER_BUFFER:
+ bdy << " tempResult2 = tempBuffer[id];\n"
+ << " if (subgroupElect())\n"
+ << " {\n"
+ << " tempResult = value;\n"
+ << " out_color.b = 1.0f;\n"
+ << " }\n"
+ << " else\n"
+ << " {\n"
+ << " tempResult = tempBuffer[id];\n"
+ << " }\n"
+ << " " << getOpTypeName(caseDef.opType) << "();\n";
+ break;
+ case OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE:
+ bdy <<"tempResult2 = imageLoad(tempImage, ivec2(id, 0)).x;\n"
+ << " if (subgroupElect())\n"
+ << " {\n"
+ << " tempResult = value;\n"
+ << " out_color.b = 1.0f;\n"
+ << " }\n"
+ << " else\n"
+ << " {\n"
+ << " tempResult = imageLoad(tempImage, ivec2(id, 0)).x;\n"
+ << " }\n"
+ << " subgroupMemoryBarrierImage();\n";
+
+ break;
+ }
+
+ if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage)
+ {
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "#extension GL_KHR_shader_subgroup_basic: enable\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(location = 0) out vec4 out_color;\n"
+ << "\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " uint tempBuffer["<<SHADER_BUFFER_SIZE/4ull<<"];\n"
+ << "};\n"
+ << "\n"
+ << "layout(set = 0, binding = 1) uniform Buffer2\n"
+ << "{\n"
+ << " uint value;\n"
+ << "};\n"
+ << (OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType ? "layout(set = 0, binding = 2, r32ui) readonly uniform highp uimage2D tempImage;\n" : "\n")
+ << "void main (void)\n"
+ << "{\n"
+ << " if (gl_HelperInvocation) return;\n"
+ << " uint id = 0;\n"
+ << " if (subgroupElect())\n"
+ << " {\n"
+ << " id = uint(gl_FragCoord.x*100.0f);\n"
+ << " }\n"
+ << " id = subgroupBroadcastFirst(id);\n"
+ << " uint localId = id;\n"
+ << " uint tempResult = 0u;\n"
+ << " uint tempResult2 = 0u;\n"
+ << " out_color.b = 0.0f;\n"
+ << bdy.str()
+ << " out_color.r = float(tempResult);\n"
+ << " out_color.g = float(value);\n"
+ << " out_color.a = float(tempResult2);\n"
+ << "}\n";
+
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ vertexSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "#extension GL_KHR_shader_subgroup_basic: enable\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ <<"\n"
+ << "layout(location = 0) out vec4 out_color;\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " uint tempBuffer["<<SHADER_BUFFER_SIZE/4ull<<"];\n"
+ << "};\n"
+ << "\n"
+ << "layout(set = 0, binding = 1) uniform Buffer2\n"
+ << "{\n"
+ << " uint value;\n"
+ << "};\n"
+ << (OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType ? "layout(set = 0, binding = 2, r32ui) readonly uniform highp uimage2D tempImage;\n" : "\n")
+ << "void main (void)\n"
+ << "{\n"
+ << " uint id = 0;\n"
+ << " if (subgroupElect())\n"
+ << " {\n"
+ << " id = gl_VertexIndex;\n"
+ << " }\n"
+ << " id = subgroupBroadcastFirst(id);\n"
+ << " uint tempResult = 0u;\n"
+ << " uint tempResult2 = 0u;\n"
+ << " out_color.b = 0.0f;\n"
+ << bdy.str()
+ << " out_color.r = float(tempResult);\n"
+ << " out_color.g = float(value);\n"
+ << " out_color.a = float(tempResult2);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(vertexSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
if (OPTYPE_ELECT == caseDef.opType)
" is a required capability!");
}
+ //Tests which don't use the SSBO
+ if(caseDef.noSSBO)
+ {
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ if (OPTYPE_ELECT == caseDef.opType)
+ {
+ return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32G32_SFLOAT,
+ DE_NULL, 0u, checkVertexPipelineStagesSubgroupElectNoSSBO);
+ }
+ else
+ {
+ const deUint32 inputDatasCount = OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType ? 3u : 2u;
+ std::vector<subgroups::SSBOData> inputDatas (inputDatasCount);
+
+ inputDatas[0].format = VK_FORMAT_R32_UINT;
+ inputDatas[0].numElements = SHADER_BUFFER_SIZE/4ull;
+ inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero;
+
+ inputDatas[1].format = VK_FORMAT_R32_UINT;
+ inputDatas[1].numElements = 1ull;
+ inputDatas[1].initializeType = subgroups::SSBOData::InitializeNonZero;
+
+ if(OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType )
+ {
+ inputDatas[2].format = VK_FORMAT_R32_UINT;
+ inputDatas[2].numElements = SHADER_BUFFER_SIZE;
+ inputDatas[2].initializeType = subgroups::SSBOData::InitializeNone;
+ inputDatas[2].isImage = true;
+ }
+
+ return subgroups::makeVertexFrameBufferTest(context, VK_FORMAT_R32G32B32A32_SFLOAT,
+ &inputDatas[0], inputDatasCount, checkVertexPipelineStagesSubgroupBarriersNoSSBO);
+ }
+ }
+
+ if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage)
+ {
+ const deUint32 inputDatasCount = OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType ? 3u : 2u;
+ std::vector<subgroups::SSBOData> inputDatas (inputDatasCount);
+
+ inputDatas[0].format = VK_FORMAT_R32_UINT;
+ inputDatas[0].numElements = SHADER_BUFFER_SIZE/4ull;
+ inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero;
+
+ inputDatas[1].format = VK_FORMAT_R32_UINT;
+ inputDatas[1].numElements = 1ull;
+ inputDatas[1].initializeType = subgroups::SSBOData::InitializeNonZero;
+
+ if(OPTYPE_SUBGROUP_MEMORY_BARRIER_IMAGE == caseDef.opType )
+ {
+ inputDatas[2].format = VK_FORMAT_R32_UINT;
+ inputDatas[2].numElements = SHADER_BUFFER_SIZE;
+ inputDatas[2].initializeType = subgroups::SSBOData::InitializeNone;
+ 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))
{
const deUint32 inputDatasCount = 4;
subgroups::SSBOData inputDatas[inputDatasCount];
inputDatas[0].format = VK_FORMAT_R32_UINT;
- inputDatas[0].numElements = 128 * 128;
+ inputDatas[0].numElements = SHADER_BUFFER_SIZE;
inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[1].format = VK_FORMAT_R32_UINT;
inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[3].format = VK_FORMAT_R32_UINT;
- inputDatas[3].numElements = 128 * 128;
+ inputDatas[3].numElements = SHADER_BUFFER_SIZE;
inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[3].isImage = true;
const deUint32 inputDatasCount = 3;
subgroups::SSBOData inputDatas[inputDatasCount];
inputDatas[0].format = VK_FORMAT_R32_UINT;
- inputDatas[0].numElements = 128 * 128;
+ inputDatas[0].numElements = SHADER_BUFFER_SIZE;
inputDatas[0].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[1].format = VK_FORMAT_R32_UINT;
inputDatas[1].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[2].format = VK_FORMAT_R32_UINT;
- inputDatas[2].numElements = 128 * 128;
+ inputDatas[2].numElements = SHADER_BUFFER_SIZE;
inputDatas[2].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[2].isImage = true;
const deUint32 inputDatasCount = 4;
subgroups::SSBOData inputDatas[inputDatasCount];
inputDatas[0].format = VK_FORMAT_R32_UINT;
- inputDatas[0].numElements = 128 * 128;
+ inputDatas[0].numElements = SHADER_BUFFER_SIZE;
inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[1].format = VK_FORMAT_R32_UINT;
inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[3].format = VK_FORMAT_R32_UINT;
- inputDatas[3].numElements = 128 * 128;
+ inputDatas[3].numElements = SHADER_BUFFER_SIZE;
inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[3].isImage = true;
const deUint32 inputDatasCount = 4;
subgroups::SSBOData inputDatas[inputDatasCount];
inputDatas[0].format = VK_FORMAT_R32_UINT;
- inputDatas[0].numElements = 128 * 128;
+ inputDatas[0].numElements = SHADER_BUFFER_SIZE;
inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[1].format = VK_FORMAT_R32_UINT;
inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[3].format = VK_FORMAT_R32_UINT;
- inputDatas[3].numElements = 128 * 128;
+ inputDatas[3].numElements = SHADER_BUFFER_SIZE;
inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[3].isImage = true;
const deUint32 inputDatasCount = 4;
subgroups::SSBOData inputDatas[inputDatasCount];
inputDatas[0].format = VK_FORMAT_R32_UINT;
- inputDatas[0].numElements = 128 * 128;
+ inputDatas[0].numElements = SHADER_BUFFER_SIZE;
inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[1].format = VK_FORMAT_R32_UINT;
inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[3].format = VK_FORMAT_R32_UINT;
- inputDatas[3].numElements = 128 * 128;
+ inputDatas[3].numElements = SHADER_BUFFER_SIZE;
inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[3].isImage = true;
const deUint32 inputDatasCount = 4;
subgroups::SSBOData inputDatas[inputDatasCount];
inputDatas[0].format = VK_FORMAT_R32_UINT;
- inputDatas[0].numElements = 128 * 128;
+ inputDatas[0].numElements = SHADER_BUFFER_SIZE;
inputDatas[0].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[1].format = VK_FORMAT_R32_UINT;
inputDatas[2].initializeType = subgroups::SSBOData::InitializeNonZero;
inputDatas[3].format = VK_FORMAT_R32_UINT;
- inputDatas[3].numElements = 128 * 128;
+ inputDatas[3].numElements = SHADER_BUFFER_SIZE;
inputDatas[3].initializeType = subgroups::SSBOData::InitializeNone;
inputDatas[3].isImage = true;
continue;
}
- CaseDefinition caseDef = {opTypeIndex, stage};
+ CaseDefinition caseDef = {opTypeIndex, stage, false};
std::string op = getOpTypeName(opTypeIndex);
de::toLower(op) +
"_" + getShaderStageName(stage), "",
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);
+ }
+ }
}
}
{
namespace subgroups
{
+
static bool checkVertexPipelineStages(std::vector<const void*> datas,
deUint32 width, deUint32)
{
{
struct CaseDefinition
{
- std::string varName;
- VkShaderStageFlags shaderStage;
+ std::string varName;
+ VkShaderStageFlags shaderStage;
+ bool noSSBO;
};
}
-void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+std::string subgroupMask (const CaseDefinition& caseDef)
{
std::ostringstream bdy;
}
bdy << " }\n";
+ return bdy.str();
+}
+
+void initFrameBufferPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream vertexSrc;
+ std::ostringstream fragmentSrc;
+ std::ostringstream bdy;
+ bdy << subgroupMask(caseDef);
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ vertexSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(location = 0) out float out_color;\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << bdy.str()
+ << " out_color = float(tempResult);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+ programCollection.glslSources.add("vert") << glu::VertexSource(vertexSrc.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in highp float in_color;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(in_color);\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
+void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream bdy;
+ bdy << subgroupMask(caseDef);
if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage)
{
TCU_THROW(NotSupportedError, "Device does not support subgroup ballot operations");
}
+ //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))
{
{
const std::string var = all_stages_vars[a];
- CaseDefinition caseDef = {"gl_" + var, stage};
+ CaseDefinition caseDef = {"gl_" + var, stage, false};
addFunctionCaseWithPrograms(group.get(),
de::toLower(var) + "_" +
getShaderStageName(stage), "",
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);
+ }
}
}
{
namespace subgroups
{
-static bool checkVertexPipelineStagesSubgroupSize(std::vector<const void*> datas,
+
+bool checkVertexPipelineStagesSubgroupSize(std::vector<const void*> datas,
deUint32 width, deUint32 subgroupSize)
{
const deUint32* data =
return true;
}
-static bool checkVertexPipelineStagesSubgroupInvocationID(
- std::vector<const void*> datas, deUint32 width, deUint32 subgroupSize)
+bool checkVertexPipelineStagesSubgroupInvocationID(std::vector<const void*> datas,
+ deUint32 width, deUint32 subgroupSize)
{
const deUint32* data =
reinterpret_cast<const deUint32*>(datas[0]);
{
std::string varName;
VkShaderStageFlags shaderStage;
+ bool noSSBO;
};
}
+void initFrameBufferPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream src;
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ src << "#version 450\n"
+ << "#extension GL_KHR_shader_subgroup_basic: enable\n"
+ << "layout(location = 0) out vec4 out_color;\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << " out_color = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 1.0f, 1.0f);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+
+ std::ostringstream source;
+ source << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in vec4 in_color;\n"
+ << "layout(location = 0) out uvec4 out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uvec4(in_color);\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(source.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage)
}
}
+ //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);
+ }
+ else if ("gl_SubgroupInvocationID" == caseDef.varName)
+ {
+ 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))
{
{
const std::string var = all_stages_vars[a];
- CaseDefinition caseDef = {"gl_" + var, stage};
+ CaseDefinition caseDef = {"gl_" + var, stage, false};
addFunctionCaseWithPrograms(group.get(),
de::toLower(var) + "_" +
getShaderStageName(stage), "",
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 VkShaderStageFlags stage = VK_SHADER_STAGE_COMPUTE_BIT;
const std::string var = compute_only_vars[a];
- CaseDefinition caseDef = {"gl_" + var, stage};
+ CaseDefinition caseDef = {"gl_" + var, stage, false};
addFunctionCaseWithPrograms(group.get(), de::toLower(var) +
"_" + getShaderStageName(stage), "",
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
- VkFormat format;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ VkFormat format;
+ bool noSSBO;
};
+void initFrameBufferPrograms (SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream bdy;
+
+ bdy << " bool tempResult = true;\n";
+
+ for (deUint32 i = 1; i <= subgroups::maxSupportedSubgroupSize(); i *= 2)
+ {
+ bdy << " {\n"
+ << " const uint clusterSize = " << i << ";\n"
+ << " if (clusterSize <= gl_SubgroupSize)\n"
+ << " {\n"
+ << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " op = "
+ << getOpTypeName(caseDef.opType) + "(data[gl_SubgroupInvocationID], clusterSize);\n"
+ << " for (uint clusterOffset = 0; clusterOffset < gl_SubgroupSize; clusterOffset += clusterSize)\n"
+ << " {\n"
+ << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " ref = "
+ << getIdentity(caseDef.opType, caseDef.format) << ";\n"
+ << " for (uint index = clusterOffset; index < (clusterOffset + clusterSize); index++)\n"
+ << " {\n"
+ << " if (subgroupBallotBitExtract(mask, index))\n"
+ << " {\n"
+ << " ref = " << getOpTypeOperation(caseDef.opType, caseDef.format, "ref", "data[index]") << ";\n"
+ << " }\n"
+ << " }\n"
+ << " if ((clusterOffset <= gl_SubgroupInvocationID) && (gl_SubgroupInvocationID < (clusterOffset + clusterSize)))\n"
+ << " {\n"
+ << " if (!" << getCompare(caseDef.opType, caseDef.format, "ref", "op") << ")\n"
+ << " {\n"
+ << " tempResult = false;\n"
+ << " }\n"
+ << " }\n"
+ << " }\n"
+ << " }\n"
+ << " }\n";
+ }
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ std::ostringstream src;
+ std::ostringstream fragmentSrc;
+
+ src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450 )<< "\n"
+ << "#extension GL_KHR_shader_subgroup_clustered: enable\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(location = 0) out float out_color;\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[" << subgroups::maxSupportedSubgroupSize() << "];\n"
+ << "};\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << " uvec4 mask = subgroupBallot(true);\n"
+ << bdy.str()
+ << " out_color = float(tempResult ? 1 : 0);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in float in_color;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(in_color);\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
std::ostringstream bdy;
<< "#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) buffer Buffer2\n"
+ << "layout(set = 0, binding = 0, std430) readonly buffer Buffer2\n"
<< "{\n"
<< " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n"
<< "};\n"
TCU_THROW(NotSupportedError, "Device does not support subgroup double operations");
}
+ //Tests which don't use the SSBO
+ if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ subgroups::SSBOData inputData;
+ inputData.format = caseDef.format;
+ inputData.numElements = subgroups::maxSupportedSubgroupSize();
+ inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
+
+ 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))
{
continue;
}
- CaseDefinition caseDef = {opTypeIndex, stage, format};
+ CaseDefinition caseDef = {opTypeIndex, stage, format, false};
std::ostringstream name;
addFunctionCaseWithPrograms(group.get(), name.str(),
"", initPrograms, test, caseDef);
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == stage)
+ {
+ caseDef.noSSBO = true;
+ addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "",
+ initFrameBufferPrograms, test, caseDef);
+ }
}
}
}
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
- VkFormat format;
- int direction;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ VkFormat format;
+ int direction;
+ bool noSSBO;
};
+void initFrameBufferPrograms (SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::string swapTable[OPTYPE_LAST];
+ swapTable[OPTYPE_QUAD_BROADCAST] = "";
+ swapTable[OPTYPE_QUAD_SWAP_HORIZONTAL] = " const uint swapTable[4] = {1, 0, 3, 2};\n";
+ swapTable[OPTYPE_QUAD_SWAP_VERTICAL] = " const uint swapTable[4] = {2, 3, 0, 1};\n";
+ swapTable[OPTYPE_QUAD_SWAP_DIAGONAL] = " const uint swapTable[4] = {3, 2, 1, 0};\n";
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ std::ostringstream src;
+ std::ostringstream fragmentSrc;
+
+ src << "#version 450\n"
+ << "#extension GL_KHR_shader_subgroup_quad: enable\n"
+ << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(location = 0) out float result;\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[" << subgroups::maxSupportedSubgroupSize() << "];\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";
+ }
+
+ src << " if (subgroupBallotBitExtract(mask, otherID))\n"
+ << " {\n"
+ << " result = (op == data[otherID]) ? 1.0f : 0.0f;\n"
+ << " }\n"
+ << " else\n"
+ << " {\n"
+ << " result = 1.0f; // Invocation we read from was inactive, so we can't verify results!\n"
+ << " }\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in float result;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(result);\n"
+ << "}\n";
+
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
std::string swapTable[OPTYPE_LAST];
<< "#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) buffer Buffer2\n"
+ << "layout(set = 0, binding = 0, std430) readonly buffer Buffer2\n"
<< "{\n"
<< " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n"
<< "};\n"
TCU_THROW(NotSupportedError, "Device does not support subgroup double operations");
}
+ //Tests which don't use the SSBO
+ if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ subgroups::SSBOData inputData;
+ inputData.format = caseDef.format;
+ inputData.numElements = subgroups::maxSupportedSubgroupSize();
+ inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
+
+ 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))
{
for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex)
{
- CaseDefinition caseDef = {opTypeIndex, stage, format, direction};
+ CaseDefinition caseDef = {opTypeIndex, stage, format, direction, false};
std::ostringstream name;
addFunctionCaseWithPrograms(group.get(), name.str(),
"", initPrograms, test, caseDef);
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == stage )
+ {
+ caseDef.noSSBO = true;
+ addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "",
+ initFrameBufferPrograms, test, caseDef);
+ }
+
}
}
}
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ bool noSSBO;
};
+void initFrameBufferPrograms (SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::string extension = (OPTYPE_CLUSTERED == caseDef.opType) ?
+ "#extension GL_KHR_shader_subgroup_clustered: enable\n" :
+ "#extension GL_KHR_shader_subgroup_quad: enable\n";
+
+ extension += "#extension GL_KHR_shader_subgroup_ballot: enable\n";
+
+ std::ostringstream bdy;
+
+ bdy << " uint tempResult = 0x1;\n"
+ << " uvec4 mask = subgroupBallot(true);\n";
+
+ if (OPTYPE_CLUSTERED == caseDef.opType)
+ {
+ for (deUint32 i = 1; i <= subgroups::maxSupportedSubgroupSize(); i *= 2)
+ {
+ bdy << " if (gl_SubgroupSize >= " << i << ")\n"
+ << " {\n"
+ << " uvec4 contribution = uvec4(0);\n"
+ << " const uint modID = gl_SubgroupInvocationID % 32;\n"
+ << " switch (gl_SubgroupInvocationID / 32)\n"
+ << " {\n"
+ << " case 0: contribution.x = 1 << modID; break;\n"
+ << " case 1: contribution.y = 1 << modID; break;\n"
+ << " case 2: contribution.z = 1 << modID; break;\n"
+ << " case 3: contribution.w = 1 << modID; break;\n"
+ << " }\n"
+ << " uvec4 result = subgroupClusteredOr(contribution, " << i << ");\n"
+ << " uint rootID = gl_SubgroupInvocationID & ~(" << i - 1 << ");\n"
+ << " for (uint i = 0; i < " << i << "; i++)\n"
+ << " {\n"
+ << " uint nextID = rootID + i;\n"
+ << " if (subgroupBallotBitExtract(mask, nextID) ^^ subgroupBallotBitExtract(result, nextID))\n"
+ << " {\n"
+ << " tempResult = 0;\n"
+ << " }\n"
+ << " }\n"
+ << " }\n";
+ }
+ }
+ else
+ {
+ bdy << " uint cluster[4] =\n"
+ << " {\n"
+ << " subgroupQuadBroadcast(gl_SubgroupInvocationID, 0),\n"
+ << " subgroupQuadBroadcast(gl_SubgroupInvocationID, 1),\n"
+ << " subgroupQuadBroadcast(gl_SubgroupInvocationID, 2),\n"
+ << " subgroupQuadBroadcast(gl_SubgroupInvocationID, 3)\n"
+ << " };\n"
+ << " uint rootID = gl_SubgroupInvocationID & ~0x3;\n"
+ << " for (uint i = 0; i < 4; i++)\n"
+ << " {\n"
+ << " uint nextID = rootID + i;\n"
+ << " if (subgroupBallotBitExtract(mask, nextID) && (cluster[i] != nextID))\n"
+ << " {\n"
+ << " tempResult = mask.x;\n"
+ << " }\n"
+ << " }\n";
+ }
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ std::ostringstream src;
+ std::ostringstream fragmentSrc;
+
+ src << "#version 450\n"
+ << extension
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(location = 0) out float result;\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << bdy.str()
+ << " result = float(tempResult);\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in float result;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(result);\n"
+ << "}\n";
+
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
std::string extension = (OPTYPE_CLUSTERED == caseDef.opType) ?
" is a required capability!");
}
- 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");
- }
- }
-
if (!subgroups::isSubgroupFeatureSupportedForDevice(context, VK_SUBGROUP_FEATURE_BALLOT_BIT))
{
TCU_THROW(NotSupportedError, "Device does not support subgroup ballot operations");
}
}
+ //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))
+ {
+ TCU_THROW(NotSupportedError, "Device does not support vertex stage SSBO writes");
+ }
+ }
+
if (VK_SHADER_STAGE_FRAGMENT_BIT == caseDef.shaderStage)
{
return subgroups::makeFragmentTest(context, VK_FORMAT_R32_UINT,
for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex)
{
- CaseDefinition caseDef = {opTypeIndex, stage};
+ CaseDefinition caseDef = {opTypeIndex, stage, false};
std::string op = getOpTypeName(opTypeIndex);
addFunctionCaseWithPrograms(group.get(),
de::toLower(op) + "_" + getShaderStageName(stage), "",
initPrograms, test, caseDef);
+
+ if (VK_SHADER_STAGE_VERTEX_BIT & stage )
+ {
+ caseDef.noSSBO = true;
+ addFunctionCaseWithPrograms(group.get(), de::toLower(op) + "_" + getShaderStageName(stage) + "_framebuffer", "",
+ initFrameBufferPrograms, test, caseDef);
+ }
}
}
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
- VkFormat format;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ VkFormat format;
+ bool noSSBO;
};
+void initFrameBufferPrograms (SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::string idTable[OPTYPE_LAST];
+ idTable[OPTYPE_SHUFFLE] = "data2[gl_SubgroupInvocationID]";
+ idTable[OPTYPE_SHUFFLE_XOR] = "gl_SubgroupInvocationID ^ data2[gl_SubgroupInvocationID]";
+ idTable[OPTYPE_SHUFFLE_UP] = "gl_SubgroupInvocationID - data2[gl_SubgroupInvocationID]";
+ idTable[OPTYPE_SHUFFLE_DOWN] = "gl_SubgroupInvocationID + data2[gl_SubgroupInvocationID]";
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ std::ostringstream src;
+ std::ostringstream fragmentSrc;
+
+ src << "#version 450\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(location = 0) out float result;\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;
+ }
+
+ src << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data1[" << subgroups::maxSupportedSubgroupSize() << "];\n"
+ << "};\n"
+ << "layout(set = 0, binding = 1) uniform Buffer2\n"
+ << "{\n"
+ << " uint data2[" << subgroups::maxSupportedSubgroupSize() << "];\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 = (op == data1[id]) ? 1.0f : 0.0f;\n"
+ << " }\n"
+ << " else\n"
+ << " {\n"
+ << " result = 1.0f; // Invocation we read from was inactive, so we can't verify results!\n"
+ << " }\n"
+ << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in float result;\n"
+ << "layout(location = 0) out uint out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = uint(result);\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
std::string idTable[OPTYPE_LAST];
frag << "#extension GL_KHR_shader_subgroup_ballot: enable\n"
<< "layout(location = 0) out uint result;\n"
- << "layout(set = 0, binding = 0, std430) buffer Buffer1\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) buffer Buffer2\n"
+ << "layout(set = 0, binding = 1, std430) readonly buffer Buffer2\n"
<< "{\n"
<< " uint data2[];\n"
<< "};\n"
TCU_THROW(NotSupportedError, "Device does not support subgroup double operations");
}
+ //Tests which don't use the SSBO
+ if (caseDef.noSSBO && VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ 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;
+
+ 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))
{
for (int opTypeIndex = 0; opTypeIndex < OPTYPE_LAST; ++opTypeIndex)
{
- CaseDefinition caseDef = {opTypeIndex, stage, format};
+ CaseDefinition caseDef = {opTypeIndex, stage, format, false};
std::ostringstream name;
addFunctionCaseWithPrograms(group.get(), name.str(),
"", initPrograms, test, caseDef);
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == stage )
+ {
+ caseDef.noSSBO = true;
+ addFunctionCaseWithPrograms(group.get(), name.str()+"_framebuffer", "",
+ initFrameBufferPrograms, test, caseDef);
+ }
}
}
}
#include "vktSubgroupsTestsUtils.hpp"
#include "deRandom.hpp"
#include "tcuCommandLine.hpp"
+#include "vkImageUtil.hpp"
using namespace tcu;
using namespace std;
&framebufferCreateInfo);
}
-Move<VkPipeline> makeGraphicsPipeline(Context& context,
- const VkPipelineLayout pipelineLayout,
- const VkShaderStageFlags stages,
- const VkShaderModule vertexShaderModule,
- const VkShaderModule fragmentShaderModule,
- const VkShaderModule geometryShaderModule,
- const VkShaderModule tessellationControlModule,
- const VkShaderModule tessellationEvaluationModule,
- const VkRenderPass renderPass,
- const VkPrimitiveTopology topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
+Move<VkPipeline> makeGraphicsPipeline(Context& context,
+ const VkPipelineLayout pipelineLayout,
+ const VkShaderStageFlags stages,
+ const VkShaderModule vertexShaderModule,
+ const VkShaderModule fragmentShaderModule,
+ const VkShaderModule geometryShaderModule,
+ const VkShaderModule tessellationControlModule,
+ const VkShaderModule tessellationEvaluationModule,
+ const VkRenderPass renderPass,
+ const VkPrimitiveTopology topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+ const VkVertexInputBindingDescription* vertexInputBindingDescription = DE_NULL,
+ const VkVertexInputAttributeDescription* vertexInputAttributeDescriptions = DE_NULL,
+ const vk::VkFormat attachmentFormat = VK_FORMAT_R32G32B32A32_SFLOAT
+ )
{
const VkBool32 disableRasterization = !(VK_SHADER_STAGE_FRAGMENT_BIT & stages);
std::vector<vk::VkPipelineShaderStageCreateInfo> pipelineShaderStageParams;
VK_SHADER_STAGE_VERTEX_BIT, // VkShaderStageFlagBits stage
vertexShaderModule, // VkShaderModule module
"main", // const char* pName
- DE_NULL // const VkSpecializationInfo* pSpecializationInfo
+ DE_NULL // const VkSpecializationInfo* pSpecializationInfo
};
pipelineShaderStageParams.push_back(stageCreateInfo);
}
const VkPipelineVertexInputStateCreateInfo vertexInputStateCreateInfo =
{
- VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, DE_NULL, 0u,
- 0u, DE_NULL, 0u, DE_NULL,
+ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ 0u, // VkPipelineVertexInputStateCreateFlags flags;
+ vertexInputBindingDescription == DE_NULL ? 0u : 1u, // deUint32 vertexBindingDescriptionCount;
+ vertexInputBindingDescription, // const VkVertexInputBindingDescription* pVertexBindingDescriptions;
+ vertexInputAttributeDescriptions == DE_NULL ? 0u : 1u, // deUint32 vertexAttributeDescriptionCount;
+ vertexInputAttributeDescriptions, // const VkVertexInputAttributeDescription* pVertexAttributeDescriptions;
};
const VkPipelineTessellationStateCreateInfo tessellationStateCreateInfo =
stencilOpState, 0.0f, 0.0f
};
+ const deUint32 numChannels = getNumUsedChannels(mapVkFormat(attachmentFormat).order);
+ const VkColorComponentFlags colorComponent =
+ numChannels == 1 ? VK_COLOR_COMPONENT_R_BIT :
+ numChannels == 2 ? VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT :
+ numChannels == 3 ? VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT :
+ VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
+
const VkPipelineColorBlendAttachmentState colorBlendAttachmentState =
{
VK_FALSE, VK_BLEND_FACTOR_ZERO, VK_BLEND_FACTOR_ZERO, VK_BLEND_OP_ADD,
VK_BLEND_FACTOR_ZERO, VK_BLEND_FACTOR_ZERO, VK_BLEND_OP_ADD,
- VK_COLOR_COMPONENT_R_BIT
+ colorComponent
};
const VkPipelineColorBlendStateCreateInfo colorBlendStateCreateInfo =
const vk::VkPipelineShaderStageCreateInfo pipelineShaderStageParams =
{
- VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // VkStructureType
- // sType;
- DE_NULL, // const void* pNext;
- 0u, // VkPipelineShaderStageCreateFlags flags;
- VK_SHADER_STAGE_COMPUTE_BIT, // VkShaderStageFlagBits stage;
- shaderModule, // VkShaderModule module;
- "main", // const char* pName;
- &info, // const VkSpecializationInfo* pSpecializationInfo;
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ 0u, // VkPipelineShaderStageCreateFlags flags;
+ VK_SHADER_STAGE_COMPUTE_BIT, // VkShaderStageFlagBits stage;
+ shaderModule, // VkShaderModule module;
+ "main", // const char* pName;
+ &info, // const VkSpecializationInfo* pSpecializationInfo;
};
const vk::VkComputePipelineCreateInfo pipelineCreateInfo =
{
- VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, // VkStructureType
- // sType;
- DE_NULL, // const void* pNext;
- 0u, // VkPipelineCreateFlags flags;
- pipelineShaderStageParams, // VkPipelineShaderStageCreateInfo stage;
- pipelineLayout, // VkPipelineLayout layout;
- DE_NULL, // VkPipeline basePipelineHandle;
- 0, // deInt32 basePipelineIndex;
+ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ 0u, // VkPipelineCreateFlags flags;
+ pipelineShaderStageParams, // VkPipelineShaderStageCreateInfo stage;
+ pipelineLayout, // VkPipelineLayout layout;
+ DE_NULL, // VkPipeline basePipelineHandle;
+ 0, // deInt32 basePipelineIndex;
};
return createComputePipeline(context.getDeviceInterface(),
{
const VkCommandBufferAllocateInfo bufferAllocateParams =
{
- VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // VkStructureType
- // sType;
- DE_NULL, // const void* pNext;
- commandPool, // VkCommandPool commandPool;
- VK_COMMAND_BUFFER_LEVEL_PRIMARY, // VkCommandBufferLevel level;
- 1u, // deUint32 bufferCount;
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ commandPool, // VkCommandPool commandPool;
+ VK_COMMAND_BUFFER_LEVEL_PRIMARY, // VkCommandBufferLevel level;
+ 1u, // deUint32 bufferCount;
};
return allocateCommandBuffer(context.getDeviceInterface(),
context.getDevice(), &bufferAllocateParams);
{
const VkCommandBufferBeginInfo commandBufBeginParams =
{
- VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // VkStructureType sType;
- DE_NULL, // const void* pNext;
- 0u, // VkCommandBufferUsageFlags flags;
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // VkStructureType sType;
+ DE_NULL, // const void* pNext;
+ 0u, // VkCommandBufferUsageFlags flags;
(const VkCommandBufferInheritanceInfo*)DE_NULL,
};
VK_CHECK(context.getDeviceInterface().beginCommandBuffer(
return reinterpret_cast<Image*>(this);
}
- VkDescriptorType getType() const
+ virtual VkDescriptorType getType() const
{
if (m_isImage)
{
{
explicit Buffer(
Context& context, VkDeviceSize sizeInBytes, VkBufferUsageFlags usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
- : BufferOrImage(false), m_sizeInBytes(sizeInBytes)
+ : BufferOrImage (false)
+ , m_sizeInBytes (sizeInBytes)
+ , m_usage (usage)
{
const vk::VkBufferCreateInfo bufferCreateInfo =
{
DE_NULL,
0u,
sizeInBytes,
- usage,
+ m_usage,
VK_SHARING_MODE_EXCLUSIVE,
0u,
DE_NULL,
m_allocation->getOffset()));
}
+ virtual VkDescriptorType getType() const
+ {
+ if (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT == m_usage)
+ {
+ return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+ }
+ return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
+ }
+
VkBuffer getBuffer() const {
return *m_buffer;
}
+ const VkBuffer* getBufferPtr() const {
+ return &(*m_buffer);
+ }
VkDeviceSize getSize() const {
return m_sizeInBytes;
}
private:
- Move<VkBuffer> m_buffer;
- VkDeviceSize m_sizeInBytes;
+ Move<VkBuffer> m_buffer;
+ VkDeviceSize m_sizeInBytes;
+ const VkBufferUsageFlags m_usage;
};
struct Image : public BufferOrImage
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<const void*> datas, deUint32 width, deUint32 subgroupSize))
+{
+ const deUint32 maxWidth = 1024u;
+ vector<de::SharedPtr<BufferOrImage> > inputBuffers (extraDataCount);
+ DescriptorSetLayoutBuilder layoutBuilder;
+ const Unique<VkShaderModule> vertexShaderModule (createShaderModule
+ (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("vert"), 0u));
+ const Unique<VkShaderModule> fragmentShaderModule (createShaderModule
+ (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("fragment"), 0u));
+ const Unique<VkRenderPass> renderPass (makeRenderPass(context, format));
+
+ const VkVertexInputBindingDescription vertexInputBinding =
+ {
+ 0u, // binding;
+ static_cast<deUint32>(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<BufferOrImage>(new Image(context, static_cast<deUint32>(extraData[i].numElements), 1u, extraData[i].format));
+ }
+ else
+ {
+ vk::VkDeviceSize size = getFormatSizeInBytes(extraData[i].format) * extraData[i].numElements;
+ inputBuffers[i] = de::SharedPtr<BufferOrImage>(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<VkDescriptorSetLayout> descriptorSetLayout (layoutBuilder.build(context.getDeviceInterface(), context.getDevice()));
+
+ const Unique<VkPipelineLayout> pipelineLayout (makePipelineLayout(context, *descriptorSetLayout));
+
+ const Unique<VkPipeline> 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 <VkDescriptorPool> descriptorPool;
+ Move <VkDescriptorSet> 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<VkCommandPool> cmdPool (makeCommandPool(context));
+
+ const deUint32 subgroupSize = getSubgroupSize(context);
+
+ const Unique<VkCommandBuffer> 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<tcu::Vec4> data (maxWidth, Vec4(1.0f, 1.0f, 1.0f, 1.0f));
+ const float pixelSize = 2.0f / static_cast<float>(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<VkFramebuffer> 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<float>(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<VkFence> fence(submitCommandBuffer(context, *cmdBuffer));
+ waitFence(context, fence);
+ }
+
+ {
+ const Allocation& allocResult = imageBufferResult.getAllocation();
+ invalidateMappedMemoryRange(context.getDeviceInterface(), context.getDevice(), allocResult.getMemory(), allocResult.getOffset(), imageResultSize);
+
+ std::vector<const void*> 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,
datas.push_back(resultAlloc.getHostPtr());
}
}
-
if (!checkResult(datas, width, subgroupSize))
{
failedIterations++;
return tcu::TestStatus::pass("OK");
}
+tcu::TestStatus vkt::subgroups::makeFragmentFrameBufferTest (Context& context, VkFormat format, SSBOData* extraDatas,
+ deUint32 extraDatasCount,
+ bool (*checkResult)(std::vector<const void*> datas, deUint32 width,
+ deUint32 height, deUint32 subgroupSize))
+{
+ const Unique<VkShaderModule> vertexShaderModule (createShaderModule
+ (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("vert"), 0u));
+ const Unique<VkShaderModule> fragmentShaderModule (createShaderModule
+ (context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("fragment"), 0u));
+
+ std::vector< de::SharedPtr<BufferOrImage> > inputBuffers(extraDatasCount);
+
+ for (deUint32 i = 0; i < extraDatasCount; i++)
+ {
+ if (extraDatas[i].isImage)
+ {
+ inputBuffers[i] = de::SharedPtr<BufferOrImage>(new Image(context,
+ static_cast<deUint32>(extraDatas[i].numElements), 1, extraDatas[i].format));
+ }
+ else
+ {
+ vk::VkDeviceSize size =
+ getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements;
+ inputBuffers[i] = de::SharedPtr<BufferOrImage>(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<VkDescriptorSetLayout> descriptorSetLayout(
+ layoutBuilder.build(context.getDeviceInterface(), context.getDevice()));
+
+ const Unique<VkPipelineLayout> pipelineLayout(
+ makePipelineLayout(context, *descriptorSetLayout));
+
+ const Unique<VkRenderPass> renderPass(makeRenderPass(context, format));
+ const Unique<VkPipeline> pipeline(makeGraphicsPipeline(context, *pipelineLayout,
+ VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
+ *vertexShaderModule, *fragmentShaderModule, DE_NULL, DE_NULL, DE_NULL, *renderPass));
+
+ 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());
+ }
+
+ Move<VkDescriptorPool> descriptorPool;
+ // Create descriptor set
+ Move<VkDescriptorSet> 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;
+
+ for (deUint32 i = 0; i < extraDatasCount; 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);
+ }
+ }
+
+ if (extraDatasCount > 0)
+ updateBuilder.update(context.getDeviceInterface(), context.getDevice());
+
+ const Unique<VkCommandPool> cmdPool(makeCommandPool(context));
+
+ const deUint32 subgroupSize = getSubgroupSize(context);
+
+ const Unique<VkCommandBuffer> cmdBuffer(
+ makeCommandBuffer(context, *cmdPool));
+
+ unsigned totalIterations = 0;
+ unsigned failedIterations = 0;
+
+ for (deUint32 width = 8; width <= subgroupSize; width *= 2)
+ {
+ for (deUint32 height = 8; height <= subgroupSize; height *= 2)
+ {
+ totalIterations++;
+
+ // re-init the data
+ for (deUint32 i = 0; i < extraDatasCount; i++)
+ {
+ const Allocation& alloc = inputBuffers[i]->getAllocation();
+ initializeMemory(context, alloc, extraDatas[i]);
+ }
+
+ VkDeviceSize formatSize = getFormatSizeInBytes(format);
+ const VkDeviceSize resultImageSizeInBytes =
+ width * height * formatSize;
+
+ Image resultImage(context, width, height, format,
+ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+ VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
+
+ Buffer resultBuffer(context, resultImageSizeInBytes,
+ VK_IMAGE_USAGE_TRANSFER_DST_BIT);
+
+ const Unique<VkFramebuffer> framebuffer(makeFramebuffer(context,
+ *renderPass, resultImage.getImageView(), width, height));
+
+ 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}, {width, height}}, 1, &clearValue,
+ };
+
+ beginCommandBuffer(context, *cmdBuffer);
+
+ VkViewport viewport = {0.0f, 0.0f, static_cast<float>(width),
+ static_cast<float>(height), 0.0f, 1.0f
+ };
+
+ context.getDeviceInterface().cmdSetViewport(
+ *cmdBuffer, 0, 1, &viewport);
+
+ VkRect2D scissor = {{0, 0}, {width, height}};
+
+ 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 (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);
+
+ context.getDeviceInterface().cmdEndRenderPass(*cmdBuffer);
+
+ vk::VkBufferImageCopy region = {0, 0, 0,
+ {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, {0, 0, 0},
+ {width, height, 1}
+ };
+ context.getDeviceInterface().cmdCopyImageToBuffer(*cmdBuffer,
+ resultImage.getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ resultBuffer.getBuffer(), 1, ®ion);
+
+ endCommandBuffer(context, *cmdBuffer);
+
+ Move<VkFence> fence(submitCommandBuffer(context, *cmdBuffer));
+
+ waitFence(context, fence);
+
+ std::vector<const void*> datas;
+ {
+ const Allocation& resultAlloc = resultBuffer.getAllocation();
+ invalidateMappedMemoryRange(context.getDeviceInterface(),
+ context.getDevice(), resultAlloc.getMemory(),
+ resultAlloc.getOffset(), resultImageSizeInBytes);
+
+ // we always have our result data first
+ datas.push_back(resultAlloc.getHostPtr());
+ }
+
+ if (!checkResult(datas, width, height, 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::makeFragmentTest(
Context& context, VkFormat format, SSBOData* extraDatas,
deUint32 extraDatasCount,
SSBOData* extraData, deUint32 extraDataCount,
bool (*checkResult)(std::vector<const void*> datas, deUint32 width, deUint32 subgroupSize));
+tcu::TestStatus makeVertexFrameBufferTest(Context& context, vk::VkFormat format,
+ SSBOData* extraData, deUint32 extraDataCount,
+ bool (*checkResult)(std::vector<const void*> datas, deUint32 width, deUint32 subgroupSize));
+
tcu::TestStatus makeVertexTest(Context& context, vk::VkFormat format,
SSBOData* extraData, deUint32 extraDataCount,
bool (*checkResult)(std::vector<const void*> datas, deUint32 width, deUint32 subgroupSize));
+tcu::TestStatus makeFragmentFrameBufferTest(Context& context, vk::VkFormat format,
+ SSBOData* extraData, deUint32 extraDataCount,
+ bool (*checkResult)(std::vector<const void*> datas, deUint32 width,
+ deUint32 height, deUint32 subgroupSize));
+
tcu::TestStatus makeFragmentTest(Context& context, vk::VkFormat format,
SSBOData* extraData, deUint32 extraDataCount,
bool (*checkResult)(std::vector<const void*> datas, deUint32 width,
return true;
}
+static bool checkVertexPipelineStagesNoSSBO(std::vector<const void*> datas,
+ deUint32 width, deUint32)
+{
+ const float* data =
+ reinterpret_cast<const float*>(datas[0]);
+ for (deUint32 x = 0; x < width; ++x)
+ {
+ deUint32 val = static_cast<deUint32>(data[x]);
+
+ if (0x7 != val)
+ {
+ return false;
+ }
+ }
+
+ return true;
+}
+
static bool checkFragment(std::vector<const void*> datas, deUint32 width,
deUint32 height, deUint32)
{
struct CaseDefinition
{
- int opType;
- VkShaderStageFlags shaderStage;
- VkFormat format;
+ int opType;
+ VkShaderStageFlags shaderStage;
+ VkFormat format;
+ bool noSSBO;
};
+void initFrameBufferPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
+{
+ std::ostringstream vertexSrc;
+ std::ostringstream fragmentSrc;
+
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ vertexSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "#extension GL_KHR_shader_subgroup_vote: enable\n"
+ << "layout(location = 0) out vec4 out_color;\n"
+ << "layout(location = 0) in highp vec4 in_position;\n"
+ << "layout(set = 0, binding = 0) uniform Buffer1\n"
+ << "{\n"
+ << " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[" << subgroups::maxSupportedSubgroupSize() << "];\n"
+ << "};\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << " uint result;\n";
+ if (OPTYPE_ALL == caseDef.opType)
+ {
+ vertexSrc << " result = " << getOpTypeName(caseDef.opType)
+ << "(true) ? 0x1 : 0;\n"
+ << " result |= " << getOpTypeName(caseDef.opType)
+ << "(false) ? 0 : 0x2;\n"
+ << " result |= 0x4;\n"
+ << " out_color.r = float(result);\n";
+ }
+ else if (OPTYPE_ANY == caseDef.opType)
+ {
+ vertexSrc << " result = " << getOpTypeName(caseDef.opType)
+ << "(true) ? 0x1 : 0;\n"
+ << " result |= " << getOpTypeName(caseDef.opType)
+ << "(false) ? 0 : 0x2;\n"
+ << " result |= 0x4;\n"
+ << "out_color.r = float(result);\n";
+ }
+ else if (OPTYPE_ALLEQUAL == caseDef.opType)
+ {
+ vertexSrc << " 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"
+ << " out_color.x = float(result);\n";
+ }
+
+ vertexSrc << " gl_Position = in_position;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("vert") << glu::VertexSource(vertexSrc.str());
+
+ fragmentSrc << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450)<<"\n"
+ << "layout(location = 0) in vec4 in_color;\n"
+ << "layout(location = 0) out vec4 out_color;\n"
+ << "void main()\n"
+ <<"{\n"
+ << " out_color = in_color;\n"
+ << "}\n";
+ programCollection.glslSources.add("fragment") << glu::FragmentSource(fragmentSrc.str());
+ }
+ else
+ {
+ DE_FATAL("Unsupported shader stage");
+ }
+}
+
void initPrograms(SourceCollections& programCollection, CaseDefinition caseDef)
{
if (VK_SHADER_STAGE_COMPUTE_BIT == caseDef.shaderStage)
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) buffer Buffer2\n"
+ << "layout(set = 0, binding = 0, std430) readonly buffer Buffer2\n"
<< "{\n"
<< " " << subgroups::getFormatNameForGLSL(caseDef.format) << " data[];\n"
<< "};\n"
TCU_THROW(NotSupportedError, "Device does not support subgroup double operations");
}
+ //Tests which don't use the SSBO
+ if (caseDef.noSSBO)
+ {
+ if (VK_SHADER_STAGE_VERTEX_BIT == caseDef.shaderStage)
+ {
+ subgroups::SSBOData inputData;
+ inputData.format = caseDef.format;
+ inputData.numElements = subgroups::maxSupportedSubgroupSize();
+ inputData.initializeType = subgroups::SSBOData::InitializeNonZero;
+
+ 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))
{
continue;
}
- CaseDefinition caseDef = {opTypeIndex, stage, format};
+ CaseDefinition caseDef = {opTypeIndex, stage, format, false};
std::string op = getOpTypeName(opTypeIndex);
subgroups::getFormatNameForGLSL(format)
+ "_" + getShaderStageName(stage),
"", 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);
+ }
+
}
}
}
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_compute
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.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.basic.subgroupelect_compute
dEQP-VK.subgroups.basic.subgroupbarrier_compute
dEQP-VK.subgroups.basic.subgroupmemorybarrier_compute
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.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.ballot.compute
dEQP-VK.subgroups.ballot_broadcast.subgroupbroadcast_int_tess_eval
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_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.arithmetic.subgroupexclusiveor_bvec4_geometry
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_geometry
dEQP-VK.subgroups.arithmetic.subgroupadd_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_int_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_ivec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uint_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_uvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_float_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_vec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_double_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupadd_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmul_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmin_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupmax_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveadd_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemul_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemin_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivemax_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveadd_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemul_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemin_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivemax_dvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bool_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec2_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec3_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupand_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupxor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveand_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusiveor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupinclusivexor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveand_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_vertex
+dEQP-VK.subgroups.arithmetic.subgroupexclusiveor_bvec4_vertex_framebuffer
dEQP-VK.subgroups.arithmetic.subgroupexclusivexor_bvec4_vertex
+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.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.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.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.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_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_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.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.shape.clustered_compute