1#version 450 2#extension GL_KHR_shader_subgroup_basic : require 3#extension GL_KHR_shader_subgroup_ballot : require 4#extension GL_KHR_shader_subgroup_shuffle : require 5#extension GL_KHR_shader_subgroup_shuffle_relative : require 6#extension GL_KHR_shader_subgroup_vote : require 7#extension GL_KHR_shader_subgroup_arithmetic : require 8#extension GL_KHR_shader_subgroup_clustered : require 9#extension GL_KHR_shader_subgroup_quad : require 10layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; 11 12layout(set = 0, binding = 0, std430) buffer SSBO 13{ 14 float FragColor; 15} _9; 16 17void main() 18{ 19 _9.FragColor = float(gl_NumSubgroups); 20 _9.FragColor = float(gl_SubgroupID); 21 _9.FragColor = float(gl_SubgroupSize); 22 _9.FragColor = float(gl_SubgroupInvocationID); 23 subgroupMemoryBarrier(); 24 subgroupBarrier(); 25 subgroupMemoryBarrier(); 26 subgroupMemoryBarrierBuffer(); 27 subgroupMemoryBarrierShared(); 28 subgroupMemoryBarrierImage(); 29 bool elected = subgroupElect(); 30 _9.FragColor = vec4(gl_SubgroupEqMask).x; 31 _9.FragColor = vec4(gl_SubgroupGeMask).x; 32 _9.FragColor = vec4(gl_SubgroupGtMask).x; 33 _9.FragColor = vec4(gl_SubgroupLeMask).x; 34 _9.FragColor = vec4(gl_SubgroupLtMask).x; 35 vec4 broadcasted = subgroupBroadcast(vec4(10.0), 8u); 36 vec3 first = subgroupBroadcastFirst(vec3(20.0)); 37 uvec4 ballot_value = subgroupBallot(true); 38 bool inverse_ballot_value = subgroupInverseBallot(ballot_value); 39 bool bit_extracted = subgroupBallotBitExtract(uvec4(10u), 8u); 40 uint bit_count = subgroupBallotBitCount(ballot_value); 41 uint inclusive_bit_count = subgroupBallotInclusiveBitCount(ballot_value); 42 uint exclusive_bit_count = subgroupBallotExclusiveBitCount(ballot_value); 43 uint lsb = subgroupBallotFindLSB(ballot_value); 44 uint msb = subgroupBallotFindMSB(ballot_value); 45 uint shuffled = subgroupShuffle(10u, 8u); 46 uint shuffled_xor = subgroupShuffleXor(30u, 8u); 47 uint shuffled_up = subgroupShuffleUp(20u, 4u); 48 uint shuffled_down = subgroupShuffleDown(20u, 4u); 49 bool has_all = subgroupAll(true); 50 bool has_any = subgroupAny(true); 51 bool has_equal = subgroupAllEqual(true); 52 vec4 added = subgroupAdd(vec4(20.0)); 53 ivec4 iadded = subgroupAdd(ivec4(20)); 54 vec4 multiplied = subgroupMul(vec4(20.0)); 55 ivec4 imultiplied = subgroupMul(ivec4(20)); 56 vec4 lo = subgroupMin(vec4(20.0)); 57 vec4 hi = subgroupMax(vec4(20.0)); 58 ivec4 slo = subgroupMin(ivec4(20)); 59 ivec4 shi = subgroupMax(ivec4(20)); 60 uvec4 ulo = subgroupMin(uvec4(20u)); 61 uvec4 uhi = subgroupMax(uvec4(20u)); 62 uvec4 anded = subgroupAnd(ballot_value); 63 uvec4 ored = subgroupOr(ballot_value); 64 uvec4 xored = subgroupXor(ballot_value); 65 added = subgroupInclusiveAdd(added); 66 iadded = subgroupInclusiveAdd(iadded); 67 multiplied = subgroupInclusiveMul(multiplied); 68 imultiplied = subgroupInclusiveMul(imultiplied); 69 lo = subgroupInclusiveMin(lo); 70 hi = subgroupInclusiveMax(hi); 71 slo = subgroupInclusiveMin(slo); 72 shi = subgroupInclusiveMax(shi); 73 ulo = subgroupInclusiveMin(ulo); 74 uhi = subgroupInclusiveMax(uhi); 75 anded = subgroupInclusiveAnd(anded); 76 ored = subgroupInclusiveOr(ored); 77 xored = subgroupInclusiveXor(ored); 78 added = subgroupExclusiveAdd(lo); 79 added = subgroupExclusiveAdd(multiplied); 80 multiplied = subgroupExclusiveMul(multiplied); 81 iadded = subgroupExclusiveAdd(imultiplied); 82 imultiplied = subgroupExclusiveMul(imultiplied); 83 lo = subgroupExclusiveMin(lo); 84 hi = subgroupExclusiveMax(hi); 85 ulo = subgroupExclusiveMin(ulo); 86 uhi = subgroupExclusiveMax(uhi); 87 slo = subgroupExclusiveMin(slo); 88 shi = subgroupExclusiveMax(shi); 89 anded = subgroupExclusiveAnd(anded); 90 ored = subgroupExclusiveOr(ored); 91 xored = subgroupExclusiveXor(ored); 92 added = subgroupClusteredAdd(added, 4u); 93 multiplied = subgroupClusteredMul(multiplied, 4u); 94 iadded = subgroupClusteredAdd(iadded, 4u); 95 imultiplied = subgroupClusteredMul(imultiplied, 4u); 96 lo = subgroupClusteredMin(lo, 4u); 97 hi = subgroupClusteredMax(hi, 4u); 98 ulo = subgroupClusteredMin(ulo, 4u); 99 uhi = subgroupClusteredMax(uhi, 4u); 100 slo = subgroupClusteredMin(slo, 4u); 101 shi = subgroupClusteredMax(shi, 4u); 102 anded = subgroupClusteredAnd(anded, 4u); 103 ored = subgroupClusteredOr(ored, 4u); 104 xored = subgroupClusteredXor(xored, 4u); 105 vec4 swap_horiz = subgroupQuadSwapHorizontal(vec4(20.0)); 106 vec4 swap_vertical = subgroupQuadSwapVertical(vec4(20.0)); 107 vec4 swap_diagonal = subgroupQuadSwapDiagonal(vec4(20.0)); 108 vec4 quad_broadcast = subgroupQuadBroadcast(vec4(20.0), 3u); 109} 110 111