yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

Jeff BolzImplement GL_EXT_long_vector (#4132)b937eae5

main
14.8 KiB361 linesraw
1#version 450 core
2#extension GL_KHR_memory_scope_semantics : enable
3#extension GL_EXT_long_vector : enable
4#extension GL_EXT_shader_explicit_arithmetic_types : enable
5#extension GL_EXT_buffer_reference : enable
6#extension GL_EXT_expect_assume : enable
7#extension GL_EXT_bfloat16 : enable
8#extension GL_KHR_shader_subgroup_arithmetic : enable
9#extension GL_KHR_shader_subgroup_clustered : enable
10#extension GL_NV_shader_subgroup_partitioned : enable
11#extension GL_KHR_shader_subgroup_quad : enable
12#extension GL_KHR_shader_subgroup_shuffle : enable
13#extension GL_KHR_shader_subgroup_shuffle_relative : enable
14#extension GL_KHR_shader_subgroup_rotate : enable
15#extension GL_KHR_shader_subgroup_vote : enable
16#extension GL_KHR_shader_subgroup_ballot : enable
17#extension GL_EXT_shader_subgroup_extended_types_int64 : enable
18
19
20
21
22layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
23
24void main()
25{
26    vector<float16_t, 5> vf16;
27    vector<float, 5> vf32;
28    vector<float64_t, 5> vf64;
29    vector<uint16_t, 5> vu16;
30    vector<int16_t, 5> vi16;
31    vector<uint32_t, 5> vu32;
32    vector<int32_t, 5> vi32;
33    vector<uint64_t, 5> vu64;
34    vector<int64_t, 5> vi64;
35    vector<bool, 5> vb;
36
37    bool b;
38    uint u;
39    uvec4 vu4;
40
41    b = subgroupAllEqual(vu32);
42    vu32 = subgroupBroadcast(vu32, 1u);
43    vu32 = subgroupBroadcastFirst(vu32);
44    vu32 = subgroupShuffle(vu32, u);
45    vu32 = subgroupShuffleXor(vu32, u);
46    vu32 = subgroupShuffleUp(vu32, u);
47    vu32 = subgroupShuffleDown(vu32, u);
48    vu32 = subgroupRotate(vu32, u);
49    vu32 = subgroupClusteredRotate(vu32, u, 4);
50    vu32 = subgroupAdd(vu32);
51    vu32 = subgroupMul(vu32);
52    vu32 = subgroupMin(vu32);
53    vu32 = subgroupMax(vu32);
54    vu32 = subgroupAnd(vu32);
55    vu32 = subgroupOr(vu32);
56    vu32 = subgroupXor(vu32);
57    vu32 = subgroupInclusiveAdd(vu32);
58    vu32 = subgroupInclusiveMul(vu32);
59    vu32 = subgroupInclusiveMin(vu32);
60    vu32 = subgroupInclusiveMax(vu32);
61    vu32 = subgroupInclusiveAnd(vu32);
62    vu32 = subgroupInclusiveOr(vu32);
63    vu32 = subgroupInclusiveXor(vu32);
64    vu32 = subgroupExclusiveAdd(vu32);
65    vu32 = subgroupExclusiveMul(vu32);
66    vu32 = subgroupExclusiveMin(vu32);
67    vu32 = subgroupExclusiveMax(vu32);
68    vu32 = subgroupExclusiveAnd(vu32);
69    vu32 = subgroupExclusiveOr(vu32);
70    vu32 = subgroupExclusiveXor(vu32);
71    vu32 = subgroupClusteredAdd(vu32, 4);
72    vu32 = subgroupClusteredMul(vu32, 4);
73    vu32 = subgroupClusteredMin(vu32, 4);
74    vu32 = subgroupClusteredMax(vu32, 4);
75    vu32 = subgroupClusteredAnd(vu32, 4);
76    vu32 = subgroupClusteredOr(vu32, 4);
77    vu32 = subgroupClusteredXor(vu32, 4);
78    vu32 = subgroupQuadBroadcast(vu32, 1);
79    vu32 = subgroupQuadSwapHorizontal(vu32);
80    vu32 = subgroupQuadSwapVertical(vu32);
81    vu32 = subgroupQuadSwapDiagonal(vu32);
82    vu4 = subgroupPartitionNV(vu32);
83    vu32 = subgroupPartitionedAddNV(vu32, vu4);
84    vu32 = subgroupPartitionedMulNV(vu32, vu4);
85    vu32 = subgroupPartitionedMinNV(vu32, vu4);
86    vu32 = subgroupPartitionedMaxNV(vu32, vu4);
87    vu32 = subgroupPartitionedAndNV(vu32, vu4);
88    vu32 = subgroupPartitionedOrNV(vu32, vu4);
89    vu32 = subgroupPartitionedXorNV(vu32, vu4);
90    vu32 = subgroupPartitionedInclusiveAddNV(vu32, vu4);
91    vu32 = subgroupPartitionedInclusiveMulNV(vu32, vu4);
92    vu32 = subgroupPartitionedInclusiveMinNV(vu32, vu4);
93    vu32 = subgroupPartitionedInclusiveMaxNV(vu32, vu4);
94    vu32 = subgroupPartitionedInclusiveAndNV(vu32, vu4);
95    vu32 = subgroupPartitionedInclusiveOrNV(vu32, vu4);
96    vu32 = subgroupPartitionedInclusiveXorNV(vu32, vu4);
97    vu32 = subgroupPartitionedExclusiveAddNV(vu32, vu4);
98    vu32 = subgroupPartitionedExclusiveMulNV(vu32, vu4);
99    vu32 = subgroupPartitionedExclusiveMinNV(vu32, vu4);
100    vu32 = subgroupPartitionedExclusiveMaxNV(vu32, vu4);
101    vu32 = subgroupPartitionedExclusiveAndNV(vu32, vu4);
102    vu32 = subgroupPartitionedExclusiveOrNV(vu32, vu4);
103    vu32 = subgroupPartitionedExclusiveXorNV(vu32, vu4);
104
105    b = subgroupAllEqual(vf32);
106    vf32 = subgroupBroadcast(vf32, 1u);
107    vf32 = subgroupBroadcastFirst(vf32);
108    vf32 = subgroupShuffle(vf32, u);
109    vf32 = subgroupShuffleXor(vf32, u);
110    vf32 = subgroupShuffleUp(vf32, u);
111    vf32 = subgroupShuffleDown(vf32, u);
112    vf32 = subgroupRotate(vf32, u);
113    vf32 = subgroupClusteredRotate(vf32, u, 4);
114    vf32 = subgroupAdd(vf32);
115    vf32 = subgroupMul(vf32);
116    vf32 = subgroupMin(vf32);
117    vf32 = subgroupMax(vf32);
118    //vf32 = subgroupAnd(vf32);
119    //vf32 = subgroupOr(vf32);
120    //vf32 = subgroupXor(vf32);
121    vf32 = subgroupInclusiveAdd(vf32);
122    vf32 = subgroupInclusiveMul(vf32);
123    vf32 = subgroupInclusiveMin(vf32);
124    vf32 = subgroupInclusiveMax(vf32);
125    //vf32 = subgroupInclusiveAnd(vf32);
126    //vf32 = subgroupInclusiveOr(vf32);
127    //vf32 = subgroupInclusiveXor(vf32);
128    vf32 = subgroupExclusiveAdd(vf32);
129    vf32 = subgroupExclusiveMul(vf32);
130    vf32 = subgroupExclusiveMin(vf32);
131    vf32 = subgroupExclusiveMax(vf32);
132    //vf32 = subgroupExclusiveAnd(vf32);
133    //vf32 = subgroupExclusiveOr(vf32);
134    //vf32 = subgroupExclusiveXor(vf32);
135    vf32 = subgroupClusteredAdd(vf32, 4);
136    vf32 = subgroupClusteredMul(vf32, 4);
137    vf32 = subgroupClusteredMin(vf32, 4);
138    vf32 = subgroupClusteredMax(vf32, 4);
139    //vf32 = subgroupClusteredAnd(vf32, 4);
140    //vf32 = subgroupClusteredOr(vf32, 4);
141    //vf32 = subgroupClusteredXor(vf32, 4);
142    vf32 = subgroupQuadBroadcast(vf32, 1);
143    vf32 = subgroupQuadSwapHorizontal(vf32);
144    vf32 = subgroupQuadSwapVertical(vf32);
145    vf32 = subgroupQuadSwapDiagonal(vf32);
146    vu4 = subgroupPartitionNV(vf32);
147    vf32 = subgroupPartitionedAddNV(vf32, vu4);
148    vf32 = subgroupPartitionedMulNV(vf32, vu4);
149    vf32 = subgroupPartitionedMinNV(vf32, vu4);
150    vf32 = subgroupPartitionedMaxNV(vf32, vu4);
151    //vf32 = subgroupPartitionedAndNV(vf32, vu4);
152    //vf32 = subgroupPartitionedOrNV(vf32, vu4);
153    //vf32 = subgroupPartitionedXorNV(vf32, vu4);
154    vf32 = subgroupPartitionedInclusiveAddNV(vf32, vu4);
155    vf32 = subgroupPartitionedInclusiveMulNV(vf32, vu4);
156    vf32 = subgroupPartitionedInclusiveMinNV(vf32, vu4);
157    vf32 = subgroupPartitionedInclusiveMaxNV(vf32, vu4);
158    //vf32 = subgroupPartitionedInclusiveAndNV(vf32, vu4);
159    //vf32 = subgroupPartitionedInclusiveOrNV(vf32, vu4);
160    //vf32 = subgroupPartitionedInclusiveXorNV(vf32, vu4);
161    vf32 = subgroupPartitionedExclusiveAddNV(vf32, vu4);
162    vf32 = subgroupPartitionedExclusiveMulNV(vf32, vu4);
163    vf32 = subgroupPartitionedExclusiveMinNV(vf32, vu4);
164    vf32 = subgroupPartitionedExclusiveMaxNV(vf32, vu4);
165    //vf32 = subgroupPartitionedExclusiveAndNV(vf32, vu4);
166    //vf32 = subgroupPartitionedExclusiveOrNV(vf32, vu4);
167    //vf32 = subgroupPartitionedExclusiveXorNV(vf32, vu4);
168
169    b = subgroupAllEqual(vf64);
170    vf64 = subgroupBroadcast(vf64, 1u);
171    vf64 = subgroupBroadcastFirst(vf64);
172    vf64 = subgroupShuffle(vf64, u);
173    vf64 = subgroupShuffleXor(vf64, u);
174    vf64 = subgroupShuffleUp(vf64, u);
175    vf64 = subgroupShuffleDown(vf64, u);
176    vf64 = subgroupRotate(vf64, u);
177    vf64 = subgroupClusteredRotate(vf64, u, 4);
178    vf64 = subgroupAdd(vf64);
179    vf64 = subgroupMul(vf64);
180    vf64 = subgroupMin(vf64);
181    vf64 = subgroupMax(vf64);
182    //vf64 = subgroupAnd(vf64);
183    //vf64 = subgroupOr(vf64);
184    //vf64 = subgroupXor(vf64);
185    vf64 = subgroupInclusiveAdd(vf64);
186    vf64 = subgroupInclusiveMul(vf64);
187    vf64 = subgroupInclusiveMin(vf64);
188    vf64 = subgroupInclusiveMax(vf64);
189    //vf64 = subgroupInclusiveAnd(vf64);
190    //vf64 = subgroupInclusiveOr(vf64);
191    //vf64 = subgroupInclusiveXor(vf64);
192    vf64 = subgroupExclusiveAdd(vf64);
193    vf64 = subgroupExclusiveMul(vf64);
194    vf64 = subgroupExclusiveMin(vf64);
195    vf64 = subgroupExclusiveMax(vf64);
196    //vf64 = subgroupExclusiveAnd(vf64);
197    //vf64 = subgroupExclusiveOr(vf64);
198    //vf64 = subgroupExclusiveXor(vf64);
199    vf64 = subgroupClusteredAdd(vf64, 4);
200    vf64 = subgroupClusteredMul(vf64, 4);
201    vf64 = subgroupClusteredMin(vf64, 4);
202    vf64 = subgroupClusteredMax(vf64, 4);
203    //vf64 = subgroupClusteredAnd(vf64, 4);
204    //vf64 = subgroupClusteredOr(vf64, 4);
205    //vf64 = subgroupClusteredXor(vf64, 4);
206    vf64 = subgroupQuadBroadcast(vf64, 1);
207    vf64 = subgroupQuadSwapHorizontal(vf64);
208    vf64 = subgroupQuadSwapVertical(vf64);
209    vf64 = subgroupQuadSwapDiagonal(vf64);
210    vu4 = subgroupPartitionNV(vf64);
211    vf64 = subgroupPartitionedAddNV(vf64, vu4);
212    vf64 = subgroupPartitionedMulNV(vf64, vu4);
213    vf64 = subgroupPartitionedMinNV(vf64, vu4);
214    vf64 = subgroupPartitionedMaxNV(vf64, vu4);
215    //vf64 = subgroupPartitionedAndNV(vf64, vu4);
216    //vf64 = subgroupPartitionedOrNV(vf64, vu4);
217    //vf64 = subgroupPartitionedXorNV(vf64, vu4);
218    vf64 = subgroupPartitionedInclusiveAddNV(vf64, vu4);
219    vf64 = subgroupPartitionedInclusiveMulNV(vf64, vu4);
220    vf64 = subgroupPartitionedInclusiveMinNV(vf64, vu4);
221    vf64 = subgroupPartitionedInclusiveMaxNV(vf64, vu4);
222    //vf64 = subgroupPartitionedInclusiveAndNV(vf64, vu4);
223    //vf64 = subgroupPartitionedInclusiveOrNV(vf64, vu4);
224    //vf64 = subgroupPartitionedInclusiveXorNV(vf64, vu4);
225    vf64 = subgroupPartitionedExclusiveAddNV(vf64, vu4);
226    vf64 = subgroupPartitionedExclusiveMulNV(vf64, vu4);
227    vf64 = subgroupPartitionedExclusiveMinNV(vf64, vu4);
228    vf64 = subgroupPartitionedExclusiveMaxNV(vf64, vu4);
229    //vf64 = subgroupPartitionedExclusiveAndNV(vf64, vu4);
230    //vf64 = subgroupPartitionedExclusiveOrNV(vf64, vu4);
231    //vf64 = subgroupPartitionedExclusiveXorNV(vf64, vu4);
232
233    b = subgroupAllEqual(vb);
234    vb = subgroupBroadcast(vb, 1u);
235    vb = subgroupBroadcastFirst(vb);
236    vb = subgroupShuffle(vb, u);
237    vb = subgroupShuffleXor(vb, u);
238    vb = subgroupShuffleUp(vb, u);
239    vb = subgroupShuffleDown(vb, u);
240    vb = subgroupRotate(vb, u);
241    vb = subgroupClusteredRotate(vb, u, 4);
242    //vb = subgroupAdd(vb);
243    //vb = subgroupMul(vb);
244    //vb = subgroupMin(vb);
245    //vb = subgroupMax(vb);
246    vb = subgroupAnd(vb);
247    vb = subgroupOr(vb);
248    vb = subgroupXor(vb);
249    //vb = subgroupInclusiveAdd(vb);
250    //vb = subgroupInclusiveMul(vb);
251    //vb = subgroupInclusiveMin(vb);
252    //vb = subgroupInclusiveMax(vb);
253    vb = subgroupInclusiveAnd(vb);
254    vb = subgroupInclusiveOr(vb);
255    vb = subgroupInclusiveXor(vb);
256    //vb = subgroupExclusiveAdd(vb);
257    //vb = subgroupExclusiveMul(vb);
258    //vb = subgroupExclusiveMin(vb);
259    //vb = subgroupExclusiveMax(vb);
260    vb = subgroupExclusiveAnd(vb);
261    vb = subgroupExclusiveOr(vb);
262    vb = subgroupExclusiveXor(vb);
263    //vb = subgroupClusteredAdd(vb, 4);
264    //vb = subgroupClusteredMul(vb, 4);
265    //vb = subgroupClusteredMin(vb, 4);
266    //vb = subgroupClusteredMax(vb, 4);
267    vb = subgroupClusteredAnd(vb, 4);
268    vb = subgroupClusteredOr(vb, 4);
269    vb = subgroupClusteredXor(vb, 4);
270    vb = subgroupQuadBroadcast(vb, 1);
271    vb = subgroupQuadSwapHorizontal(vb);
272    vb = subgroupQuadSwapVertical(vb);
273    vb = subgroupQuadSwapDiagonal(vb);
274    vu4 = subgroupPartitionNV(vb);
275    //vb = subgroupPartitionedAddNV(vb, vu4);
276    //vb = subgroupPartitionedMulNV(vb, vu4);
277    //vb = subgroupPartitionedMinNV(vb, vu4);
278    //vb = subgroupPartitionedMaxNV(vb, vu4);
279    vb = subgroupPartitionedAndNV(vb, vu4);
280    vb = subgroupPartitionedOrNV(vb, vu4);
281    vb = subgroupPartitionedXorNV(vb, vu4);
282    //vb = subgroupPartitionedInclusiveAddNV(vb, vu4);
283    //vb = subgroupPartitionedInclusiveMulNV(vb, vu4);
284    //vb = subgroupPartitionedInclusiveMinNV(vb, vu4);
285    //vb = subgroupPartitionedInclusiveMaxNV(vb, vu4);
286    vb = subgroupPartitionedInclusiveAndNV(vb, vu4);
287    vb = subgroupPartitionedInclusiveOrNV(vb, vu4);
288    vb = subgroupPartitionedInclusiveXorNV(vb, vu4);
289    //vb = subgroupPartitionedExclusiveAddNV(vb, vu4);
290    //vb = subgroupPartitionedExclusiveMulNV(vb, vu4);
291    //vb = subgroupPartitionedExclusiveMinNV(vb, vu4);
292    //vb = subgroupPartitionedExclusiveMaxNV(vb, vu4);
293    vb = subgroupPartitionedExclusiveAndNV(vb, vu4);
294    vb = subgroupPartitionedExclusiveOrNV(vb, vu4);
295    vb = subgroupPartitionedExclusiveXorNV(vb, vu4);
296
297    b = subgroupAllEqual(vu64);
298    vu64 = subgroupBroadcast(vu64, 1u);
299    vu64 = subgroupBroadcastFirst(vu64);
300    vu64 = subgroupShuffle(vu64, u);
301    vu64 = subgroupShuffleXor(vu64, u);
302    vu64 = subgroupShuffleUp(vu64, u);
303    vu64 = subgroupShuffleDown(vu64, u);
304    vu64 = subgroupRotate(vu64, u);
305    vu64 = subgroupClusteredRotate(vu64, u, 4);
306    vu64 = subgroupAdd(vu64);
307    vu64 = subgroupMul(vu64);
308    vu64 = subgroupMin(vu64);
309    vu64 = subgroupMax(vu64);
310    vu64 = subgroupAnd(vu64);
311    vu64 = subgroupOr(vu64);
312    vu64 = subgroupXor(vu64);
313    vu64 = subgroupInclusiveAdd(vu64);
314    vu64 = subgroupInclusiveMul(vu64);
315    vu64 = subgroupInclusiveMin(vu64);
316    vu64 = subgroupInclusiveMax(vu64);
317    vu64 = subgroupInclusiveAnd(vu64);
318    vu64 = subgroupInclusiveOr(vu64);
319    vu64 = subgroupInclusiveXor(vu64);
320    vu64 = subgroupExclusiveAdd(vu64);
321    vu64 = subgroupExclusiveMul(vu64);
322    vu64 = subgroupExclusiveMin(vu64);
323    vu64 = subgroupExclusiveMax(vu64);
324    vu64 = subgroupExclusiveAnd(vu64);
325    vu64 = subgroupExclusiveOr(vu64);
326    vu64 = subgroupExclusiveXor(vu64);
327    vu64 = subgroupClusteredAdd(vu64, 4);
328    vu64 = subgroupClusteredMul(vu64, 4);
329    vu64 = subgroupClusteredMin(vu64, 4);
330    vu64 = subgroupClusteredMax(vu64, 4);
331    vu64 = subgroupClusteredAnd(vu64, 4);
332    vu64 = subgroupClusteredOr(vu64, 4);
333    vu64 = subgroupClusteredXor(vu64, 4);
334    vu64 = subgroupQuadBroadcast(vu64, 1);
335    vu64 = subgroupQuadSwapHorizontal(vu64);
336    vu64 = subgroupQuadSwapVertical(vu64);
337    vu64 = subgroupQuadSwapDiagonal(vu64);
338    vu4 = subgroupPartitionNV(vu64);
339    vu64 = subgroupPartitionedAddNV(vu64, vu4);
340    vu64 = subgroupPartitionedMulNV(vu64, vu4);
341    vu64 = subgroupPartitionedMinNV(vu64, vu4);
342    vu64 = subgroupPartitionedMaxNV(vu64, vu4);
343    vu64 = subgroupPartitionedAndNV(vu64, vu4);
344    vu64 = subgroupPartitionedOrNV(vu64, vu4);
345    vu64 = subgroupPartitionedXorNV(vu64, vu4);
346    vu64 = subgroupPartitionedInclusiveAddNV(vu64, vu4);
347    vu64 = subgroupPartitionedInclusiveMulNV(vu64, vu4);
348    vu64 = subgroupPartitionedInclusiveMinNV(vu64, vu4);
349    vu64 = subgroupPartitionedInclusiveMaxNV(vu64, vu4);
350    vu64 = subgroupPartitionedInclusiveAndNV(vu64, vu4);
351    vu64 = subgroupPartitionedInclusiveOrNV(vu64, vu4);
352    vu64 = subgroupPartitionedInclusiveXorNV(vu64, vu4);
353    vu64 = subgroupPartitionedExclusiveAddNV(vu64, vu4);
354    vu64 = subgroupPartitionedExclusiveMulNV(vu64, vu4);
355    vu64 = subgroupPartitionedExclusiveMinNV(vu64, vu4);
356    vu64 = subgroupPartitionedExclusiveMaxNV(vu64, vu4);
357    vu64 = subgroupPartitionedExclusiveAndNV(vu64, vu4);
358    vu64 = subgroupPartitionedExclusiveOrNV(vu64, vu4);
359    vu64 = subgroupPartitionedExclusiveXorNV(vu64, vu4);
360
361}