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