1#version 450
2
3#extension GL_KHR_shader_subgroup_arithmetic: enable
4
5layout (local_size_x = 8) in;
6
7layout(binding = 0) buffer Buffers
8{
9    vec4  f4;
10    ivec4 i4;
11    uvec4 u4;
12    dvec4 d4;
13} data[4];
14
15void main()
16{
17    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
18
19    data[invocation].f4.x   = subgroupAdd(data[0].f4.x);
20    data[invocation].f4.xy  = subgroupAdd(data[1].f4.xy);
21    data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);
22    data[invocation].f4     = subgroupAdd(data[3].f4);
23
24    data[invocation].i4.x   = subgroupAdd(data[0].i4.x);
25    data[invocation].i4.xy  = subgroupAdd(data[1].i4.xy);
26    data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);
27    data[invocation].i4     = subgroupAdd(data[3].i4);
28
29    data[invocation].u4.x   = subgroupAdd(data[0].u4.x);
30    data[invocation].u4.xy  = subgroupAdd(data[1].u4.xy);
31    data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);
32    data[invocation].u4     = subgroupAdd(data[3].u4);
33
34    data[invocation].d4.x   = subgroupAdd(data[0].d4.x);
35    data[invocation].d4.xy  = subgroupAdd(data[1].d4.xy);
36    data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);
37    data[invocation].d4     = subgroupAdd(data[3].d4);
38
39    data[invocation].f4.x   = subgroupMul(data[0].f4.x);
40    data[invocation].f4.xy  = subgroupMul(data[1].f4.xy);
41    data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);
42    data[invocation].f4     = subgroupMul(data[3].f4);
43
44    data[invocation].i4.x   = subgroupMul(data[0].i4.x);
45    data[invocation].i4.xy  = subgroupMul(data[1].i4.xy);
46    data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);
47    data[invocation].i4     = subgroupMul(data[3].i4);
48
49    data[invocation].u4.x   = subgroupMul(data[0].u4.x);
50    data[invocation].u4.xy  = subgroupMul(data[1].u4.xy);
51    data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);
52    data[invocation].u4     = subgroupMul(data[3].u4);
53
54    data[invocation].d4.x   = subgroupMul(data[0].d4.x);
55    data[invocation].d4.xy  = subgroupMul(data[1].d4.xy);
56    data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);
57    data[invocation].d4     = subgroupMul(data[3].d4);
58
59    data[invocation].f4.x   = subgroupMin(data[0].f4.x);
60    data[invocation].f4.xy  = subgroupMin(data[1].f4.xy);
61    data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);
62    data[invocation].f4     = subgroupMin(data[3].f4);
63
64    data[invocation].i4.x   = subgroupMin(data[0].i4.x);
65    data[invocation].i4.xy  = subgroupMin(data[1].i4.xy);
66    data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);
67    data[invocation].i4     = subgroupMin(data[3].i4);
68
69    data[invocation].u4.x   = subgroupMin(data[0].u4.x);
70    data[invocation].u4.xy  = subgroupMin(data[1].u4.xy);
71    data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);
72    data[invocation].u4     = subgroupMin(data[3].u4);
73
74    data[invocation].d4.x   = subgroupMin(data[0].d4.x);
75    data[invocation].d4.xy  = subgroupMin(data[1].d4.xy);
76    data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);
77    data[invocation].d4     = subgroupMin(data[3].d4);
78
79    data[invocation].f4.x   = subgroupMax(data[0].f4.x);
80    data[invocation].f4.xy  = subgroupMax(data[1].f4.xy);
81    data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);
82    data[invocation].f4     = subgroupMax(data[3].f4);
83
84    data[invocation].i4.x   = subgroupMax(data[0].i4.x);
85    data[invocation].i4.xy  = subgroupMax(data[1].i4.xy);
86    data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);
87    data[invocation].i4     = subgroupMax(data[3].i4);
88
89    data[invocation].u4.x   = subgroupMax(data[0].u4.x);
90    data[invocation].u4.xy  = subgroupMax(data[1].u4.xy);
91    data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);
92    data[invocation].u4     = subgroupMax(data[3].u4);
93
94    data[invocation].d4.x   = subgroupMax(data[0].d4.x);
95    data[invocation].d4.xy  = subgroupMax(data[1].d4.xy);
96    data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);
97    data[invocation].d4     = subgroupMax(data[3].d4);
98
99    data[invocation].i4.x   = subgroupAnd(data[0].i4.x);
100    data[invocation].i4.xy  = subgroupAnd(data[1].i4.xy);
101    data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);
102    data[invocation].i4     = subgroupAnd(data[3].i4);
103
104    data[invocation].u4.x   = subgroupAnd(data[0].u4.x);
105    data[invocation].u4.xy  = subgroupAnd(data[1].u4.xy);
106    data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);
107    data[invocation].u4     = subgroupAnd(data[3].u4);
108
109    data[invocation].i4.x   =   int(subgroupAnd(data[0].i4.x < 0));
110    data[invocation].i4.xy  = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));
111    data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));
112    data[invocation].i4     = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));
113
114    data[invocation].i4.x   = subgroupOr(data[0].i4.x);
115    data[invocation].i4.xy  = subgroupOr(data[1].i4.xy);
116    data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);
117    data[invocation].i4     = subgroupOr(data[3].i4);
118
119    data[invocation].u4.x   = subgroupOr(data[0].u4.x);
120    data[invocation].u4.xy  = subgroupOr(data[1].u4.xy);
121    data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);
122    data[invocation].u4     = subgroupOr(data[3].u4);
123
124    data[invocation].i4.x   =   int(subgroupOr(data[0].i4.x < 0));
125    data[invocation].i4.xy  = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));
126    data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));
127    data[invocation].i4     = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));
128
129    data[invocation].i4.x   = subgroupXor(data[0].i4.x);
130    data[invocation].i4.xy  = subgroupXor(data[1].i4.xy);
131    data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);
132    data[invocation].i4     = subgroupXor(data[3].i4);
133
134    data[invocation].u4.x   = subgroupXor(data[0].u4.x);
135    data[invocation].u4.xy  = subgroupXor(data[1].u4.xy);
136    data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);
137    data[invocation].u4     = subgroupXor(data[3].u4);
138
139    data[invocation].i4.x   =   int(subgroupXor(data[0].i4.x < 0));
140    data[invocation].i4.xy  = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));
141    data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));
142    data[invocation].i4     = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));
143
144    data[invocation].f4.x   = subgroupInclusiveAdd(data[0].f4.x);
145    data[invocation].f4.xy  = subgroupInclusiveAdd(data[1].f4.xy);
146    data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);
147    data[invocation].f4     = subgroupInclusiveAdd(data[3].f4);
148
149    data[invocation].i4.x   = subgroupInclusiveAdd(data[0].i4.x);
150    data[invocation].i4.xy  = subgroupInclusiveAdd(data[1].i4.xy);
151    data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);
152    data[invocation].i4     = subgroupInclusiveAdd(data[3].i4);
153
154    data[invocation].u4.x   = subgroupInclusiveAdd(data[0].u4.x);
155    data[invocation].u4.xy  = subgroupInclusiveAdd(data[1].u4.xy);
156    data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);
157    data[invocation].u4     = subgroupInclusiveAdd(data[3].u4);
158
159    data[invocation].d4.x   = subgroupInclusiveAdd(data[0].d4.x);
160    data[invocation].d4.xy  = subgroupInclusiveAdd(data[1].d4.xy);
161    data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);
162    data[invocation].d4     = subgroupInclusiveAdd(data[3].d4);
163
164    data[invocation].f4.x   = subgroupInclusiveMul(data[0].f4.x);
165    data[invocation].f4.xy  = subgroupInclusiveMul(data[1].f4.xy);
166    data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);
167    data[invocation].f4     = subgroupInclusiveMul(data[3].f4);
168
169    data[invocation].i4.x   = subgroupInclusiveMul(data[0].i4.x);
170    data[invocation].i4.xy  = subgroupInclusiveMul(data[1].i4.xy);
171    data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);
172    data[invocation].i4     = subgroupInclusiveMul(data[3].i4);
173
174    data[invocation].u4.x   = subgroupInclusiveMul(data[0].u4.x);
175    data[invocation].u4.xy  = subgroupInclusiveMul(data[1].u4.xy);
176    data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);
177    data[invocation].u4     = subgroupInclusiveMul(data[3].u4);
178
179    data[invocation].d4.x   = subgroupInclusiveMul(data[0].d4.x);
180    data[invocation].d4.xy  = subgroupInclusiveMul(data[1].d4.xy);
181    data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);
182    data[invocation].d4     = subgroupInclusiveMul(data[3].d4);
183
184    data[invocation].f4.x   = subgroupInclusiveMin(data[0].f4.x);
185    data[invocation].f4.xy  = subgroupInclusiveMin(data[1].f4.xy);
186    data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);
187    data[invocation].f4     = subgroupInclusiveMin(data[3].f4);
188
189    data[invocation].i4.x   = subgroupInclusiveMin(data[0].i4.x);
190    data[invocation].i4.xy  = subgroupInclusiveMin(data[1].i4.xy);
191    data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);
192    data[invocation].i4     = subgroupInclusiveMin(data[3].i4);
193
194    data[invocation].u4.x   = subgroupInclusiveMin(data[0].u4.x);
195    data[invocation].u4.xy  = subgroupInclusiveMin(data[1].u4.xy);
196    data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);
197    data[invocation].u4     = subgroupInclusiveMin(data[3].u4);
198
199    data[invocation].d4.x   = subgroupInclusiveMin(data[0].d4.x);
200    data[invocation].d4.xy  = subgroupInclusiveMin(data[1].d4.xy);
201    data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);
202    data[invocation].d4     = subgroupInclusiveMin(data[3].d4);
203
204    data[invocation].f4.x   = subgroupInclusiveMax(data[0].f4.x);
205    data[invocation].f4.xy  = subgroupInclusiveMax(data[1].f4.xy);
206    data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);
207    data[invocation].f4     = subgroupInclusiveMax(data[3].f4);
208
209    data[invocation].i4.x   = subgroupInclusiveMax(data[0].i4.x);
210    data[invocation].i4.xy  = subgroupInclusiveMax(data[1].i4.xy);
211    data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);
212    data[invocation].i4     = subgroupInclusiveMax(data[3].i4);
213
214    data[invocation].u4.x   = subgroupInclusiveMax(data[0].u4.x);
215    data[invocation].u4.xy  = subgroupInclusiveMax(data[1].u4.xy);
216    data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);
217    data[invocation].u4     = subgroupInclusiveMax(data[3].u4);
218
219    data[invocation].d4.x   = subgroupInclusiveMax(data[0].d4.x);
220    data[invocation].d4.xy  = subgroupInclusiveMax(data[1].d4.xy);
221    data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);
222    data[invocation].d4     = subgroupInclusiveMax(data[3].d4);
223
224    data[invocation].i4.x   = subgroupInclusiveAnd(data[0].i4.x);
225    data[invocation].i4.xy  = subgroupInclusiveAnd(data[1].i4.xy);
226    data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);
227    data[invocation].i4     = subgroupInclusiveAnd(data[3].i4);
228
229    data[invocation].u4.x   = subgroupInclusiveAnd(data[0].u4.x);
230    data[invocation].u4.xy  = subgroupInclusiveAnd(data[1].u4.xy);
231    data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);
232    data[invocation].u4     = subgroupInclusiveAnd(data[3].u4);
233
234    data[invocation].i4.x   =   int(subgroupInclusiveAnd(data[0].i4.x < 0));
235    data[invocation].i4.xy  = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
236    data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
237    data[invocation].i4     = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));
238
239    data[invocation].i4.x   = subgroupInclusiveOr(data[0].i4.x);
240    data[invocation].i4.xy  = subgroupInclusiveOr(data[1].i4.xy);
241    data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);
242    data[invocation].i4     = subgroupInclusiveOr(data[3].i4);
243
244    data[invocation].u4.x   = subgroupInclusiveOr(data[0].u4.x);
245    data[invocation].u4.xy  = subgroupInclusiveOr(data[1].u4.xy);
246    data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);
247    data[invocation].u4     = subgroupInclusiveOr(data[3].u4);
248
249    data[invocation].i4.x   =   int(subgroupInclusiveOr(data[0].i4.x < 0));
250    data[invocation].i4.xy  = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
251    data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
252    data[invocation].i4     = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));
253
254    data[invocation].i4.x   = subgroupInclusiveXor(data[0].i4.x);
255    data[invocation].i4.xy  = subgroupInclusiveXor(data[1].i4.xy);
256    data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);
257    data[invocation].i4     = subgroupInclusiveXor(data[3].i4);
258
259    data[invocation].u4.x   = subgroupInclusiveXor(data[0].u4.x);
260    data[invocation].u4.xy  = subgroupInclusiveXor(data[1].u4.xy);
261    data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);
262    data[invocation].u4     = subgroupInclusiveXor(data[3].u4);
263
264    data[invocation].i4.x   =   int(subgroupInclusiveXor(data[0].i4.x < 0));
265    data[invocation].i4.xy  = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
266    data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
267    data[invocation].i4     = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));
268
269    data[invocation].f4.x   = subgroupExclusiveAdd(data[0].f4.x);
270    data[invocation].f4.xy  = subgroupExclusiveAdd(data[1].f4.xy);
271    data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);
272    data[invocation].f4     = subgroupExclusiveAdd(data[3].f4);
273
274    data[invocation].i4.x   = subgroupExclusiveAdd(data[0].i4.x);
275    data[invocation].i4.xy  = subgroupExclusiveAdd(data[1].i4.xy);
276    data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);
277    data[invocation].i4     = subgroupExclusiveAdd(data[3].i4);
278
279    data[invocation].u4.x   = subgroupExclusiveAdd(data[0].u4.x);
280    data[invocation].u4.xy  = subgroupExclusiveAdd(data[1].u4.xy);
281    data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);
282    data[invocation].u4     = subgroupExclusiveAdd(data[3].u4);
283
284    data[invocation].d4.x   = subgroupExclusiveAdd(data[0].d4.x);
285    data[invocation].d4.xy  = subgroupExclusiveAdd(data[1].d4.xy);
286    data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);
287    data[invocation].d4     = subgroupExclusiveAdd(data[3].d4);
288
289    data[invocation].f4.x   = subgroupExclusiveMul(data[0].f4.x);
290    data[invocation].f4.xy  = subgroupExclusiveMul(data[1].f4.xy);
291    data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);
292    data[invocation].f4     = subgroupExclusiveMul(data[3].f4);
293
294    data[invocation].i4.x   = subgroupExclusiveMul(data[0].i4.x);
295    data[invocation].i4.xy  = subgroupExclusiveMul(data[1].i4.xy);
296    data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);
297    data[invocation].i4     = subgroupExclusiveMul(data[3].i4);
298
299    data[invocation].u4.x   = subgroupExclusiveMul(data[0].u4.x);
300    data[invocation].u4.xy  = subgroupExclusiveMul(data[1].u4.xy);
301    data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);
302    data[invocation].u4     = subgroupExclusiveMul(data[3].u4);
303
304    data[invocation].d4.x   = subgroupExclusiveMul(data[0].d4.x);
305    data[invocation].d4.xy  = subgroupExclusiveMul(data[1].d4.xy);
306    data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);
307    data[invocation].d4     = subgroupExclusiveMul(data[3].d4);
308
309    data[invocation].f4.x   = subgroupExclusiveMin(data[0].f4.x);
310    data[invocation].f4.xy  = subgroupExclusiveMin(data[1].f4.xy);
311    data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);
312    data[invocation].f4     = subgroupExclusiveMin(data[3].f4);
313
314    data[invocation].i4.x   = subgroupExclusiveMin(data[0].i4.x);
315    data[invocation].i4.xy  = subgroupExclusiveMin(data[1].i4.xy);
316    data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);
317    data[invocation].i4     = subgroupExclusiveMin(data[3].i4);
318
319    data[invocation].u4.x   = subgroupExclusiveMin(data[0].u4.x);
320    data[invocation].u4.xy  = subgroupExclusiveMin(data[1].u4.xy);
321    data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);
322    data[invocation].u4     = subgroupExclusiveMin(data[3].u4);
323
324    data[invocation].d4.x   = subgroupExclusiveMin(data[0].d4.x);
325    data[invocation].d4.xy  = subgroupExclusiveMin(data[1].d4.xy);
326    data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);
327    data[invocation].d4     = subgroupExclusiveMin(data[3].d4);
328
329    data[invocation].f4.x   = subgroupExclusiveMax(data[0].f4.x);
330    data[invocation].f4.xy  = subgroupExclusiveMax(data[1].f4.xy);
331    data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);
332    data[invocation].f4     = subgroupExclusiveMax(data[3].f4);
333
334    data[invocation].i4.x   = subgroupExclusiveMax(data[0].i4.x);
335    data[invocation].i4.xy  = subgroupExclusiveMax(data[1].i4.xy);
336    data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);
337    data[invocation].i4     = subgroupExclusiveMax(data[3].i4);
338
339    data[invocation].u4.x   = subgroupExclusiveMax(data[0].u4.x);
340    data[invocation].u4.xy  = subgroupExclusiveMax(data[1].u4.xy);
341    data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);
342    data[invocation].u4     = subgroupExclusiveMax(data[3].u4);
343
344    data[invocation].d4.x   = subgroupExclusiveMax(data[0].d4.x);
345    data[invocation].d4.xy  = subgroupExclusiveMax(data[1].d4.xy);
346    data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);
347    data[invocation].d4     = subgroupExclusiveMax(data[3].d4);
348
349    data[invocation].i4.x   = subgroupExclusiveAnd(data[0].i4.x);
350    data[invocation].i4.xy  = subgroupExclusiveAnd(data[1].i4.xy);
351    data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);
352    data[invocation].i4     = subgroupExclusiveAnd(data[3].i4);
353
354    data[invocation].u4.x   = subgroupExclusiveAnd(data[0].u4.x);
355    data[invocation].u4.xy  = subgroupExclusiveAnd(data[1].u4.xy);
356    data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);
357    data[invocation].u4     = subgroupExclusiveAnd(data[3].u4);
358
359    data[invocation].i4.x   =   int(subgroupExclusiveAnd(data[0].i4.x < 0));
360    data[invocation].i4.xy  = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
361    data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
362    data[invocation].i4     = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));
363
364    data[invocation].i4.x   = subgroupExclusiveOr(data[0].i4.x);
365    data[invocation].i4.xy  = subgroupExclusiveOr(data[1].i4.xy);
366    data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);
367    data[invocation].i4     = subgroupExclusiveOr(data[3].i4);
368
369    data[invocation].u4.x   = subgroupExclusiveOr(data[0].u4.x);
370    data[invocation].u4.xy  = subgroupExclusiveOr(data[1].u4.xy);
371    data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);
372    data[invocation].u4     = subgroupExclusiveOr(data[3].u4);
373
374    data[invocation].i4.x   =   int(subgroupExclusiveOr(data[0].i4.x < 0));
375    data[invocation].i4.xy  = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
376    data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
377    data[invocation].i4     = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));
378
379    data[invocation].i4.x   = subgroupExclusiveXor(data[0].i4.x);
380    data[invocation].i4.xy  = subgroupExclusiveXor(data[1].i4.xy);
381    data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);
382    data[invocation].i4     = subgroupExclusiveXor(data[3].i4);
383
384    data[invocation].u4.x   = subgroupExclusiveXor(data[0].u4.x);
385    data[invocation].u4.xy  = subgroupExclusiveXor(data[1].u4.xy);
386    data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);
387    data[invocation].u4     = subgroupExclusiveXor(data[3].u4);
388
389    data[invocation].i4.x   =   int(subgroupExclusiveXor(data[0].i4.x < 0));
390    data[invocation].i4.xy  = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
391    data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
392    data[invocation].i4     = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));
393}
394