blob: 6cc9337b68bedaf679fba36d87c06fef388e80b1 [file] [log] [blame]
John Kessenich66011cb2018-03-06 16:12:04 -07001#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}