3 #extension GL_NV_shader_subgroup_partitioned: enable
\r
4 #extension GL_EXT_shader_subgroup_extended_types_int8: enable
\r
5 #extension GL_EXT_shader_subgroup_extended_types_int16: enable
\r
6 #extension GL_EXT_shader_subgroup_extended_types_int64: enable
\r
7 #extension GL_EXT_shader_subgroup_extended_types_float16: enable
\r
9 layout (local_size_x = 8) in;
\r
11 layout(binding = 0) buffer Buffers
\r
24 uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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