1#version 450 2 3#extension GL_KHR_shader_subgroup_vote: enable 4#extension GL_EXT_shader_subgroup_extended_types_int8: enable 5#extension GL_EXT_shader_subgroup_extended_types_int16: enable 6#extension GL_EXT_shader_subgroup_extended_types_int64: enable 7#extension GL_EXT_shader_subgroup_extended_types_float16: enable 8 9layout (local_size_x = 8) in; 10 11layout(binding = 0) buffer Buffers 12{ 13 i8vec4 i8; 14 u8vec4 u8; 15 i16vec4 i16; 16 u16vec4 u16; 17 i64vec4 i64; 18 u64vec4 u64; 19 f16vec4 f16; 20 int r; 21} data[4]; 22 23void main() 24{ 25 uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4; 26 27 if (subgroupAll(data[invocation].r < 0)) 28 { 29 data[invocation].r = int(subgroupAllEqual(data[0].i8.x)); 30 data[invocation].r = int(subgroupAllEqual(data[1].i8.xy)); 31 data[invocation].r = int(subgroupAllEqual(data[2].i8.xyz)); 32 data[invocation].r = int(subgroupAllEqual(data[3].i8)); 33 34 data[invocation].r = int(subgroupAllEqual(data[0].u8.x)); 35 data[invocation].r = int(subgroupAllEqual(data[1].u8.xy)); 36 data[invocation].r = int(subgroupAllEqual(data[2].u8.xyz)); 37 data[invocation].r = int(subgroupAllEqual(data[3].u8)); 38 39 data[invocation].r = int(subgroupAllEqual(data[0].i16.x)); 40 data[invocation].r = int(subgroupAllEqual(data[1].i16.xy)); 41 data[invocation].r = int(subgroupAllEqual(data[2].i16.xyz)); 42 data[invocation].r = int(subgroupAllEqual(data[3].i16)); 43 44 data[invocation].r = int(subgroupAllEqual(data[0].u16.x)); 45 data[invocation].r = int(subgroupAllEqual(data[1].u16.xy)); 46 data[invocation].r = int(subgroupAllEqual(data[2].u16.xyz)); 47 data[invocation].r = int(subgroupAllEqual(data[3].u16)); 48 } 49 else if (subgroupAny(data[invocation].r < 0)) 50 { 51 data[invocation].r = int(subgroupAllEqual(data[0].i64.x)); 52 data[invocation].r = int(subgroupAllEqual(data[1].i64.xy)); 53 data[invocation].r = int(subgroupAllEqual(data[2].i64.xyz)); 54 data[invocation].r = int(subgroupAllEqual(data[3].i64)); 55 56 data[invocation].r = int(subgroupAllEqual(data[0].u64.x)); 57 data[invocation].r = int(subgroupAllEqual(data[1].u64.xy)); 58 data[invocation].r = int(subgroupAllEqual(data[2].u64.xyz)); 59 data[invocation].r = int(subgroupAllEqual(data[3].u64)); 60 61 data[invocation].r = int(subgroupAllEqual(data[0].f16.x)); 62 data[invocation].r = int(subgroupAllEqual(data[1].f16.xy)); 63 data[invocation].r = int(subgroupAllEqual(data[2].f16.xyz)); 64 data[invocation].r = int(subgroupAllEqual(data[3].f16)); 65 } 66} 67