3 vec4 undeclared_errors(vec4 f4)
\r
6 gl_SubgroupSize; // ERROR, extension not enabled (basic)
\r
7 gl_SubgroupInvocationID; // ERROR, extension not enabled (basic)
\r
8 subgroupBarrier(); // ERROR, extension not enabled (basic)
\r
9 subgroupMemoryBarrier(); // ERROR, extension not enabled (basic)
\r
10 subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
\r
11 subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic)
\r
12 subgroupElect(); // ERROR, extension not enabled (basic)
\r
13 gl_NumSubgroups; // ERROR, only defined in compute
\r
14 gl_SubgroupID; // ERROR, only defined in compute
\r
15 subgroupMemoryBarrierShared(); // ERROR, only defined in compute
\r
17 subgroupAll(true); // ERROR extension not enabled (vote)
\r
18 subgroupAny(false); // ERROR extension not enabled (vote)
\r
19 subgroupAllEqual(f4); // ERROR extension not enabled (vote)
\r
21 gl_SubgroupEqMask; // ERROR extension not enabled (ballot)
\r
22 gl_SubgroupGeMask; // ERROR extension not enabled (ballot)
\r
23 gl_SubgroupGtMask; // ERROR extension not enabled (ballot)
\r
24 gl_SubgroupLeMask; // ERROR extension not enabled (ballot)
\r
25 gl_SubgroupLtMask; // ERROR extension not enabled (ballot)
\r
26 subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot)
\r
27 subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot)
\r
28 uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot)
\r
29 subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot)
\r
30 subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot)
\r
31 subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot)
\r
32 subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
\r
33 subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot)
\r
34 subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot)
\r
35 subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot)
\r
37 subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle)
\r
38 subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle)
\r
39 subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative)
\r
40 subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative)
\r
42 result = subgroupAdd(f4); // ERROR, extension not enabled (arith)
\r
43 subgroupMul(f4); // ERROR, extension not enabled (arith)
\r
44 subgroupMin(f4); // ERROR, extension not enabled (arith)
\r
45 subgroupMax(f4); // ERROR, extension not enabled (arith)
\r
46 subgroupAnd(ballot); // ERROR, extension not enabled (arith)
\r
47 subgroupOr(ballot); // ERROR, extension not enabled (arith)
\r
48 subgroupXor(ballot); // ERROR, extension not enabled (arith)
\r
49 subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith)
\r
50 subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith)
\r
51 subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith)
\r
52 subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith)
\r
53 subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith)
\r
54 subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith)
\r
55 subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith)
\r
56 subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith)
\r
57 subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith)
\r
58 subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith)
\r
59 subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith)
\r
60 subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith)
\r
61 subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith)
\r
62 subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith)
\r
64 subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered)
\r
65 subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered)
\r
66 subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered)
\r
67 subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered)
\r
68 subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered)
\r
69 subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered)
\r
70 subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered)
\r
72 subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad)
\r
73 subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad)
\r
74 subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad)
\r
75 subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad)
\r
77 uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned)
\r
78 subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
79 subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
80 subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
81 subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
82 subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
83 subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
84 subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
85 subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
86 subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
87 subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
88 subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
89 subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
90 subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
91 subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
92 subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
93 subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
94 subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
95 subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned)
\r
96 subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
97 subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
98 subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned)
\r
103 #extension GL_KHR_shader_subgroup_basic: enable
\r
104 layout(isolines) in;
\r
105 layout(set = 0, binding = 0, std430) buffer Output
\r
112 result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
\r
114 subgroupMemoryBarrier();
\r
115 subgroupMemoryBarrierBuffer();
\r
116 subgroupMemoryBarrierImage();
\r
120 #extension GL_KHR_shader_subgroup_ballot: enable
\r
121 void ballot_works(vec4 f4) {
\r
127 subgroupBroadcast(f4, 0);
\r
128 subgroupBroadcastFirst(f4);
\r
129 uvec4 ballot = subgroupBallot(false);
\r
130 subgroupInverseBallot(uvec4(0x1));
\r
131 subgroupBallotBitExtract(ballot, 0);
\r
132 subgroupBallotBitCount(ballot);
\r
133 subgroupBallotInclusiveBitCount(ballot);
\r
134 subgroupBallotExclusiveBitCount(ballot);
\r
135 subgroupBallotFindLSB(ballot);
\r
136 subgroupBallotFindMSB(ballot);
\r
139 #extension GL_KHR_shader_subgroup_vote: enable
\r
140 void vote_works(vec4 f4)
\r
143 subgroupAny(false);
\r
144 subgroupAllEqual(f4);
\r
147 #extension GL_KHR_shader_subgroup_shuffle: enable
\r
148 #extension GL_KHR_shader_subgroup_shuffle_relative: enable
\r
149 void shuffle_works(vec4 f4)
\r
151 subgroupShuffle(f4, 0);
\r
152 subgroupShuffleXor(f4, 0x1);
\r
153 subgroupShuffleUp(f4, 1);
\r
154 subgroupShuffleDown(f4, 1);
\r
157 #extension GL_KHR_shader_subgroup_arithmetic: enable
\r
158 void arith_works(vec4 f4)
\r
165 subgroupAnd(ballot);
\r
166 subgroupOr(ballot);
\r
167 subgroupXor(ballot);
\r
168 subgroupInclusiveAdd(f4);
\r
169 subgroupInclusiveMul(f4);
\r
170 subgroupInclusiveMin(f4);
\r
171 subgroupInclusiveMax(f4);
\r
172 subgroupInclusiveAnd(ballot);
\r
173 subgroupInclusiveOr(ballot);
\r
174 subgroupInclusiveXor(ballot);
\r
175 subgroupExclusiveAdd(f4);
\r
176 subgroupExclusiveMul(f4);
\r
177 subgroupExclusiveMin(f4);
\r
178 subgroupExclusiveMax(f4);
\r
179 subgroupExclusiveAnd(ballot);
\r
180 subgroupExclusiveOr(ballot);
\r
181 subgroupExclusiveXor(ballot);
\r
184 #extension GL_KHR_shader_subgroup_clustered: enable
\r
185 void clustered_works(vec4 f4)
\r
187 uvec4 ballot = uvec4(0x55,0,0,0);
\r
188 subgroupClusteredAdd(f4, 2);
\r
189 subgroupClusteredMul(f4, 2);
\r
190 subgroupClusteredMin(f4, 2);
\r
191 subgroupClusteredMax(f4, 2);
\r
192 subgroupClusteredAnd(ballot, 2);
\r
193 subgroupClusteredOr(ballot, 2);
\r
194 subgroupClusteredXor(ballot, 2);
\r
197 #extension GL_KHR_shader_subgroup_quad: enable
\r
198 void quad_works(vec4 f4)
\r
200 subgroupQuadBroadcast(f4, 0);
\r
201 subgroupQuadSwapHorizontal(f4);
\r
202 subgroupQuadSwapVertical(f4);
\r
203 subgroupQuadSwapDiagonal(f4);
\r
206 #extension GL_NV_shader_subgroup_partitioned: enable
\r
207 void partitioned_works(vec4 f4)
\r
209 uvec4 parti = subgroupPartitionNV(f4);
\r
210 uvec4 ballot = uvec4(0x55,0,0,0);
\r
211 subgroupPartitionedAddNV(f4, parti);
\r
212 subgroupPartitionedMulNV(f4, parti);
\r
213 subgroupPartitionedMinNV(f4, parti);
\r
214 subgroupPartitionedMaxNV(f4, parti);
\r
215 subgroupPartitionedAndNV(ballot, parti);
\r
216 subgroupPartitionedOrNV(ballot, parti);
\r
217 subgroupPartitionedXorNV(ballot, parti);
\r
218 subgroupPartitionedInclusiveAddNV(f4, parti);
\r
219 subgroupPartitionedInclusiveMulNV(f4, parti);
\r
220 subgroupPartitionedInclusiveMinNV(f4, parti);
\r
221 subgroupPartitionedInclusiveMaxNV(f4, parti);
\r
222 subgroupPartitionedInclusiveAndNV(ballot, parti);
\r
223 subgroupPartitionedInclusiveOrNV(ballot, parti);
\r
224 subgroupPartitionedInclusiveXorNV(ballot, parti);
\r
225 subgroupPartitionedExclusiveAddNV(f4, parti);
\r
226 subgroupPartitionedExclusiveMulNV(f4, parti);
\r
227 subgroupPartitionedExclusiveMinNV(f4, parti);
\r
228 subgroupPartitionedExclusiveMaxNV(f4, parti);
\r
229 subgroupPartitionedExclusiveAndNV(ballot, parti);
\r
230 subgroupPartitionedExclusiveOrNV(ballot, parti);
\r
231 subgroupPartitionedExclusiveXorNV(ballot, parti);
\r
234 // tests for NV_shader_sm_builtins
\r
235 void sm_builtins_err()
\r
237 gl_WarpsPerSMNV; // ERROR, no extension
\r
238 gl_SMCountNV; // ERROR, no extension
\r
239 gl_WarpIDNV; // ERROR, no extension
\r
240 gl_SMIDNV; // ERROR, no extension
\r
243 #ifdef GL_NV_shader_sm_builtins
\r
244 #extension GL_NV_shader_sm_builtins : enable
\r