Merge pull request #2891 from dneto0/hlsl-namespace
[platform/upstream/glslang.git] / Test / spv.subgroupExtendedTypesArithmeticNeg.comp
1 #version 450\r
2 \r
3 #extension GL_KHR_shader_subgroup_arithmetic: enable\r
4 #extension GL_EXT_shader_explicit_arithmetic_types_int8: enable\r
5 #extension GL_EXT_shader_explicit_arithmetic_types_int16: enable\r
6 #extension GL_EXT_shader_explicit_arithmetic_types_int64: enable\r
7 #extension GL_EXT_shader_explicit_arithmetic_types_float16: enable\r
8 \r
9 layout (local_size_x = 8) in;\r
10 \r
11 layout(binding = 0) buffer Buffers\r
12 {\r
13     i8vec4 i8;\r
14     u8vec4 u8;\r
15     i16vec4 i16;\r
16     u16vec4 u16;\r
17     i64vec4 i64;\r
18     u64vec4 u64;\r
19     f16vec4 f16;\r
20 } data[4];\r
21 \r
22 void main()\r
23 {\r
24     uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;\r
25 \r
26     data[invocation].i8.x   = subgroupAdd(data[0].i8.x);\r
27     data[invocation].i8.xy  = subgroupAdd(data[1].i8.xy);\r
28     data[invocation].i8.xyz = subgroupAdd(data[2].i8.xyz);\r
29     data[invocation].i8     = subgroupAdd(data[3].i8);\r
30 \r
31     data[invocation].i8.x   = subgroupMul(data[0].i8.x);\r
32     data[invocation].i8.xy  = subgroupMul(data[1].i8.xy);\r
33     data[invocation].i8.xyz = subgroupMul(data[2].i8.xyz);\r
34     data[invocation].i8     = subgroupMul(data[3].i8);\r
35 \r
36     data[invocation].i8.x   = subgroupMin(data[0].i8.x);\r
37     data[invocation].i8.xy  = subgroupMin(data[1].i8.xy);\r
38     data[invocation].i8.xyz = subgroupMin(data[2].i8.xyz);\r
39     data[invocation].i8     = subgroupMin(data[3].i8);\r
40 \r
41     data[invocation].i8.x   = subgroupMax(data[0].i8.x);\r
42     data[invocation].i8.xy  = subgroupMax(data[1].i8.xy);\r
43     data[invocation].i8.xyz = subgroupMax(data[2].i8.xyz);\r
44     data[invocation].i8     = subgroupMax(data[3].i8);\r
45 \r
46     data[invocation].i8.x   = subgroupAnd(data[0].i8.x);\r
47     data[invocation].i8.xy  = subgroupAnd(data[1].i8.xy);\r
48     data[invocation].i8.xyz = subgroupAnd(data[2].i8.xyz);\r
49     data[invocation].i8     = subgroupAnd(data[3].i8);\r
50 \r
51     data[invocation].i8.x   = subgroupOr(data[0].i8.x);\r
52     data[invocation].i8.xy  = subgroupOr(data[1].i8.xy);\r
53     data[invocation].i8.xyz = subgroupOr(data[2].i8.xyz);\r
54     data[invocation].i8     = subgroupOr(data[3].i8);\r
55 \r
56     data[invocation].i8.x   = subgroupXor(data[0].i8.x);\r
57     data[invocation].i8.xy  = subgroupXor(data[1].i8.xy);\r
58     data[invocation].i8.xyz = subgroupXor(data[2].i8.xyz);\r
59     data[invocation].i8     = subgroupXor(data[3].i8);\r
60 \r
61     data[invocation].i8.x   = subgroupInclusiveAdd(data[0].i8.x);\r
62     data[invocation].i8.xy  = subgroupInclusiveAdd(data[1].i8.xy);\r
63     data[invocation].i8.xyz = subgroupInclusiveAdd(data[2].i8.xyz);\r
64     data[invocation].i8     = subgroupInclusiveAdd(data[3].i8);\r
65 \r
66     data[invocation].i8.x   = subgroupInclusiveMul(data[0].i8.x);\r
67     data[invocation].i8.xy  = subgroupInclusiveMul(data[1].i8.xy);\r
68     data[invocation].i8.xyz = subgroupInclusiveMul(data[2].i8.xyz);\r
69     data[invocation].i8     = subgroupInclusiveMul(data[3].i8);\r
70 \r
71     data[invocation].i8.x   = subgroupInclusiveMin(data[0].i8.x);\r
72     data[invocation].i8.xy  = subgroupInclusiveMin(data[1].i8.xy);\r
73     data[invocation].i8.xyz = subgroupInclusiveMin(data[2].i8.xyz);\r
74     data[invocation].i8     = subgroupInclusiveMin(data[3].i8);\r
75 \r
76     data[invocation].i8.x   = subgroupInclusiveMax(data[0].i8.x);\r
77     data[invocation].i8.xy  = subgroupInclusiveMax(data[1].i8.xy);\r
78     data[invocation].i8.xyz = subgroupInclusiveMax(data[2].i8.xyz);\r
79     data[invocation].i8     = subgroupInclusiveMax(data[3].i8);\r
80 \r
81     data[invocation].i8.x   = subgroupInclusiveAnd(data[0].i8.x);\r
82     data[invocation].i8.xy  = subgroupInclusiveAnd(data[1].i8.xy);\r
83     data[invocation].i8.xyz = subgroupInclusiveAnd(data[2].i8.xyz);\r
84     data[invocation].i8     = subgroupInclusiveAnd(data[3].i8);\r
85 \r
86     data[invocation].i8.x   = subgroupInclusiveOr(data[0].i8.x);\r
87     data[invocation].i8.xy  = subgroupInclusiveOr(data[1].i8.xy);\r
88     data[invocation].i8.xyz = subgroupInclusiveOr(data[2].i8.xyz);\r
89     data[invocation].i8     = subgroupInclusiveOr(data[3].i8);\r
90 \r
91     data[invocation].i8.x   = subgroupInclusiveXor(data[0].i8.x);\r
92     data[invocation].i8.xy  = subgroupInclusiveXor(data[1].i8.xy);\r
93     data[invocation].i8.xyz = subgroupInclusiveXor(data[2].i8.xyz);\r
94     data[invocation].i8     = subgroupInclusiveXor(data[3].i8);\r
95 \r
96     data[invocation].i8.x   = subgroupExclusiveAdd(data[0].i8.x);\r
97     data[invocation].i8.xy  = subgroupExclusiveAdd(data[1].i8.xy);\r
98     data[invocation].i8.xyz = subgroupExclusiveAdd(data[2].i8.xyz);\r
99     data[invocation].i8     = subgroupExclusiveAdd(data[3].i8);\r
100 \r
101     data[invocation].i8.x   = subgroupExclusiveMul(data[0].i8.x);\r
102     data[invocation].i8.xy  = subgroupExclusiveMul(data[1].i8.xy);\r
103     data[invocation].i8.xyz = subgroupExclusiveMul(data[2].i8.xyz);\r
104     data[invocation].i8     = subgroupExclusiveMul(data[3].i8);\r
105 \r
106     data[invocation].i8.x   = subgroupExclusiveMin(data[0].i8.x);\r
107     data[invocation].i8.xy  = subgroupExclusiveMin(data[1].i8.xy);\r
108     data[invocation].i8.xyz = subgroupExclusiveMin(data[2].i8.xyz);\r
109     data[invocation].i8     = subgroupExclusiveMin(data[3].i8);\r
110 \r
111     data[invocation].i8.x   = subgroupExclusiveMax(data[0].i8.x);\r
112     data[invocation].i8.xy  = subgroupExclusiveMax(data[1].i8.xy);\r
113     data[invocation].i8.xyz = subgroupExclusiveMax(data[2].i8.xyz);\r
114     data[invocation].i8     = subgroupExclusiveMax(data[3].i8);\r
115 \r
116     data[invocation].i8.x   = subgroupExclusiveAnd(data[0].i8.x);\r
117     data[invocation].i8.xy  = subgroupExclusiveAnd(data[1].i8.xy);\r
118     data[invocation].i8.xyz = subgroupExclusiveAnd(data[2].i8.xyz);\r
119     data[invocation].i8     = subgroupExclusiveAnd(data[3].i8);\r
120 \r
121     data[invocation].i8.x   = subgroupExclusiveOr(data[0].i8.x);\r
122     data[invocation].i8.xy  = subgroupExclusiveOr(data[1].i8.xy);\r
123     data[invocation].i8.xyz = subgroupExclusiveOr(data[2].i8.xyz);\r
124     data[invocation].i8     = subgroupExclusiveOr(data[3].i8);\r
125 \r
126     data[invocation].i8.x   = subgroupExclusiveXor(data[0].i8.x);\r
127     data[invocation].i8.xy  = subgroupExclusiveXor(data[1].i8.xy);\r
128     data[invocation].i8.xyz = subgroupExclusiveXor(data[2].i8.xyz);\r
129     data[invocation].i8     = subgroupExclusiveXor(data[3].i8);\r
130 \r
131     data[invocation].u8.x   = subgroupAdd(data[0].u8.x);\r
132     data[invocation].u8.xy  = subgroupAdd(data[1].u8.xy);\r
133     data[invocation].u8.xyz = subgroupAdd(data[2].u8.xyz);\r
134     data[invocation].u8     = subgroupAdd(data[3].u8);\r
135 \r
136     data[invocation].u8.x   = subgroupMul(data[0].u8.x);\r
137     data[invocation].u8.xy  = subgroupMul(data[1].u8.xy);\r
138     data[invocation].u8.xyz = subgroupMul(data[2].u8.xyz);\r
139     data[invocation].u8     = subgroupMul(data[3].u8);\r
140 \r
141     data[invocation].u8.x   = subgroupMin(data[0].u8.x);\r
142     data[invocation].u8.xy  = subgroupMin(data[1].u8.xy);\r
143     data[invocation].u8.xyz = subgroupMin(data[2].u8.xyz);\r
144     data[invocation].u8     = subgroupMin(data[3].u8);\r
145 \r
146     data[invocation].u8.x   = subgroupMax(data[0].u8.x);\r
147     data[invocation].u8.xy  = subgroupMax(data[1].u8.xy);\r
148     data[invocation].u8.xyz = subgroupMax(data[2].u8.xyz);\r
149     data[invocation].u8     = subgroupMax(data[3].u8);\r
150 \r
151     data[invocation].u8.x   = subgroupAnd(data[0].u8.x);\r
152     data[invocation].u8.xy  = subgroupAnd(data[1].u8.xy);\r
153     data[invocation].u8.xyz = subgroupAnd(data[2].u8.xyz);\r
154     data[invocation].u8     = subgroupAnd(data[3].u8);\r
155 \r
156     data[invocation].u8.x   = subgroupOr(data[0].u8.x);\r
157     data[invocation].u8.xy  = subgroupOr(data[1].u8.xy);\r
158     data[invocation].u8.xyz = subgroupOr(data[2].u8.xyz);\r
159     data[invocation].u8     = subgroupOr(data[3].u8);\r
160 \r
161     data[invocation].u8.x   = subgroupXor(data[0].u8.x);\r
162     data[invocation].u8.xy  = subgroupXor(data[1].u8.xy);\r
163     data[invocation].u8.xyz = subgroupXor(data[2].u8.xyz);\r
164     data[invocation].u8     = subgroupXor(data[3].u8);\r
165 \r
166     data[invocation].u8.x   = subgroupInclusiveAdd(data[0].u8.x);\r
167     data[invocation].u8.xy  = subgroupInclusiveAdd(data[1].u8.xy);\r
168     data[invocation].u8.xyz = subgroupInclusiveAdd(data[2].u8.xyz);\r
169     data[invocation].u8     = subgroupInclusiveAdd(data[3].u8);\r
170 \r
171     data[invocation].u8.x   = subgroupInclusiveMul(data[0].u8.x);\r
172     data[invocation].u8.xy  = subgroupInclusiveMul(data[1].u8.xy);\r
173     data[invocation].u8.xyz = subgroupInclusiveMul(data[2].u8.xyz);\r
174     data[invocation].u8     = subgroupInclusiveMul(data[3].u8);\r
175 \r
176     data[invocation].u8.x   = subgroupInclusiveMin(data[0].u8.x);\r
177     data[invocation].u8.xy  = subgroupInclusiveMin(data[1].u8.xy);\r
178     data[invocation].u8.xyz = subgroupInclusiveMin(data[2].u8.xyz);\r
179     data[invocation].u8     = subgroupInclusiveMin(data[3].u8);\r
180 \r
181     data[invocation].u8.x   = subgroupInclusiveMax(data[0].u8.x);\r
182     data[invocation].u8.xy  = subgroupInclusiveMax(data[1].u8.xy);\r
183     data[invocation].u8.xyz = subgroupInclusiveMax(data[2].u8.xyz);\r
184     data[invocation].u8     = subgroupInclusiveMax(data[3].u8);\r
185 \r
186     data[invocation].u8.x   = subgroupInclusiveAnd(data[0].u8.x);\r
187     data[invocation].u8.xy  = subgroupInclusiveAnd(data[1].u8.xy);\r
188     data[invocation].u8.xyz = subgroupInclusiveAnd(data[2].u8.xyz);\r
189     data[invocation].u8     = subgroupInclusiveAnd(data[3].u8);\r
190 \r
191     data[invocation].u8.x   = subgroupInclusiveOr(data[0].u8.x);\r
192     data[invocation].u8.xy  = subgroupInclusiveOr(data[1].u8.xy);\r
193     data[invocation].u8.xyz = subgroupInclusiveOr(data[2].u8.xyz);\r
194     data[invocation].u8     = subgroupInclusiveOr(data[3].u8);\r
195 \r
196     data[invocation].u8.x   = subgroupInclusiveXor(data[0].u8.x);\r
197     data[invocation].u8.xy  = subgroupInclusiveXor(data[1].u8.xy);\r
198     data[invocation].u8.xyz = subgroupInclusiveXor(data[2].u8.xyz);\r
199     data[invocation].u8     = subgroupInclusiveXor(data[3].u8);\r
200 \r
201     data[invocation].u8.x   = subgroupExclusiveAdd(data[0].u8.x);\r
202     data[invocation].u8.xy  = subgroupExclusiveAdd(data[1].u8.xy);\r
203     data[invocation].u8.xyz = subgroupExclusiveAdd(data[2].u8.xyz);\r
204     data[invocation].u8     = subgroupExclusiveAdd(data[3].u8);\r
205 \r
206     data[invocation].u8.x   = subgroupExclusiveMul(data[0].u8.x);\r
207     data[invocation].u8.xy  = subgroupExclusiveMul(data[1].u8.xy);\r
208     data[invocation].u8.xyz = subgroupExclusiveMul(data[2].u8.xyz);\r
209     data[invocation].u8     = subgroupExclusiveMul(data[3].u8);\r
210 \r
211     data[invocation].u8.x   = subgroupExclusiveMin(data[0].u8.x);\r
212     data[invocation].u8.xy  = subgroupExclusiveMin(data[1].u8.xy);\r
213     data[invocation].u8.xyz = subgroupExclusiveMin(data[2].u8.xyz);\r
214     data[invocation].u8     = subgroupExclusiveMin(data[3].u8);\r
215 \r
216     data[invocation].u8.x   = subgroupExclusiveMax(data[0].u8.x);\r
217     data[invocation].u8.xy  = subgroupExclusiveMax(data[1].u8.xy);\r
218     data[invocation].u8.xyz = subgroupExclusiveMax(data[2].u8.xyz);\r
219     data[invocation].u8     = subgroupExclusiveMax(data[3].u8);\r
220 \r
221     data[invocation].u8.x   = subgroupExclusiveAnd(data[0].u8.x);\r
222     data[invocation].u8.xy  = subgroupExclusiveAnd(data[1].u8.xy);\r
223     data[invocation].u8.xyz = subgroupExclusiveAnd(data[2].u8.xyz);\r
224     data[invocation].u8     = subgroupExclusiveAnd(data[3].u8);\r
225 \r
226     data[invocation].u8.x   = subgroupExclusiveOr(data[0].u8.x);\r
227     data[invocation].u8.xy  = subgroupExclusiveOr(data[1].u8.xy);\r
228     data[invocation].u8.xyz = subgroupExclusiveOr(data[2].u8.xyz);\r
229     data[invocation].u8     = subgroupExclusiveOr(data[3].u8);\r
230 \r
231     data[invocation].u8.x   = subgroupExclusiveXor(data[0].u8.x);\r
232     data[invocation].u8.xy  = subgroupExclusiveXor(data[1].u8.xy);\r
233     data[invocation].u8.xyz = subgroupExclusiveXor(data[2].u8.xyz);\r
234     data[invocation].u8     = subgroupExclusiveXor(data[3].u8);\r
235 \r
236     data[invocation].i16.x   = subgroupAdd(data[0].i16.x);\r
237     data[invocation].i16.xy  = subgroupAdd(data[1].i16.xy);\r
238     data[invocation].i16.xyz = subgroupAdd(data[2].i16.xyz);\r
239     data[invocation].i16     = subgroupAdd(data[3].i16);\r
240 \r
241     data[invocation].i16.x   = subgroupMul(data[0].i16.x);\r
242     data[invocation].i16.xy  = subgroupMul(data[1].i16.xy);\r
243     data[invocation].i16.xyz = subgroupMul(data[2].i16.xyz);\r
244     data[invocation].i16     = subgroupMul(data[3].i16);\r
245 \r
246     data[invocation].i16.x   = subgroupMin(data[0].i16.x);\r
247     data[invocation].i16.xy  = subgroupMin(data[1].i16.xy);\r
248     data[invocation].i16.xyz = subgroupMin(data[2].i16.xyz);\r
249     data[invocation].i16     = subgroupMin(data[3].i16);\r
250 \r
251     data[invocation].i16.x   = subgroupMax(data[0].i16.x);\r
252     data[invocation].i16.xy  = subgroupMax(data[1].i16.xy);\r
253     data[invocation].i16.xyz = subgroupMax(data[2].i16.xyz);\r
254     data[invocation].i16     = subgroupMax(data[3].i16);\r
255 \r
256     data[invocation].i16.x   = subgroupAnd(data[0].i16.x);\r
257     data[invocation].i16.xy  = subgroupAnd(data[1].i16.xy);\r
258     data[invocation].i16.xyz = subgroupAnd(data[2].i16.xyz);\r
259     data[invocation].i16     = subgroupAnd(data[3].i16);\r
260 \r
261     data[invocation].i16.x   = subgroupOr(data[0].i16.x);\r
262     data[invocation].i16.xy  = subgroupOr(data[1].i16.xy);\r
263     data[invocation].i16.xyz = subgroupOr(data[2].i16.xyz);\r
264     data[invocation].i16     = subgroupOr(data[3].i16);\r
265 \r
266     data[invocation].i16.x   = subgroupXor(data[0].i16.x);\r
267     data[invocation].i16.xy  = subgroupXor(data[1].i16.xy);\r
268     data[invocation].i16.xyz = subgroupXor(data[2].i16.xyz);\r
269     data[invocation].i16     = subgroupXor(data[3].i16);\r
270 \r
271     data[invocation].i16.x   = subgroupInclusiveAdd(data[0].i16.x);\r
272     data[invocation].i16.xy  = subgroupInclusiveAdd(data[1].i16.xy);\r
273     data[invocation].i16.xyz = subgroupInclusiveAdd(data[2].i16.xyz);\r
274     data[invocation].i16     = subgroupInclusiveAdd(data[3].i16);\r
275 \r
276     data[invocation].i16.x   = subgroupInclusiveMul(data[0].i16.x);\r
277     data[invocation].i16.xy  = subgroupInclusiveMul(data[1].i16.xy);\r
278     data[invocation].i16.xyz = subgroupInclusiveMul(data[2].i16.xyz);\r
279     data[invocation].i16     = subgroupInclusiveMul(data[3].i16);\r
280 \r
281     data[invocation].i16.x   = subgroupInclusiveMin(data[0].i16.x);\r
282     data[invocation].i16.xy  = subgroupInclusiveMin(data[1].i16.xy);\r
283     data[invocation].i16.xyz = subgroupInclusiveMin(data[2].i16.xyz);\r
284     data[invocation].i16     = subgroupInclusiveMin(data[3].i16);\r
285 \r
286     data[invocation].i16.x   = subgroupInclusiveMax(data[0].i16.x);\r
287     data[invocation].i16.xy  = subgroupInclusiveMax(data[1].i16.xy);\r
288     data[invocation].i16.xyz = subgroupInclusiveMax(data[2].i16.xyz);\r
289     data[invocation].i16     = subgroupInclusiveMax(data[3].i16);\r
290 \r
291     data[invocation].i16.x   = subgroupInclusiveAnd(data[0].i16.x);\r
292     data[invocation].i16.xy  = subgroupInclusiveAnd(data[1].i16.xy);\r
293     data[invocation].i16.xyz = subgroupInclusiveAnd(data[2].i16.xyz);\r
294     data[invocation].i16     = subgroupInclusiveAnd(data[3].i16);\r
295 \r
296     data[invocation].i16.x   = subgroupInclusiveOr(data[0].i16.x);\r
297     data[invocation].i16.xy  = subgroupInclusiveOr(data[1].i16.xy);\r
298     data[invocation].i16.xyz = subgroupInclusiveOr(data[2].i16.xyz);\r
299     data[invocation].i16     = subgroupInclusiveOr(data[3].i16);\r
300 \r
301     data[invocation].i16.x   = subgroupInclusiveXor(data[0].i16.x);\r
302     data[invocation].i16.xy  = subgroupInclusiveXor(data[1].i16.xy);\r
303     data[invocation].i16.xyz = subgroupInclusiveXor(data[2].i16.xyz);\r
304     data[invocation].i16     = subgroupInclusiveXor(data[3].i16);\r
305 \r
306     data[invocation].i16.x   = subgroupExclusiveAdd(data[0].i16.x);\r
307     data[invocation].i16.xy  = subgroupExclusiveAdd(data[1].i16.xy);\r
308     data[invocation].i16.xyz = subgroupExclusiveAdd(data[2].i16.xyz);\r
309     data[invocation].i16     = subgroupExclusiveAdd(data[3].i16);\r
310 \r
311     data[invocation].i16.x   = subgroupExclusiveMul(data[0].i16.x);\r
312     data[invocation].i16.xy  = subgroupExclusiveMul(data[1].i16.xy);\r
313     data[invocation].i16.xyz = subgroupExclusiveMul(data[2].i16.xyz);\r
314     data[invocation].i16     = subgroupExclusiveMul(data[3].i16);\r
315 \r
316     data[invocation].i16.x   = subgroupExclusiveMin(data[0].i16.x);\r
317     data[invocation].i16.xy  = subgroupExclusiveMin(data[1].i16.xy);\r
318     data[invocation].i16.xyz = subgroupExclusiveMin(data[2].i16.xyz);\r
319     data[invocation].i16     = subgroupExclusiveMin(data[3].i16);\r
320 \r
321     data[invocation].i16.x   = subgroupExclusiveMax(data[0].i16.x);\r
322     data[invocation].i16.xy  = subgroupExclusiveMax(data[1].i16.xy);\r
323     data[invocation].i16.xyz = subgroupExclusiveMax(data[2].i16.xyz);\r
324     data[invocation].i16     = subgroupExclusiveMax(data[3].i16);\r
325 \r
326     data[invocation].i16.x   = subgroupExclusiveAnd(data[0].i16.x);\r
327     data[invocation].i16.xy  = subgroupExclusiveAnd(data[1].i16.xy);\r
328     data[invocation].i16.xyz = subgroupExclusiveAnd(data[2].i16.xyz);\r
329     data[invocation].i16     = subgroupExclusiveAnd(data[3].i16);\r
330 \r
331     data[invocation].i16.x   = subgroupExclusiveOr(data[0].i16.x);\r
332     data[invocation].i16.xy  = subgroupExclusiveOr(data[1].i16.xy);\r
333     data[invocation].i16.xyz = subgroupExclusiveOr(data[2].i16.xyz);\r
334     data[invocation].i16     = subgroupExclusiveOr(data[3].i16);\r
335 \r
336     data[invocation].i16.x   = subgroupExclusiveXor(data[0].i16.x);\r
337     data[invocation].i16.xy  = subgroupExclusiveXor(data[1].i16.xy);\r
338     data[invocation].i16.xyz = subgroupExclusiveXor(data[2].i16.xyz);\r
339     data[invocation].i16     = subgroupExclusiveXor(data[3].i16);\r
340 \r
341     data[invocation].u16.x   = subgroupAdd(data[0].u16.x);\r
342     data[invocation].u16.xy  = subgroupAdd(data[1].u16.xy);\r
343     data[invocation].u16.xyz = subgroupAdd(data[2].u16.xyz);\r
344     data[invocation].u16     = subgroupAdd(data[3].u16);\r
345 \r
346     data[invocation].u16.x   = subgroupMul(data[0].u16.x);\r
347     data[invocation].u16.xy  = subgroupMul(data[1].u16.xy);\r
348     data[invocation].u16.xyz = subgroupMul(data[2].u16.xyz);\r
349     data[invocation].u16     = subgroupMul(data[3].u16);\r
350 \r
351     data[invocation].u16.x   = subgroupMin(data[0].u16.x);\r
352     data[invocation].u16.xy  = subgroupMin(data[1].u16.xy);\r
353     data[invocation].u16.xyz = subgroupMin(data[2].u16.xyz);\r
354     data[invocation].u16     = subgroupMin(data[3].u16);\r
355 \r
356     data[invocation].u16.x   = subgroupMax(data[0].u16.x);\r
357     data[invocation].u16.xy  = subgroupMax(data[1].u16.xy);\r
358     data[invocation].u16.xyz = subgroupMax(data[2].u16.xyz);\r
359     data[invocation].u16     = subgroupMax(data[3].u16);\r
360 \r
361     data[invocation].u16.x   = subgroupAnd(data[0].u16.x);\r
362     data[invocation].u16.xy  = subgroupAnd(data[1].u16.xy);\r
363     data[invocation].u16.xyz = subgroupAnd(data[2].u16.xyz);\r
364     data[invocation].u16     = subgroupAnd(data[3].u16);\r
365 \r
366     data[invocation].u16.x   = subgroupOr(data[0].u16.x);\r
367     data[invocation].u16.xy  = subgroupOr(data[1].u16.xy);\r
368     data[invocation].u16.xyz = subgroupOr(data[2].u16.xyz);\r
369     data[invocation].u16     = subgroupOr(data[3].u16);\r
370 \r
371     data[invocation].u16.x   = subgroupXor(data[0].u16.x);\r
372     data[invocation].u16.xy  = subgroupXor(data[1].u16.xy);\r
373     data[invocation].u16.xyz = subgroupXor(data[2].u16.xyz);\r
374     data[invocation].u16     = subgroupXor(data[3].u16);\r
375 \r
376     data[invocation].u16.x   = subgroupInclusiveAdd(data[0].u16.x);\r
377     data[invocation].u16.xy  = subgroupInclusiveAdd(data[1].u16.xy);\r
378     data[invocation].u16.xyz = subgroupInclusiveAdd(data[2].u16.xyz);\r
379     data[invocation].u16     = subgroupInclusiveAdd(data[3].u16);\r
380 \r
381     data[invocation].u16.x   = subgroupInclusiveMul(data[0].u16.x);\r
382     data[invocation].u16.xy  = subgroupInclusiveMul(data[1].u16.xy);\r
383     data[invocation].u16.xyz = subgroupInclusiveMul(data[2].u16.xyz);\r
384     data[invocation].u16     = subgroupInclusiveMul(data[3].u16);\r
385 \r
386     data[invocation].u16.x   = subgroupInclusiveMin(data[0].u16.x);\r
387     data[invocation].u16.xy  = subgroupInclusiveMin(data[1].u16.xy);\r
388     data[invocation].u16.xyz = subgroupInclusiveMin(data[2].u16.xyz);\r
389     data[invocation].u16     = subgroupInclusiveMin(data[3].u16);\r
390 \r
391     data[invocation].u16.x   = subgroupInclusiveMax(data[0].u16.x);\r
392     data[invocation].u16.xy  = subgroupInclusiveMax(data[1].u16.xy);\r
393     data[invocation].u16.xyz = subgroupInclusiveMax(data[2].u16.xyz);\r
394     data[invocation].u16     = subgroupInclusiveMax(data[3].u16);\r
395 \r
396     data[invocation].u16.x   = subgroupInclusiveAnd(data[0].u16.x);\r
397     data[invocation].u16.xy  = subgroupInclusiveAnd(data[1].u16.xy);\r
398     data[invocation].u16.xyz = subgroupInclusiveAnd(data[2].u16.xyz);\r
399     data[invocation].u16     = subgroupInclusiveAnd(data[3].u16);\r
400 \r
401     data[invocation].u16.x   = subgroupInclusiveOr(data[0].u16.x);\r
402     data[invocation].u16.xy  = subgroupInclusiveOr(data[1].u16.xy);\r
403     data[invocation].u16.xyz = subgroupInclusiveOr(data[2].u16.xyz);\r
404     data[invocation].u16     = subgroupInclusiveOr(data[3].u16);\r
405 \r
406     data[invocation].u16.x   = subgroupInclusiveXor(data[0].u16.x);\r
407     data[invocation].u16.xy  = subgroupInclusiveXor(data[1].u16.xy);\r
408     data[invocation].u16.xyz = subgroupInclusiveXor(data[2].u16.xyz);\r
409     data[invocation].u16     = subgroupInclusiveXor(data[3].u16);\r
410 \r
411     data[invocation].u16.x   = subgroupExclusiveAdd(data[0].u16.x);\r
412     data[invocation].u16.xy  = subgroupExclusiveAdd(data[1].u16.xy);\r
413     data[invocation].u16.xyz = subgroupExclusiveAdd(data[2].u16.xyz);\r
414     data[invocation].u16     = subgroupExclusiveAdd(data[3].u16);\r
415 \r
416     data[invocation].u16.x   = subgroupExclusiveMul(data[0].u16.x);\r
417     data[invocation].u16.xy  = subgroupExclusiveMul(data[1].u16.xy);\r
418     data[invocation].u16.xyz = subgroupExclusiveMul(data[2].u16.xyz);\r
419     data[invocation].u16     = subgroupExclusiveMul(data[3].u16);\r
420 \r
421     data[invocation].u16.x   = subgroupExclusiveMin(data[0].u16.x);\r
422     data[invocation].u16.xy  = subgroupExclusiveMin(data[1].u16.xy);\r
423     data[invocation].u16.xyz = subgroupExclusiveMin(data[2].u16.xyz);\r
424     data[invocation].u16     = subgroupExclusiveMin(data[3].u16);\r
425 \r
426     data[invocation].u16.x   = subgroupExclusiveMax(data[0].u16.x);\r
427     data[invocation].u16.xy  = subgroupExclusiveMax(data[1].u16.xy);\r
428     data[invocation].u16.xyz = subgroupExclusiveMax(data[2].u16.xyz);\r
429     data[invocation].u16     = subgroupExclusiveMax(data[3].u16);\r
430 \r
431     data[invocation].u16.x   = subgroupExclusiveAnd(data[0].u16.x);\r
432     data[invocation].u16.xy  = subgroupExclusiveAnd(data[1].u16.xy);\r
433     data[invocation].u16.xyz = subgroupExclusiveAnd(data[2].u16.xyz);\r
434     data[invocation].u16     = subgroupExclusiveAnd(data[3].u16);\r
435 \r
436     data[invocation].u16.x   = subgroupExclusiveOr(data[0].u16.x);\r
437     data[invocation].u16.xy  = subgroupExclusiveOr(data[1].u16.xy);\r
438     data[invocation].u16.xyz = subgroupExclusiveOr(data[2].u16.xyz);\r
439     data[invocation].u16     = subgroupExclusiveOr(data[3].u16);\r
440 \r
441     data[invocation].u16.x   = subgroupExclusiveXor(data[0].u16.x);\r
442     data[invocation].u16.xy  = subgroupExclusiveXor(data[1].u16.xy);\r
443     data[invocation].u16.xyz = subgroupExclusiveXor(data[2].u16.xyz);\r
444     data[invocation].u16     = subgroupExclusiveXor(data[3].u16);\r
445 \r
446     data[invocation].i64.x   = subgroupAdd(data[0].i64.x);\r
447     data[invocation].i64.xy  = subgroupAdd(data[1].i64.xy);\r
448     data[invocation].i64.xyz = subgroupAdd(data[2].i64.xyz);\r
449     data[invocation].i64     = subgroupAdd(data[3].i64);\r
450 \r
451     data[invocation].i64.x   = subgroupMul(data[0].i64.x);\r
452     data[invocation].i64.xy  = subgroupMul(data[1].i64.xy);\r
453     data[invocation].i64.xyz = subgroupMul(data[2].i64.xyz);\r
454     data[invocation].i64     = subgroupMul(data[3].i64);\r
455 \r
456     data[invocation].i64.x   = subgroupMin(data[0].i64.x);\r
457     data[invocation].i64.xy  = subgroupMin(data[1].i64.xy);\r
458     data[invocation].i64.xyz = subgroupMin(data[2].i64.xyz);\r
459     data[invocation].i64     = subgroupMin(data[3].i64);\r
460 \r
461     data[invocation].i64.x   = subgroupMax(data[0].i64.x);\r
462     data[invocation].i64.xy  = subgroupMax(data[1].i64.xy);\r
463     data[invocation].i64.xyz = subgroupMax(data[2].i64.xyz);\r
464     data[invocation].i64     = subgroupMax(data[3].i64);\r
465 \r
466     data[invocation].i64.x   = subgroupAnd(data[0].i64.x);\r
467     data[invocation].i64.xy  = subgroupAnd(data[1].i64.xy);\r
468     data[invocation].i64.xyz = subgroupAnd(data[2].i64.xyz);\r
469     data[invocation].i64     = subgroupAnd(data[3].i64);\r
470 \r
471     data[invocation].i64.x   = subgroupOr(data[0].i64.x);\r
472     data[invocation].i64.xy  = subgroupOr(data[1].i64.xy);\r
473     data[invocation].i64.xyz = subgroupOr(data[2].i64.xyz);\r
474     data[invocation].i64     = subgroupOr(data[3].i64);\r
475 \r
476     data[invocation].i64.x   = subgroupXor(data[0].i64.x);\r
477     data[invocation].i64.xy  = subgroupXor(data[1].i64.xy);\r
478     data[invocation].i64.xyz = subgroupXor(data[2].i64.xyz);\r
479     data[invocation].i64     = subgroupXor(data[3].i64);\r
480 \r
481     data[invocation].i64.x   = subgroupInclusiveAdd(data[0].i64.x);\r
482     data[invocation].i64.xy  = subgroupInclusiveAdd(data[1].i64.xy);\r
483     data[invocation].i64.xyz = subgroupInclusiveAdd(data[2].i64.xyz);\r
484     data[invocation].i64     = subgroupInclusiveAdd(data[3].i64);\r
485 \r
486     data[invocation].i64.x   = subgroupInclusiveMul(data[0].i64.x);\r
487     data[invocation].i64.xy  = subgroupInclusiveMul(data[1].i64.xy);\r
488     data[invocation].i64.xyz = subgroupInclusiveMul(data[2].i64.xyz);\r
489     data[invocation].i64     = subgroupInclusiveMul(data[3].i64);\r
490 \r
491     data[invocation].i64.x   = subgroupInclusiveMin(data[0].i64.x);\r
492     data[invocation].i64.xy  = subgroupInclusiveMin(data[1].i64.xy);\r
493     data[invocation].i64.xyz = subgroupInclusiveMin(data[2].i64.xyz);\r
494     data[invocation].i64     = subgroupInclusiveMin(data[3].i64);\r
495 \r
496     data[invocation].i64.x   = subgroupInclusiveMax(data[0].i64.x);\r
497     data[invocation].i64.xy  = subgroupInclusiveMax(data[1].i64.xy);\r
498     data[invocation].i64.xyz = subgroupInclusiveMax(data[2].i64.xyz);\r
499     data[invocation].i64     = subgroupInclusiveMax(data[3].i64);\r
500 \r
501     data[invocation].i64.x   = subgroupInclusiveAnd(data[0].i64.x);\r
502     data[invocation].i64.xy  = subgroupInclusiveAnd(data[1].i64.xy);\r
503     data[invocation].i64.xyz = subgroupInclusiveAnd(data[2].i64.xyz);\r
504     data[invocation].i64     = subgroupInclusiveAnd(data[3].i64);\r
505 \r
506     data[invocation].i64.x   = subgroupInclusiveOr(data[0].i64.x);\r
507     data[invocation].i64.xy  = subgroupInclusiveOr(data[1].i64.xy);\r
508     data[invocation].i64.xyz = subgroupInclusiveOr(data[2].i64.xyz);\r
509     data[invocation].i64     = subgroupInclusiveOr(data[3].i64);\r
510 \r
511     data[invocation].i64.x   = subgroupInclusiveXor(data[0].i64.x);\r
512     data[invocation].i64.xy  = subgroupInclusiveXor(data[1].i64.xy);\r
513     data[invocation].i64.xyz = subgroupInclusiveXor(data[2].i64.xyz);\r
514     data[invocation].i64     = subgroupInclusiveXor(data[3].i64);\r
515 \r
516     data[invocation].i64.x   = subgroupExclusiveAdd(data[0].i64.x);\r
517     data[invocation].i64.xy  = subgroupExclusiveAdd(data[1].i64.xy);\r
518     data[invocation].i64.xyz = subgroupExclusiveAdd(data[2].i64.xyz);\r
519     data[invocation].i64     = subgroupExclusiveAdd(data[3].i64);\r
520 \r
521     data[invocation].i64.x   = subgroupExclusiveMul(data[0].i64.x);\r
522     data[invocation].i64.xy  = subgroupExclusiveMul(data[1].i64.xy);\r
523     data[invocation].i64.xyz = subgroupExclusiveMul(data[2].i64.xyz);\r
524     data[invocation].i64     = subgroupExclusiveMul(data[3].i64);\r
525 \r
526     data[invocation].i64.x   = subgroupExclusiveMin(data[0].i64.x);\r
527     data[invocation].i64.xy  = subgroupExclusiveMin(data[1].i64.xy);\r
528     data[invocation].i64.xyz = subgroupExclusiveMin(data[2].i64.xyz);\r
529     data[invocation].i64     = subgroupExclusiveMin(data[3].i64);\r
530 \r
531     data[invocation].i64.x   = subgroupExclusiveMax(data[0].i64.x);\r
532     data[invocation].i64.xy  = subgroupExclusiveMax(data[1].i64.xy);\r
533     data[invocation].i64.xyz = subgroupExclusiveMax(data[2].i64.xyz);\r
534     data[invocation].i64     = subgroupExclusiveMax(data[3].i64);\r
535 \r
536     data[invocation].i64.x   = subgroupExclusiveAnd(data[0].i64.x);\r
537     data[invocation].i64.xy  = subgroupExclusiveAnd(data[1].i64.xy);\r
538     data[invocation].i64.xyz = subgroupExclusiveAnd(data[2].i64.xyz);\r
539     data[invocation].i64     = subgroupExclusiveAnd(data[3].i64);\r
540 \r
541     data[invocation].i64.x   = subgroupExclusiveOr(data[0].i64.x);\r
542     data[invocation].i64.xy  = subgroupExclusiveOr(data[1].i64.xy);\r
543     data[invocation].i64.xyz = subgroupExclusiveOr(data[2].i64.xyz);\r
544     data[invocation].i64     = subgroupExclusiveOr(data[3].i64);\r
545 \r
546     data[invocation].i64.x   = subgroupExclusiveXor(data[0].i64.x);\r
547     data[invocation].i64.xy  = subgroupExclusiveXor(data[1].i64.xy);\r
548     data[invocation].i64.xyz = subgroupExclusiveXor(data[2].i64.xyz);\r
549     data[invocation].i64     = subgroupExclusiveXor(data[3].i64);\r
550 \r
551     data[invocation].u64.x   = subgroupAdd(data[0].u64.x);\r
552     data[invocation].u64.xy  = subgroupAdd(data[1].u64.xy);\r
553     data[invocation].u64.xyz = subgroupAdd(data[2].u64.xyz);\r
554     data[invocation].u64     = subgroupAdd(data[3].u64);\r
555 \r
556     data[invocation].u64.x   = subgroupMul(data[0].u64.x);\r
557     data[invocation].u64.xy  = subgroupMul(data[1].u64.xy);\r
558     data[invocation].u64.xyz = subgroupMul(data[2].u64.xyz);\r
559     data[invocation].u64     = subgroupMul(data[3].u64);\r
560 \r
561     data[invocation].u64.x   = subgroupMin(data[0].u64.x);\r
562     data[invocation].u64.xy  = subgroupMin(data[1].u64.xy);\r
563     data[invocation].u64.xyz = subgroupMin(data[2].u64.xyz);\r
564     data[invocation].u64     = subgroupMin(data[3].u64);\r
565 \r
566     data[invocation].u64.x   = subgroupMax(data[0].u64.x);\r
567     data[invocation].u64.xy  = subgroupMax(data[1].u64.xy);\r
568     data[invocation].u64.xyz = subgroupMax(data[2].u64.xyz);\r
569     data[invocation].u64     = subgroupMax(data[3].u64);\r
570 \r
571     data[invocation].u64.x   = subgroupAnd(data[0].u64.x);\r
572     data[invocation].u64.xy  = subgroupAnd(data[1].u64.xy);\r
573     data[invocation].u64.xyz = subgroupAnd(data[2].u64.xyz);\r
574     data[invocation].u64     = subgroupAnd(data[3].u64);\r
575 \r
576     data[invocation].u64.x   = subgroupOr(data[0].u64.x);\r
577     data[invocation].u64.xy  = subgroupOr(data[1].u64.xy);\r
578     data[invocation].u64.xyz = subgroupOr(data[2].u64.xyz);\r
579     data[invocation].u64     = subgroupOr(data[3].u64);\r
580 \r
581     data[invocation].u64.x   = subgroupXor(data[0].u64.x);\r
582     data[invocation].u64.xy  = subgroupXor(data[1].u64.xy);\r
583     data[invocation].u64.xyz = subgroupXor(data[2].u64.xyz);\r
584     data[invocation].u64     = subgroupXor(data[3].u64);\r
585 \r
586     data[invocation].u64.x   = subgroupInclusiveAdd(data[0].u64.x);\r
587     data[invocation].u64.xy  = subgroupInclusiveAdd(data[1].u64.xy);\r
588     data[invocation].u64.xyz = subgroupInclusiveAdd(data[2].u64.xyz);\r
589     data[invocation].u64     = subgroupInclusiveAdd(data[3].u64);\r
590 \r
591     data[invocation].u64.x   = subgroupInclusiveMul(data[0].u64.x);\r
592     data[invocation].u64.xy  = subgroupInclusiveMul(data[1].u64.xy);\r
593     data[invocation].u64.xyz = subgroupInclusiveMul(data[2].u64.xyz);\r
594     data[invocation].u64     = subgroupInclusiveMul(data[3].u64);\r
595 \r
596     data[invocation].u64.x   = subgroupInclusiveMin(data[0].u64.x);\r
597     data[invocation].u64.xy  = subgroupInclusiveMin(data[1].u64.xy);\r
598     data[invocation].u64.xyz = subgroupInclusiveMin(data[2].u64.xyz);\r
599     data[invocation].u64     = subgroupInclusiveMin(data[3].u64);\r
600 \r
601     data[invocation].u64.x   = subgroupInclusiveMax(data[0].u64.x);\r
602     data[invocation].u64.xy  = subgroupInclusiveMax(data[1].u64.xy);\r
603     data[invocation].u64.xyz = subgroupInclusiveMax(data[2].u64.xyz);\r
604     data[invocation].u64     = subgroupInclusiveMax(data[3].u64);\r
605 \r
606     data[invocation].u64.x   = subgroupInclusiveAnd(data[0].u64.x);\r
607     data[invocation].u64.xy  = subgroupInclusiveAnd(data[1].u64.xy);\r
608     data[invocation].u64.xyz = subgroupInclusiveAnd(data[2].u64.xyz);\r
609     data[invocation].u64     = subgroupInclusiveAnd(data[3].u64);\r
610 \r
611     data[invocation].u64.x   = subgroupInclusiveOr(data[0].u64.x);\r
612     data[invocation].u64.xy  = subgroupInclusiveOr(data[1].u64.xy);\r
613     data[invocation].u64.xyz = subgroupInclusiveOr(data[2].u64.xyz);\r
614     data[invocation].u64     = subgroupInclusiveOr(data[3].u64);\r
615 \r
616     data[invocation].u64.x   = subgroupInclusiveXor(data[0].u64.x);\r
617     data[invocation].u64.xy  = subgroupInclusiveXor(data[1].u64.xy);\r
618     data[invocation].u64.xyz = subgroupInclusiveXor(data[2].u64.xyz);\r
619     data[invocation].u64     = subgroupInclusiveXor(data[3].u64);\r
620 \r
621     data[invocation].u64.x   = subgroupExclusiveAdd(data[0].u64.x);\r
622     data[invocation].u64.xy  = subgroupExclusiveAdd(data[1].u64.xy);\r
623     data[invocation].u64.xyz = subgroupExclusiveAdd(data[2].u64.xyz);\r
624     data[invocation].u64     = subgroupExclusiveAdd(data[3].u64);\r
625 \r
626     data[invocation].u64.x   = subgroupExclusiveMul(data[0].u64.x);\r
627     data[invocation].u64.xy  = subgroupExclusiveMul(data[1].u64.xy);\r
628     data[invocation].u64.xyz = subgroupExclusiveMul(data[2].u64.xyz);\r
629     data[invocation].u64     = subgroupExclusiveMul(data[3].u64);\r
630 \r
631     data[invocation].u64.x   = subgroupExclusiveMin(data[0].u64.x);\r
632     data[invocation].u64.xy  = subgroupExclusiveMin(data[1].u64.xy);\r
633     data[invocation].u64.xyz = subgroupExclusiveMin(data[2].u64.xyz);\r
634     data[invocation].u64     = subgroupExclusiveMin(data[3].u64);\r
635 \r
636     data[invocation].u64.x   = subgroupExclusiveMax(data[0].u64.x);\r
637     data[invocation].u64.xy  = subgroupExclusiveMax(data[1].u64.xy);\r
638     data[invocation].u64.xyz = subgroupExclusiveMax(data[2].u64.xyz);\r
639     data[invocation].u64     = subgroupExclusiveMax(data[3].u64);\r
640 \r
641     data[invocation].u64.x   = subgroupExclusiveAnd(data[0].u64.x);\r
642     data[invocation].u64.xy  = subgroupExclusiveAnd(data[1].u64.xy);\r
643     data[invocation].u64.xyz = subgroupExclusiveAnd(data[2].u64.xyz);\r
644     data[invocation].u64     = subgroupExclusiveAnd(data[3].u64);\r
645 \r
646     data[invocation].u64.x   = subgroupExclusiveOr(data[0].u64.x);\r
647     data[invocation].u64.xy  = subgroupExclusiveOr(data[1].u64.xy);\r
648     data[invocation].u64.xyz = subgroupExclusiveOr(data[2].u64.xyz);\r
649     data[invocation].u64     = subgroupExclusiveOr(data[3].u64);\r
650 \r
651     data[invocation].u64.x   = subgroupExclusiveXor(data[0].u64.x);\r
652     data[invocation].u64.xy  = subgroupExclusiveXor(data[1].u64.xy);\r
653     data[invocation].u64.xyz = subgroupExclusiveXor(data[2].u64.xyz);\r
654     data[invocation].u64     = subgroupExclusiveXor(data[3].u64);\r
655 \r
656     data[invocation].f16.x   = subgroupAdd(data[0].f16.x);\r
657     data[invocation].f16.xy  = subgroupAdd(data[1].f16.xy);\r
658     data[invocation].f16.xyz = subgroupAdd(data[2].f16.xyz);\r
659     data[invocation].f16     = subgroupAdd(data[3].f16);\r
660 \r
661     data[invocation].f16.x   = subgroupMul(data[0].f16.x);\r
662     data[invocation].f16.xy  = subgroupMul(data[1].f16.xy);\r
663     data[invocation].f16.xyz = subgroupMul(data[2].f16.xyz);\r
664     data[invocation].f16     = subgroupMul(data[3].f16);\r
665 \r
666     data[invocation].f16.x   = subgroupMin(data[0].f16.x);\r
667     data[invocation].f16.xy  = subgroupMin(data[1].f16.xy);\r
668     data[invocation].f16.xyz = subgroupMin(data[2].f16.xyz);\r
669     data[invocation].f16     = subgroupMin(data[3].f16);\r
670 \r
671     data[invocation].f16.x   = subgroupMax(data[0].f16.x);\r
672     data[invocation].f16.xy  = subgroupMax(data[1].f16.xy);\r
673     data[invocation].f16.xyz = subgroupMax(data[2].f16.xyz);\r
674     data[invocation].f16     = subgroupMax(data[3].f16);\r
675 \r
676     data[invocation].f16.x   = subgroupInclusiveAdd(data[0].f16.x);\r
677     data[invocation].f16.xy  = subgroupInclusiveAdd(data[1].f16.xy);\r
678     data[invocation].f16.xyz = subgroupInclusiveAdd(data[2].f16.xyz);\r
679     data[invocation].f16     = subgroupInclusiveAdd(data[3].f16);\r
680 \r
681     data[invocation].f16.x   = subgroupInclusiveMul(data[0].f16.x);\r
682     data[invocation].f16.xy  = subgroupInclusiveMul(data[1].f16.xy);\r
683     data[invocation].f16.xyz = subgroupInclusiveMul(data[2].f16.xyz);\r
684     data[invocation].f16     = subgroupInclusiveMul(data[3].f16);\r
685 \r
686     data[invocation].f16.x   = subgroupInclusiveMin(data[0].f16.x);\r
687     data[invocation].f16.xy  = subgroupInclusiveMin(data[1].f16.xy);\r
688     data[invocation].f16.xyz = subgroupInclusiveMin(data[2].f16.xyz);\r
689     data[invocation].f16     = subgroupInclusiveMin(data[3].f16);\r
690 \r
691     data[invocation].f16.x   = subgroupInclusiveMax(data[0].f16.x);\r
692     data[invocation].f16.xy  = subgroupInclusiveMax(data[1].f16.xy);\r
693     data[invocation].f16.xyz = subgroupInclusiveMax(data[2].f16.xyz);\r
694     data[invocation].f16     = subgroupInclusiveMax(data[3].f16);\r
695 \r
696     data[invocation].f16.x   = subgroupExclusiveAdd(data[0].f16.x);\r
697     data[invocation].f16.xy  = subgroupExclusiveAdd(data[1].f16.xy);\r
698     data[invocation].f16.xyz = subgroupExclusiveAdd(data[2].f16.xyz);\r
699     data[invocation].f16     = subgroupExclusiveAdd(data[3].f16);\r
700 \r
701     data[invocation].f16.x   = subgroupExclusiveMul(data[0].f16.x);\r
702     data[invocation].f16.xy  = subgroupExclusiveMul(data[1].f16.xy);\r
703     data[invocation].f16.xyz = subgroupExclusiveMul(data[2].f16.xyz);\r
704     data[invocation].f16     = subgroupExclusiveMul(data[3].f16);\r
705 \r
706     data[invocation].f16.x   = subgroupExclusiveMin(data[0].f16.x);\r
707     data[invocation].f16.xy  = subgroupExclusiveMin(data[1].f16.xy);\r
708     data[invocation].f16.xyz = subgroupExclusiveMin(data[2].f16.xyz);\r
709     data[invocation].f16     = subgroupExclusiveMin(data[3].f16);\r
710 \r
711     data[invocation].f16.x   = subgroupExclusiveMax(data[0].f16.x);\r
712     data[invocation].f16.xy  = subgroupExclusiveMax(data[1].f16.xy);\r
713     data[invocation].f16.xyz = subgroupExclusiveMax(data[2].f16.xyz);\r
714     data[invocation].f16     = subgroupExclusiveMax(data[3].f16);\r
715 }\r