Merge pull request #2976 from jeremy-lunarg/hayes-fix-2975
[platform/upstream/glslang.git] / Test / spv.subgroupExtendedTypesPartitionedNeg.comp
1 #version 450\r
2 \r
3 #extension GL_NV_shader_subgroup_partitioned: 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     uvec4 ballot;\r
27     ballot = subgroupPartitionNV(data[0].i8.x);\r
28     ballot = subgroupPartitionNV(data[1].i8.xy);\r
29     ballot = subgroupPartitionNV(data[2].i8.xyz);\r
30     ballot = subgroupPartitionNV(data[3].i8);\r
31 \r
32     ballot = subgroupPartitionNV(data[0].u8.x);\r
33     ballot = subgroupPartitionNV(data[1].u8.xy);\r
34     ballot = subgroupPartitionNV(data[2].u8.xyz);\r
35     ballot = subgroupPartitionNV(data[3].u8);\r
36 \r
37     ballot = subgroupPartitionNV(data[0].i16.x);\r
38     ballot = subgroupPartitionNV(data[1].i16.xy);\r
39     ballot = subgroupPartitionNV(data[2].i16.xyz);\r
40     ballot = subgroupPartitionNV(data[3].i16);\r
41 \r
42     ballot = subgroupPartitionNV(data[0].u16.x);\r
43     ballot = subgroupPartitionNV(data[1].u16.xy);\r
44     ballot = subgroupPartitionNV(data[2].u16.xyz);\r
45     ballot = subgroupPartitionNV(data[3].u16);\r
46 \r
47     ballot = subgroupPartitionNV(data[0].i64.x);\r
48     ballot = subgroupPartitionNV(data[1].i64.xy);\r
49     ballot = subgroupPartitionNV(data[2].i64.xyz);\r
50     ballot = subgroupPartitionNV(data[3].i64);\r
51 \r
52     ballot = subgroupPartitionNV(data[0].u64.x);\r
53     ballot = subgroupPartitionNV(data[1].u64.xy);\r
54     ballot = subgroupPartitionNV(data[2].u64.xyz);\r
55     ballot = subgroupPartitionNV(data[3].u64);\r
56 \r
57     ballot = subgroupPartitionNV(data[0].f16.x);\r
58     ballot = subgroupPartitionNV(data[1].f16.xy);\r
59     ballot = subgroupPartitionNV(data[2].f16.xyz);\r
60     ballot = subgroupPartitionNV(data[3].f16);\r
61 \r
62     data[invocation].i8.x   = subgroupPartitionedAddNV(data[0].i8.x, ballot);\r
63     data[invocation].i8.xy  = subgroupPartitionedAddNV(data[1].i8.xy, ballot);\r
64     data[invocation].i8.xyz = subgroupPartitionedAddNV(data[2].i8.xyz, ballot);\r
65     data[invocation].i8     = subgroupPartitionedAddNV(data[3].i8, ballot);\r
66 \r
67     data[invocation].i8.x   = subgroupPartitionedMulNV(data[0].i8.x, ballot);\r
68     data[invocation].i8.xy  = subgroupPartitionedMulNV(data[1].i8.xy, ballot);\r
69     data[invocation].i8.xyz = subgroupPartitionedMulNV(data[2].i8.xyz, ballot);\r
70     data[invocation].i8     = subgroupPartitionedMulNV(data[3].i8, ballot);\r
71 \r
72     data[invocation].i8.x   = subgroupPartitionedMinNV(data[0].i8.x, ballot);\r
73     data[invocation].i8.xy  = subgroupPartitionedMinNV(data[1].i8.xy, ballot);\r
74     data[invocation].i8.xyz = subgroupPartitionedMinNV(data[2].i8.xyz, ballot);\r
75     data[invocation].i8     = subgroupPartitionedMinNV(data[3].i8, ballot);\r
76 \r
77     data[invocation].i8.x   = subgroupPartitionedMaxNV(data[0].i8.x, ballot);\r
78     data[invocation].i8.xy  = subgroupPartitionedMaxNV(data[1].i8.xy, ballot);\r
79     data[invocation].i8.xyz = subgroupPartitionedMaxNV(data[2].i8.xyz, ballot);\r
80     data[invocation].i8     = subgroupPartitionedMaxNV(data[3].i8, ballot);\r
81 \r
82     data[invocation].i8.x   = subgroupPartitionedAndNV(data[0].i8.x, ballot);\r
83     data[invocation].i8.xy  = subgroupPartitionedAndNV(data[1].i8.xy, ballot);\r
84     data[invocation].i8.xyz = subgroupPartitionedAndNV(data[2].i8.xyz, ballot);\r
85     data[invocation].i8     = subgroupPartitionedAndNV(data[3].i8, ballot);\r
86 \r
87     data[invocation].i8.x   = subgroupPartitionedOrNV(data[0].i8.x, ballot);\r
88     data[invocation].i8.xy  = subgroupPartitionedOrNV(data[1].i8.xy, ballot);\r
89     data[invocation].i8.xyz = subgroupPartitionedOrNV(data[2].i8.xyz, ballot);\r
90     data[invocation].i8     = subgroupPartitionedOrNV(data[3].i8, ballot);\r
91 \r
92     data[invocation].i8.x   = subgroupPartitionedXorNV(data[0].i8.x, ballot);\r
93     data[invocation].i8.xy  = subgroupPartitionedXorNV(data[1].i8.xy, ballot);\r
94     data[invocation].i8.xyz = subgroupPartitionedXorNV(data[2].i8.xyz, ballot);\r
95     data[invocation].i8     = subgroupPartitionedXorNV(data[3].i8, ballot);\r
96 \r
97     data[invocation].u8.x   = subgroupPartitionedAddNV(data[0].u8.x, ballot);\r
98     data[invocation].u8.xy  = subgroupPartitionedAddNV(data[1].u8.xy, ballot);\r
99     data[invocation].u8.xyz = subgroupPartitionedAddNV(data[2].u8.xyz, ballot);\r
100     data[invocation].u8     = subgroupPartitionedAddNV(data[3].u8, ballot);\r
101 \r
102     data[invocation].u8.x   = subgroupPartitionedMulNV(data[0].u8.x, ballot);\r
103     data[invocation].u8.xy  = subgroupPartitionedMulNV(data[1].u8.xy, ballot);\r
104     data[invocation].u8.xyz = subgroupPartitionedMulNV(data[2].u8.xyz, ballot);\r
105     data[invocation].u8     = subgroupPartitionedMulNV(data[3].u8, ballot);\r
106 \r
107     data[invocation].u8.x   = subgroupPartitionedMinNV(data[0].u8.x, ballot);\r
108     data[invocation].u8.xy  = subgroupPartitionedMinNV(data[1].u8.xy, ballot);\r
109     data[invocation].u8.xyz = subgroupPartitionedMinNV(data[2].u8.xyz, ballot);\r
110     data[invocation].u8     = subgroupPartitionedMinNV(data[3].u8, ballot);\r
111 \r
112     data[invocation].u8.x   = subgroupPartitionedMaxNV(data[0].u8.x, ballot);\r
113     data[invocation].u8.xy  = subgroupPartitionedMaxNV(data[1].u8.xy, ballot);\r
114     data[invocation].u8.xyz = subgroupPartitionedMaxNV(data[2].u8.xyz, ballot);\r
115     data[invocation].u8     = subgroupPartitionedMaxNV(data[3].u8, ballot);\r
116 \r
117     data[invocation].u8.x   = subgroupPartitionedAndNV(data[0].u8.x, ballot);\r
118     data[invocation].u8.xy  = subgroupPartitionedAndNV(data[1].u8.xy, ballot);\r
119     data[invocation].u8.xyz = subgroupPartitionedAndNV(data[2].u8.xyz, ballot);\r
120     data[invocation].u8     = subgroupPartitionedAndNV(data[3].u8, ballot);\r
121 \r
122     data[invocation].u8.x   = subgroupPartitionedOrNV(data[0].u8.x, ballot);\r
123     data[invocation].u8.xy  = subgroupPartitionedOrNV(data[1].u8.xy, ballot);\r
124     data[invocation].u8.xyz = subgroupPartitionedOrNV(data[2].u8.xyz, ballot);\r
125     data[invocation].u8     = subgroupPartitionedOrNV(data[3].u8, ballot);\r
126 \r
127     data[invocation].u8.x   = subgroupPartitionedXorNV(data[0].u8.x, ballot);\r
128     data[invocation].u8.xy  = subgroupPartitionedXorNV(data[1].u8.xy, ballot);\r
129     data[invocation].u8.xyz = subgroupPartitionedXorNV(data[2].u8.xyz, ballot);\r
130     data[invocation].u8     = subgroupPartitionedXorNV(data[3].u8, ballot);\r
131 \r
132     data[invocation].i16.x   = subgroupPartitionedAddNV(data[0].i16.x, ballot);\r
133     data[invocation].i16.xy  = subgroupPartitionedAddNV(data[1].i16.xy, ballot);\r
134     data[invocation].i16.xyz = subgroupPartitionedAddNV(data[2].i16.xyz, ballot);\r
135     data[invocation].i16     = subgroupPartitionedAddNV(data[3].i16, ballot);\r
136 \r
137     data[invocation].i16.x   = subgroupPartitionedMulNV(data[0].i16.x, ballot);\r
138     data[invocation].i16.xy  = subgroupPartitionedMulNV(data[1].i16.xy, ballot);\r
139     data[invocation].i16.xyz = subgroupPartitionedMulNV(data[2].i16.xyz, ballot);\r
140     data[invocation].i16     = subgroupPartitionedMulNV(data[3].i16, ballot);\r
141 \r
142     data[invocation].i16.x   = subgroupPartitionedMinNV(data[0].i16.x, ballot);\r
143     data[invocation].i16.xy  = subgroupPartitionedMinNV(data[1].i16.xy, ballot);\r
144     data[invocation].i16.xyz = subgroupPartitionedMinNV(data[2].i16.xyz, ballot);\r
145     data[invocation].i16     = subgroupPartitionedMinNV(data[3].i16, ballot);\r
146 \r
147     data[invocation].i16.x   = subgroupPartitionedMaxNV(data[0].i16.x, ballot);\r
148     data[invocation].i16.xy  = subgroupPartitionedMaxNV(data[1].i16.xy, ballot);\r
149     data[invocation].i16.xyz = subgroupPartitionedMaxNV(data[2].i16.xyz, ballot);\r
150     data[invocation].i16     = subgroupPartitionedMaxNV(data[3].i16, ballot);\r
151 \r
152     data[invocation].i16.x   = subgroupPartitionedAndNV(data[0].i16.x, ballot);\r
153     data[invocation].i16.xy  = subgroupPartitionedAndNV(data[1].i16.xy, ballot);\r
154     data[invocation].i16.xyz = subgroupPartitionedAndNV(data[2].i16.xyz, ballot);\r
155     data[invocation].i16     = subgroupPartitionedAndNV(data[3].i16, ballot);\r
156 \r
157     data[invocation].i16.x   = subgroupPartitionedOrNV(data[0].i16.x, ballot);\r
158     data[invocation].i16.xy  = subgroupPartitionedOrNV(data[1].i16.xy, ballot);\r
159     data[invocation].i16.xyz = subgroupPartitionedOrNV(data[2].i16.xyz, ballot);\r
160     data[invocation].i16     = subgroupPartitionedOrNV(data[3].i16, ballot);\r
161 \r
162     data[invocation].i16.x   = subgroupPartitionedXorNV(data[0].i16.x, ballot);\r
163     data[invocation].i16.xy  = subgroupPartitionedXorNV(data[1].i16.xy, ballot);\r
164     data[invocation].i16.xyz = subgroupPartitionedXorNV(data[2].i16.xyz, ballot);\r
165     data[invocation].i16     = subgroupPartitionedXorNV(data[3].i16, ballot);\r
166 \r
167     data[invocation].u16.x   = subgroupPartitionedAddNV(data[0].u16.x, ballot);\r
168     data[invocation].u16.xy  = subgroupPartitionedAddNV(data[1].u16.xy, ballot);\r
169     data[invocation].u16.xyz = subgroupPartitionedAddNV(data[2].u16.xyz, ballot);\r
170     data[invocation].u16     = subgroupPartitionedAddNV(data[3].u16, ballot);\r
171 \r
172     data[invocation].u16.x   = subgroupPartitionedMulNV(data[0].u16.x, ballot);\r
173     data[invocation].u16.xy  = subgroupPartitionedMulNV(data[1].u16.xy, ballot);\r
174     data[invocation].u16.xyz = subgroupPartitionedMulNV(data[2].u16.xyz, ballot);\r
175     data[invocation].u16     = subgroupPartitionedMulNV(data[3].u16, ballot);\r
176 \r
177     data[invocation].u16.x   = subgroupPartitionedMinNV(data[0].u16.x, ballot);\r
178     data[invocation].u16.xy  = subgroupPartitionedMinNV(data[1].u16.xy, ballot);\r
179     data[invocation].u16.xyz = subgroupPartitionedMinNV(data[2].u16.xyz, ballot);\r
180     data[invocation].u16     = subgroupPartitionedMinNV(data[3].u16, ballot);\r
181 \r
182     data[invocation].u16.x   = subgroupPartitionedMaxNV(data[0].u16.x, ballot);\r
183     data[invocation].u16.xy  = subgroupPartitionedMaxNV(data[1].u16.xy, ballot);\r
184     data[invocation].u16.xyz = subgroupPartitionedMaxNV(data[2].u16.xyz, ballot);\r
185     data[invocation].u16     = subgroupPartitionedMaxNV(data[3].u16, ballot);\r
186 \r
187     data[invocation].u16.x   = subgroupPartitionedAndNV(data[0].u16.x, ballot);\r
188     data[invocation].u16.xy  = subgroupPartitionedAndNV(data[1].u16.xy, ballot);\r
189     data[invocation].u16.xyz = subgroupPartitionedAndNV(data[2].u16.xyz, ballot);\r
190     data[invocation].u16     = subgroupPartitionedAndNV(data[3].u16, ballot);\r
191 \r
192     data[invocation].u16.x   = subgroupPartitionedOrNV(data[0].u16.x, ballot);\r
193     data[invocation].u16.xy  = subgroupPartitionedOrNV(data[1].u16.xy, ballot);\r
194     data[invocation].u16.xyz = subgroupPartitionedOrNV(data[2].u16.xyz, ballot);\r
195     data[invocation].u16     = subgroupPartitionedOrNV(data[3].u16, ballot);\r
196 \r
197     data[invocation].u16.x   = subgroupPartitionedXorNV(data[0].u16.x, ballot);\r
198     data[invocation].u16.xy  = subgroupPartitionedXorNV(data[1].u16.xy, ballot);\r
199     data[invocation].u16.xyz = subgroupPartitionedXorNV(data[2].u16.xyz, ballot);\r
200     data[invocation].u16     = subgroupPartitionedXorNV(data[3].u16, ballot);\r
201 \r
202     data[invocation].i64.x   = subgroupPartitionedAddNV(data[0].i64.x, ballot);\r
203     data[invocation].i64.xy  = subgroupPartitionedAddNV(data[1].i64.xy, ballot);\r
204     data[invocation].i64.xyz = subgroupPartitionedAddNV(data[2].i64.xyz, ballot);\r
205     data[invocation].i64     = subgroupPartitionedAddNV(data[3].i64, ballot);\r
206 \r
207     data[invocation].i64.x   = subgroupPartitionedMulNV(data[0].i64.x, ballot);\r
208     data[invocation].i64.xy  = subgroupPartitionedMulNV(data[1].i64.xy, ballot);\r
209     data[invocation].i64.xyz = subgroupPartitionedMulNV(data[2].i64.xyz, ballot);\r
210     data[invocation].i64     = subgroupPartitionedMulNV(data[3].i64, ballot);\r
211 \r
212     data[invocation].i64.x   = subgroupPartitionedMinNV(data[0].i64.x, ballot);\r
213     data[invocation].i64.xy  = subgroupPartitionedMinNV(data[1].i64.xy, ballot);\r
214     data[invocation].i64.xyz = subgroupPartitionedMinNV(data[2].i64.xyz, ballot);\r
215     data[invocation].i64     = subgroupPartitionedMinNV(data[3].i64, ballot);\r
216 \r
217     data[invocation].i64.x   = subgroupPartitionedMaxNV(data[0].i64.x, ballot);\r
218     data[invocation].i64.xy  = subgroupPartitionedMaxNV(data[1].i64.xy, ballot);\r
219     data[invocation].i64.xyz = subgroupPartitionedMaxNV(data[2].i64.xyz, ballot);\r
220     data[invocation].i64     = subgroupPartitionedMaxNV(data[3].i64, ballot);\r
221 \r
222     data[invocation].i64.x   = subgroupPartitionedAndNV(data[0].i64.x, ballot);\r
223     data[invocation].i64.xy  = subgroupPartitionedAndNV(data[1].i64.xy, ballot);\r
224     data[invocation].i64.xyz = subgroupPartitionedAndNV(data[2].i64.xyz, ballot);\r
225     data[invocation].i64     = subgroupPartitionedAndNV(data[3].i64, ballot);\r
226 \r
227     data[invocation].i64.x   = subgroupPartitionedOrNV(data[0].i64.x, ballot);\r
228     data[invocation].i64.xy  = subgroupPartitionedOrNV(data[1].i64.xy, ballot);\r
229     data[invocation].i64.xyz = subgroupPartitionedOrNV(data[2].i64.xyz, ballot);\r
230     data[invocation].i64     = subgroupPartitionedOrNV(data[3].i64, ballot);\r
231 \r
232     data[invocation].i64.x   = subgroupPartitionedXorNV(data[0].i64.x, ballot);\r
233     data[invocation].i64.xy  = subgroupPartitionedXorNV(data[1].i64.xy, ballot);\r
234     data[invocation].i64.xyz = subgroupPartitionedXorNV(data[2].i64.xyz, ballot);\r
235     data[invocation].i64     = subgroupPartitionedXorNV(data[3].i64, ballot);\r
236 \r
237     data[invocation].u64.x   = subgroupPartitionedAddNV(data[0].u64.x, ballot);\r
238     data[invocation].u64.xy  = subgroupPartitionedAddNV(data[1].u64.xy, ballot);\r
239     data[invocation].u64.xyz = subgroupPartitionedAddNV(data[2].u64.xyz, ballot);\r
240     data[invocation].u64     = subgroupPartitionedAddNV(data[3].u64, ballot);\r
241 \r
242     data[invocation].u64.x   = subgroupPartitionedMulNV(data[0].u64.x, ballot);\r
243     data[invocation].u64.xy  = subgroupPartitionedMulNV(data[1].u64.xy, ballot);\r
244     data[invocation].u64.xyz = subgroupPartitionedMulNV(data[2].u64.xyz, ballot);\r
245     data[invocation].u64     = subgroupPartitionedMulNV(data[3].u64, ballot);\r
246 \r
247     data[invocation].u64.x   = subgroupPartitionedMinNV(data[0].u64.x, ballot);\r
248     data[invocation].u64.xy  = subgroupPartitionedMinNV(data[1].u64.xy, ballot);\r
249     data[invocation].u64.xyz = subgroupPartitionedMinNV(data[2].u64.xyz, ballot);\r
250     data[invocation].u64     = subgroupPartitionedMinNV(data[3].u64, ballot);\r
251 \r
252     data[invocation].u64.x   = subgroupPartitionedMaxNV(data[0].u64.x, ballot);\r
253     data[invocation].u64.xy  = subgroupPartitionedMaxNV(data[1].u64.xy, ballot);\r
254     data[invocation].u64.xyz = subgroupPartitionedMaxNV(data[2].u64.xyz, ballot);\r
255     data[invocation].u64     = subgroupPartitionedMaxNV(data[3].u64, ballot);\r
256 \r
257     data[invocation].u64.x   = subgroupPartitionedAndNV(data[0].u64.x, ballot);\r
258     data[invocation].u64.xy  = subgroupPartitionedAndNV(data[1].u64.xy, ballot);\r
259     data[invocation].u64.xyz = subgroupPartitionedAndNV(data[2].u64.xyz, ballot);\r
260     data[invocation].u64     = subgroupPartitionedAndNV(data[3].u64, ballot);\r
261 \r
262     data[invocation].u64.x   = subgroupPartitionedOrNV(data[0].u64.x, ballot);\r
263     data[invocation].u64.xy  = subgroupPartitionedOrNV(data[1].u64.xy, ballot);\r
264     data[invocation].u64.xyz = subgroupPartitionedOrNV(data[2].u64.xyz, ballot);\r
265     data[invocation].u64     = subgroupPartitionedOrNV(data[3].u64, ballot);\r
266 \r
267     data[invocation].u64.x   = subgroupPartitionedXorNV(data[0].u64.x, ballot);\r
268     data[invocation].u64.xy  = subgroupPartitionedXorNV(data[1].u64.xy, ballot);\r
269     data[invocation].u64.xyz = subgroupPartitionedXorNV(data[2].u64.xyz, ballot);\r
270     data[invocation].u64     = subgroupPartitionedXorNV(data[3].u64, ballot);\r
271 \r
272     data[invocation].f16.x   = subgroupPartitionedAddNV(data[0].f16.x, ballot);\r
273     data[invocation].f16.xy  = subgroupPartitionedAddNV(data[1].f16.xy, ballot);\r
274     data[invocation].f16.xyz = subgroupPartitionedAddNV(data[2].f16.xyz, ballot);\r
275     data[invocation].f16     = subgroupPartitionedAddNV(data[3].f16, ballot);\r
276 \r
277     data[invocation].f16.x   = subgroupPartitionedMulNV(data[0].f16.x, ballot);\r
278     data[invocation].f16.xy  = subgroupPartitionedMulNV(data[1].f16.xy, ballot);\r
279     data[invocation].f16.xyz = subgroupPartitionedMulNV(data[2].f16.xyz, ballot);\r
280     data[invocation].f16     = subgroupPartitionedMulNV(data[3].f16, ballot);\r
281 \r
282     data[invocation].f16.x   = subgroupPartitionedMinNV(data[0].f16.x, ballot);\r
283     data[invocation].f16.xy  = subgroupPartitionedMinNV(data[1].f16.xy, ballot);\r
284     data[invocation].f16.xyz = subgroupPartitionedMinNV(data[2].f16.xyz, ballot);\r
285     data[invocation].f16     = subgroupPartitionedMinNV(data[3].f16, ballot);\r
286 \r
287     data[invocation].f16.x   = subgroupPartitionedMaxNV(data[0].f16.x, ballot);\r
288     data[invocation].f16.xy  = subgroupPartitionedMaxNV(data[1].f16.xy, ballot);\r
289     data[invocation].f16.xyz = subgroupPartitionedMaxNV(data[2].f16.xyz, ballot);\r
290     data[invocation].f16     = subgroupPartitionedMaxNV(data[3].f16, ballot);\r
291 }\r