1#version 450
2
3#extension GL_NV_shader_subgroup_partitioned: 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    uvec4 ballot = subgroupPartitionNV(invocation);
20
21    data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);
22    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);
23    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);
24    data[invocation].u4 = subgroupPartitionNV(data[0].f4);
25
26    data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);
27    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);
28    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);
29    data[invocation].u4 = subgroupPartitionNV(data[0].i4);
30
31    data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);
32    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);
33    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);
34    data[invocation].u4 = subgroupPartitionNV(data[0].u4);
35
36    data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);
37    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);
38    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);
39    data[invocation].u4 = subgroupPartitionNV(data[0].d4);
40
41    data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));
42    data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));
43    data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));
44    data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));
45
46    data[invocation].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);
47    data[invocation].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);
48    data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);
49    data[invocation].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);
50
51    data[invocation].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);
52    data[invocation].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);
53    data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);
54    data[invocation].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);
55
56    data[invocation].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);
57    data[invocation].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);
58    data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);
59    data[invocation].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);
60
61    data[invocation].d4.x   = subgroupPartitionedAddNV(data[0].d4.x, ballot);
62    data[invocation].d4.xy  = subgroupPartitionedAddNV(data[1].d4.xy, ballot);
63    data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);
64    data[invocation].d4     = subgroupPartitionedAddNV(data[3].d4, ballot);
65
66    data[invocation].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);
67    data[invocation].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);
68    data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);
69    data[invocation].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);
70
71    data[invocation].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);
72    data[invocation].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);
73    data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);
74    data[invocation].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);
75
76    data[invocation].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);
77    data[invocation].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);
78    data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);
79    data[invocation].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);
80
81    data[invocation].d4.x   = subgroupPartitionedMulNV(data[0].d4.x, ballot);
82    data[invocation].d4.xy  = subgroupPartitionedMulNV(data[1].d4.xy, ballot);
83    data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);
84    data[invocation].d4     = subgroupPartitionedMulNV(data[3].d4, ballot);
85
86    data[invocation].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);
87    data[invocation].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);
88    data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);
89    data[invocation].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);
90
91    data[invocation].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);
92    data[invocation].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);
93    data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);
94    data[invocation].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);
95
96    data[invocation].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);
97    data[invocation].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);
98    data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);
99    data[invocation].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);
100
101    data[invocation].d4.x   = subgroupPartitionedMinNV(data[0].d4.x, ballot);
102    data[invocation].d4.xy  = subgroupPartitionedMinNV(data[1].d4.xy, ballot);
103    data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);
104    data[invocation].d4     = subgroupPartitionedMinNV(data[3].d4, ballot);
105
106    data[invocation].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);
107    data[invocation].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);
108    data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);
109    data[invocation].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);
110
111    data[invocation].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);
112    data[invocation].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);
113    data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);
114    data[invocation].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);
115
116    data[invocation].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);
117    data[invocation].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);
118    data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);
119    data[invocation].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);
120
121    data[invocation].d4.x   = subgroupPartitionedMaxNV(data[0].d4.x, ballot);
122    data[invocation].d4.xy  = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);
123    data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);
124    data[invocation].d4     = subgroupPartitionedMaxNV(data[3].d4, ballot);
125
126    data[invocation].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);
127    data[invocation].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);
128    data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);
129    data[invocation].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);
130
131    data[invocation].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);
132    data[invocation].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);
133    data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);
134    data[invocation].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);
135
136    data[invocation].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));
137    data[invocation].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
138    data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
139    data[invocation].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
140
141    data[invocation].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);
142    data[invocation].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);
143    data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);
144    data[invocation].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);
145
146    data[invocation].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);
147    data[invocation].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);
148    data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);
149    data[invocation].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);
150
151    data[invocation].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));
152    data[invocation].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
153    data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
154    data[invocation].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
155
156    data[invocation].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);
157    data[invocation].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);
158    data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);
159    data[invocation].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);
160
161    data[invocation].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);
162    data[invocation].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);
163    data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);
164    data[invocation].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);
165
166    data[invocation].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));
167    data[invocation].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
168    data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
169    data[invocation].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
170
171    data[invocation].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);
172    data[invocation].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);
173    data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);
174    data[invocation].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);
175
176    data[invocation].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);
177    data[invocation].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);
178    data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);
179    data[invocation].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);
180
181    data[invocation].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);
182    data[invocation].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);
183    data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);
184    data[invocation].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);
185
186    data[invocation].d4.x   = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);
187    data[invocation].d4.xy  = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);
188    data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);
189    data[invocation].d4     = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);
190
191    data[invocation].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);
192    data[invocation].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);
193    data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);
194    data[invocation].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);
195
196    data[invocation].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);
197    data[invocation].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);
198    data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);
199    data[invocation].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);
200
201    data[invocation].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);
202    data[invocation].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);
203    data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);
204    data[invocation].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);
205
206    data[invocation].d4.x   = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);
207    data[invocation].d4.xy  = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);
208    data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);
209    data[invocation].d4     = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);
210
211    data[invocation].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);
212    data[invocation].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);
213    data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);
214    data[invocation].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);
215
216    data[invocation].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);
217    data[invocation].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);
218    data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);
219    data[invocation].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);
220
221    data[invocation].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);
222    data[invocation].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);
223    data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);
224    data[invocation].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);
225
226    data[invocation].d4.x   = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);
227    data[invocation].d4.xy  = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);
228    data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);
229    data[invocation].d4     = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);
230
231    data[invocation].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);
232    data[invocation].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);
233    data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);
234    data[invocation].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);
235
236    data[invocation].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);
237    data[invocation].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);
238    data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);
239    data[invocation].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);
240
241    data[invocation].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);
242    data[invocation].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);
243    data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);
244    data[invocation].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);
245
246    data[invocation].d4.x   = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);
247    data[invocation].d4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);
248    data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);
249    data[invocation].d4     = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);
250
251    data[invocation].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);
252    data[invocation].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);
253    data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);
254    data[invocation].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);
255
256    data[invocation].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);
257    data[invocation].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);
258    data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);
259    data[invocation].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);
260
261    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));
262    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
263    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
264    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
265
266    data[invocation].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);
267    data[invocation].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);
268    data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);
269    data[invocation].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);
270
271    data[invocation].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);
272    data[invocation].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);
273    data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);
274    data[invocation].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);
275
276    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));
277    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
278    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
279    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
280
281    data[invocation].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);
282    data[invocation].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);
283    data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);
284    data[invocation].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);
285
286    data[invocation].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);
287    data[invocation].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);
288    data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);
289    data[invocation].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);
290
291    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));
292    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
293    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
294    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
295
296    data[invocation].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);
297    data[invocation].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);
298    data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);
299    data[invocation].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);
300
301    data[invocation].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);
302    data[invocation].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);
303    data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);
304    data[invocation].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);
305
306    data[invocation].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);
307    data[invocation].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);
308    data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);
309    data[invocation].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);
310
311    data[invocation].d4.x   = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);
312    data[invocation].d4.xy  = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);
313    data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);
314    data[invocation].d4     = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);
315
316    data[invocation].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);
317    data[invocation].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);
318    data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);
319    data[invocation].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);
320
321    data[invocation].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);
322    data[invocation].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);
323    data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);
324    data[invocation].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);
325
326    data[invocation].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);
327    data[invocation].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);
328    data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);
329    data[invocation].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);
330
331    data[invocation].d4.x   = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);
332    data[invocation].d4.xy  = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);
333    data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);
334    data[invocation].d4     = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);
335
336    data[invocation].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);
337    data[invocation].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);
338    data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);
339    data[invocation].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);
340
341    data[invocation].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);
342    data[invocation].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);
343    data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);
344    data[invocation].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);
345
346    data[invocation].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);
347    data[invocation].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);
348    data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);
349    data[invocation].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);
350
351    data[invocation].d4.x   = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);
352    data[invocation].d4.xy  = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);
353    data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);
354    data[invocation].d4     = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);
355
356    data[invocation].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);
357    data[invocation].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);
358    data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);
359    data[invocation].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);
360
361    data[invocation].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);
362    data[invocation].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);
363    data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);
364    data[invocation].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);
365
366    data[invocation].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);
367    data[invocation].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);
368    data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);
369    data[invocation].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);
370
371    data[invocation].d4.x   = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);
372    data[invocation].d4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);
373    data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);
374    data[invocation].d4     = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);
375
376    data[invocation].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);
377    data[invocation].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);
378    data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);
379    data[invocation].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);
380
381    data[invocation].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);
382    data[invocation].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);
383    data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);
384    data[invocation].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);
385
386    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));
387    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
388    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
389    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
390
391    data[invocation].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);
392    data[invocation].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);
393    data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);
394    data[invocation].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);
395
396    data[invocation].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);
397    data[invocation].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);
398    data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);
399    data[invocation].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);
400
401    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));
402    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
403    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
404    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
405
406    data[invocation].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);
407    data[invocation].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);
408    data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);
409    data[invocation].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);
410
411    data[invocation].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);
412    data[invocation].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);
413    data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);
414    data[invocation].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);
415
416    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));
417    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
418    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
419    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
420}
421