Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / spv-double-branch-to-same-block.amber
1 #!amber
2
3 # Copyright 2020 Google LLC
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 #     http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17
18 # A test for a bug found by the GraphicsFuzz project.
19
20 # Short description: Equivalent shaders, one with more complex branching
21
22 # The test passes because both shaders render the same image.
23
24 SHADER vertex reference_vertex_shader PASSTHROUGH
25
26 SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
27 ; SPIR-V
28 ; Version: 1.0
29 ; Generator: Khronos Glslang Reference Front End; 7
30 ; Bound: 381
31 ; Schema: 0
32                OpCapability Shader
33           %1 = OpExtInstImport "GLSL.std.450"
34                OpMemoryModel Logical GLSL450
35                OpEntryPoint Fragment %4 "main" %243 %369
36                OpExecutionMode %4 OriginUpperLeft
37                OpSource ESSL 320
38                OpName %4 "main"
39                OpName %12 "merge(i1;i1;i1;"
40                OpName %9 "from"
41                OpName %10 "mid"
42                OpName %11 "to"
43                OpName %14 "mergeSort("
44                OpName %16 "k"
45                OpName %18 "i"
46                OpName %20 "j"
47                OpName %41 "data"
48                OpName %52 "temp"
49                OpName %87 "i"
50                OpName %104 "low"
51                OpName %106 "high"
52                OpName %108 "m"
53                OpName %117 "i"
54                OpName %127 "from"
55                OpName %129 "mid"
56                OpName %134 "to"
57                OpName %143 "param"
58                OpName %145 "param"
59                OpName %147 "param"
60                OpName %156 "i"
61                OpName %159 "buf0"
62                OpMemberName %159 0 "injectionSwitch"
63                OpName %161 ""
64                OpName %225 "j"
65                OpName %243 "gl_FragCoord"
66                OpName %254 "grey"
67                OpName %369 "_GLF_color"
68                OpName %378 "buf1"
69                OpMemberName %378 0 "resolution"
70                OpName %380 ""
71                OpMemberDecorate %159 0 Offset 0
72                OpDecorate %159 Block
73                OpDecorate %161 DescriptorSet 0
74                OpDecorate %161 Binding 0
75                OpDecorate %243 BuiltIn FragCoord
76                OpDecorate %369 Location 0
77                OpMemberDecorate %378 0 Offset 0
78                OpDecorate %378 Block
79                OpDecorate %380 DescriptorSet 0
80                OpDecorate %380 Binding 1
81           %2 = OpTypeVoid
82           %3 = OpTypeFunction %2
83           %6 = OpTypeInt 32 1
84           %7 = OpTypePointer Function %6
85           %8 = OpTypeFunction %2 %7 %7 %7
86          %22 = OpConstant %6 1
87          %31 = OpTypeBool
88          %37 = OpTypeInt 32 0
89          %38 = OpConstant %37 10
90          %39 = OpTypeArray %6 %38
91          %40 = OpTypePointer Private %39
92          %41 = OpVariable %40 Private
93          %43 = OpTypePointer Private %6
94          %52 = OpVariable %40 Private
95          %74 = OpConstant %6 10
96         %105 = OpConstant %6 0
97         %107 = OpConstant %6 9
98         %136 = OpConstant %6 2
99         %157 = OpTypeFloat 32
100         %158 = OpTypeVector %157 2
101         %159 = OpTypeStruct %158
102         %160 = OpTypePointer Uniform %159
103         %161 = OpVariable %160 Uniform
104         %162 = OpConstant %37 0
105         %163 = OpTypePointer Uniform %157
106         %184 = OpConstant %6 4
107         %188 = OpConstant %6 3
108         %201 = OpConstant %6 -1
109         %205 = OpConstant %6 -2
110         %209 = OpConstant %6 -3
111         %213 = OpConstant %6 -4
112         %217 = OpConstant %6 -5
113         %241 = OpTypeVector %157 4
114         %242 = OpTypePointer Input %241
115         %243 = OpVariable %242 Input
116         %244 = OpConstant %37 1
117         %245 = OpTypePointer Input %157
118         %249 = OpConstant %6 30
119         %253 = OpTypePointer Function %157
120         %255 = OpConstant %157 0.5
121         %259 = OpConstant %157 10
122         %266 = OpConstant %6 60
123         %279 = OpConstant %6 90
124         %292 = OpConstant %6 120
125         %305 = OpConstant %6 150
126         %314 = OpConstant %6 180
127         %318 = OpConstant %6 5
128         %328 = OpConstant %6 210
129         %332 = OpConstant %6 6
130         %342 = OpConstant %6 240
131         %346 = OpConstant %6 7
132         %356 = OpConstant %6 270
133         %360 = OpConstant %6 8
134         %368 = OpTypePointer Output %241
135         %369 = OpVariable %368 Output
136         %371 = OpTypeVector %157 3
137         %373 = OpConstant %157 1
138         %378 = OpTypeStruct %158
139         %379 = OpTypePointer Uniform %378
140         %380 = OpVariable %379 Uniform
141           %4 = OpFunction %2 None %3
142           %5 = OpLabel
143         %156 = OpVariable %7 Function
144         %225 = OpVariable %7 Function
145         %254 = OpVariable %253 Function
146         %164 = OpAccessChain %163 %161 %105 %162
147         %165 = OpLoad %157 %164
148         %166 = OpConvertFToS %6 %165
149                OpStore %156 %166
150                OpBranch %167
151         %167 = OpLabel
152                OpLoopMerge %169 %170 None
153                OpBranch %168
154         %168 = OpLabel
155         %171 = OpLoad %6 %156
156                OpSelectionMerge %182 None
157                OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
158         %172 = OpLabel
159         %183 = OpLoad %6 %156
160         %185 = OpAccessChain %43 %41 %183
161                OpStore %185 %184
162                OpBranch %182
163         %173 = OpLabel
164         %187 = OpLoad %6 %156
165         %189 = OpAccessChain %43 %41 %187
166                OpStore %189 %188
167                OpBranch %182
168         %174 = OpLabel
169         %191 = OpLoad %6 %156
170         %192 = OpAccessChain %43 %41 %191
171                OpStore %192 %136
172                OpBranch %182
173         %175 = OpLabel
174         %194 = OpLoad %6 %156
175         %195 = OpAccessChain %43 %41 %194
176                OpStore %195 %22
177                OpBranch %182
178         %176 = OpLabel
179         %197 = OpLoad %6 %156
180         %198 = OpAccessChain %43 %41 %197
181                OpStore %198 %105
182                OpBranch %182
183         %177 = OpLabel
184         %200 = OpLoad %6 %156
185         %202 = OpAccessChain %43 %41 %200
186                OpStore %202 %201
187                OpBranch %182
188         %178 = OpLabel
189         %204 = OpLoad %6 %156
190         %206 = OpAccessChain %43 %41 %204
191                OpStore %206 %205
192                OpBranch %182
193         %179 = OpLabel
194         %208 = OpLoad %6 %156
195         %210 = OpAccessChain %43 %41 %208
196                OpStore %210 %209
197                OpBranch %182
198         %180 = OpLabel
199         %212 = OpLoad %6 %156
200         %214 = OpAccessChain %43 %41 %212
201                OpStore %214 %213
202                OpBranch %182
203         %181 = OpLabel
204         %216 = OpLoad %6 %156
205         %218 = OpAccessChain %43 %41 %216
206                OpStore %218 %217
207                OpBranch %182
208         %182 = OpLabel
209         %221 = OpLoad %6 %156
210         %222 = OpIAdd %6 %221 %22
211                OpStore %156 %222
212                OpBranch %170
213         %170 = OpLabel
214         %223 = OpLoad %6 %156
215         %224 = OpSLessThan %31 %223 %74
216                OpBranchConditional %224 %167 %169
217         %169 = OpLabel
218                OpStore %225 %105
219                OpBranch %226
220         %226 = OpLabel
221                OpLoopMerge %228 %229 None
222                OpBranch %230
223         %230 = OpLabel
224         %231 = OpLoad %6 %225
225         %232 = OpSLessThan %31 %231 %74
226                OpBranchConditional %232 %227 %228
227         %227 = OpLabel
228         %233 = OpLoad %6 %225
229         %234 = OpLoad %6 %225
230         %235 = OpAccessChain %43 %41 %234
231         %236 = OpLoad %6 %235
232         %237 = OpAccessChain %43 %52 %233
233                OpStore %237 %236
234                OpBranch %229
235         %229 = OpLabel
236         %238 = OpLoad %6 %225
237         %239 = OpIAdd %6 %238 %22
238                OpStore %225 %239
239                OpBranch %226
240         %228 = OpLabel
241         %240 = OpFunctionCall %2 %14
242         %246 = OpAccessChain %245 %243 %244
243         %247 = OpLoad %157 %246
244         %248 = OpConvertFToS %6 %247
245         %250 = OpSLessThan %31 %248 %249
246                OpSelectionMerge %252 None
247                OpBranchConditional %250 %251 %262
248         %251 = OpLabel
249         %256 = OpAccessChain %43 %41 %105
250         %257 = OpLoad %6 %256
251         %258 = OpConvertSToF %157 %257
252         %260 = OpFDiv %157 %258 %259
253         %261 = OpFAdd %157 %255 %260
254                OpStore %254 %261
255                OpBranch %252
256         %262 = OpLabel
257         %263 = OpAccessChain %245 %243 %244
258         %264 = OpLoad %157 %263
259         %265 = OpConvertFToS %6 %264
260         %267 = OpSLessThan %31 %265 %266
261                OpSelectionMerge %269 None
262                OpBranchConditional %267 %268 %275
263         %268 = OpLabel
264         %270 = OpAccessChain %43 %41 %22
265         %271 = OpLoad %6 %270
266         %272 = OpConvertSToF %157 %271
267         %273 = OpFDiv %157 %272 %259
268         %274 = OpFAdd %157 %255 %273
269                OpStore %254 %274
270                OpBranch %269
271         %275 = OpLabel
272         %276 = OpAccessChain %245 %243 %244
273         %277 = OpLoad %157 %276
274         %278 = OpConvertFToS %6 %277
275         %280 = OpSLessThan %31 %278 %279
276                OpSelectionMerge %282 None
277                OpBranchConditional %280 %281 %288
278         %281 = OpLabel
279         %283 = OpAccessChain %43 %41 %136
280         %284 = OpLoad %6 %283
281         %285 = OpConvertSToF %157 %284
282         %286 = OpFDiv %157 %285 %259
283         %287 = OpFAdd %157 %255 %286
284                OpStore %254 %287
285                OpBranch %282
286         %288 = OpLabel
287         %289 = OpAccessChain %245 %243 %244
288         %290 = OpLoad %157 %289
289         %291 = OpConvertFToS %6 %290
290         %293 = OpSLessThan %31 %291 %292
291                OpSelectionMerge %295 None
292                OpBranchConditional %293 %294 %301
293         %294 = OpLabel
294         %296 = OpAccessChain %43 %41 %188
295         %297 = OpLoad %6 %296
296         %298 = OpConvertSToF %157 %297
297         %299 = OpFDiv %157 %298 %259
298         %300 = OpFAdd %157 %255 %299
299                OpStore %254 %300
300                OpBranch %295
301         %301 = OpLabel
302         %302 = OpAccessChain %245 %243 %244
303         %303 = OpLoad %157 %302
304         %304 = OpConvertFToS %6 %303
305         %306 = OpSLessThan %31 %304 %305
306                OpSelectionMerge %308 None
307                OpBranchConditional %306 %307 %310
308         %307 = OpLabel
309                OpKill
310         %310 = OpLabel
311         %311 = OpAccessChain %245 %243 %244
312         %312 = OpLoad %157 %311
313         %313 = OpConvertFToS %6 %312
314         %315 = OpSLessThan %31 %313 %314
315                OpSelectionMerge %317 None
316                OpBranchConditional %315 %316 %324
317         %316 = OpLabel
318         %319 = OpAccessChain %43 %41 %318
319         %320 = OpLoad %6 %319
320         %321 = OpConvertSToF %157 %320
321         %322 = OpFDiv %157 %321 %259
322         %323 = OpFAdd %157 %255 %322
323                OpStore %254 %323
324                OpBranch %317
325         %324 = OpLabel
326         %325 = OpAccessChain %245 %243 %244
327         %326 = OpLoad %157 %325
328         %327 = OpConvertFToS %6 %326
329         %329 = OpSLessThan %31 %327 %328
330                OpSelectionMerge %331 None
331                OpBranchConditional %329 %330 %338
332         %330 = OpLabel
333         %333 = OpAccessChain %43 %41 %332
334         %334 = OpLoad %6 %333
335         %335 = OpConvertSToF %157 %334
336         %336 = OpFDiv %157 %335 %259
337         %337 = OpFAdd %157 %255 %336
338                OpStore %254 %337
339                OpBranch %331
340         %338 = OpLabel
341         %339 = OpAccessChain %245 %243 %244
342         %340 = OpLoad %157 %339
343         %341 = OpConvertFToS %6 %340
344         %343 = OpSLessThan %31 %341 %342
345                OpSelectionMerge %345 None
346                OpBranchConditional %343 %344 %352
347         %344 = OpLabel
348         %347 = OpAccessChain %43 %41 %346
349         %348 = OpLoad %6 %347
350         %349 = OpConvertSToF %157 %348
351         %350 = OpFDiv %157 %349 %259
352         %351 = OpFAdd %157 %255 %350
353                OpStore %254 %351
354                OpBranch %345
355         %352 = OpLabel
356         %353 = OpAccessChain %245 %243 %244
357         %354 = OpLoad %157 %353
358         %355 = OpConvertFToS %6 %354
359         %357 = OpSLessThan %31 %355 %356
360                OpSelectionMerge %359 None
361                OpBranchConditional %357 %358 %366
362         %358 = OpLabel
363         %361 = OpAccessChain %43 %41 %360
364         %362 = OpLoad %6 %361
365         %363 = OpConvertSToF %157 %362
366         %364 = OpFDiv %157 %363 %259
367         %365 = OpFAdd %157 %255 %364
368                OpStore %254 %365
369                OpBranch %359
370         %366 = OpLabel
371                OpKill
372         %359 = OpLabel
373                OpBranch %345
374         %345 = OpLabel
375                OpBranch %331
376         %331 = OpLabel
377                OpBranch %317
378         %317 = OpLabel
379                OpBranch %308
380         %308 = OpLabel
381                OpBranch %295
382         %295 = OpLabel
383                OpBranch %282
384         %282 = OpLabel
385                OpBranch %269
386         %269 = OpLabel
387                OpBranch %252
388         %252 = OpLabel
389         %370 = OpLoad %157 %254
390         %372 = OpCompositeConstruct %371 %370 %370 %370
391         %374 = OpCompositeExtract %157 %372 0
392         %375 = OpCompositeExtract %157 %372 1
393         %376 = OpCompositeExtract %157 %372 2
394         %377 = OpCompositeConstruct %241 %374 %375 %376 %373
395                OpStore %369 %377
396                OpReturn
397                OpFunctionEnd
398          %12 = OpFunction %2 None %8
399           %9 = OpFunctionParameter %7
400          %10 = OpFunctionParameter %7
401          %11 = OpFunctionParameter %7
402          %13 = OpLabel
403          %16 = OpVariable %7 Function
404          %18 = OpVariable %7 Function
405          %20 = OpVariable %7 Function
406          %87 = OpVariable %7 Function
407          %17 = OpLoad %6 %9
408                OpStore %16 %17
409          %19 = OpLoad %6 %9
410                OpStore %18 %19
411          %21 = OpLoad %6 %10
412          %23 = OpIAdd %6 %21 %22
413                OpStore %20 %23
414                OpBranch %24
415          %24 = OpLabel
416                OpLoopMerge %26 %27 None
417                OpBranch %28
418          %28 = OpLabel
419          %29 = OpLoad %6 %18
420          %30 = OpLoad %6 %10
421          %32 = OpSLessThanEqual %31 %29 %30
422          %33 = OpLoad %6 %20
423          %34 = OpLoad %6 %11
424          %35 = OpSLessThanEqual %31 %33 %34
425          %36 = OpLogicalAnd %31 %32 %35
426                OpBranchConditional %36 %25 %26
427          %25 = OpLabel
428          %42 = OpLoad %6 %18
429          %44 = OpAccessChain %43 %41 %42
430          %45 = OpLoad %6 %44
431          %46 = OpLoad %6 %20
432          %47 = OpAccessChain %43 %41 %46
433          %48 = OpLoad %6 %47
434          %49 = OpSLessThan %31 %45 %48
435                OpSelectionMerge %51 None
436                OpBranchConditional %49 %50 %60
437          %50 = OpLabel
438          %53 = OpLoad %6 %16
439          %54 = OpIAdd %6 %53 %22
440                OpStore %16 %54
441          %55 = OpLoad %6 %18
442          %56 = OpIAdd %6 %55 %22
443                OpStore %18 %56
444          %57 = OpAccessChain %43 %41 %55
445          %58 = OpLoad %6 %57
446          %59 = OpAccessChain %43 %52 %53
447                OpStore %59 %58
448                OpBranch %51
449          %60 = OpLabel
450          %61 = OpLoad %6 %16
451          %62 = OpIAdd %6 %61 %22
452                OpStore %16 %62
453          %63 = OpLoad %6 %20
454          %64 = OpIAdd %6 %63 %22
455                OpStore %20 %64
456          %65 = OpAccessChain %43 %41 %63
457          %66 = OpLoad %6 %65
458          %67 = OpAccessChain %43 %52 %61
459                OpStore %67 %66
460                OpBranch %51
461          %51 = OpLabel
462                OpBranch %27
463          %27 = OpLabel
464                OpBranch %24
465          %26 = OpLabel
466                OpBranch %68
467          %68 = OpLabel
468                OpLoopMerge %70 %71 None
469                OpBranch %72
470          %72 = OpLabel
471          %73 = OpLoad %6 %18
472          %75 = OpSLessThan %31 %73 %74
473          %76 = OpLoad %6 %18
474          %77 = OpLoad %6 %10
475          %78 = OpSLessThanEqual %31 %76 %77
476          %79 = OpLogicalAnd %31 %75 %78
477                OpBranchConditional %79 %69 %70
478          %69 = OpLabel
479          %80 = OpLoad %6 %16
480          %81 = OpIAdd %6 %80 %22
481                OpStore %16 %81
482          %82 = OpLoad %6 %18
483          %83 = OpIAdd %6 %82 %22
484                OpStore %18 %83
485          %84 = OpAccessChain %43 %41 %82
486          %85 = OpLoad %6 %84
487          %86 = OpAccessChain %43 %52 %80
488                OpStore %86 %85
489                OpBranch %71
490          %71 = OpLabel
491                OpBranch %68
492          %70 = OpLabel
493          %88 = OpLoad %6 %9
494                OpStore %87 %88
495                OpBranch %89
496          %89 = OpLabel
497                OpLoopMerge %91 %92 None
498                OpBranch %93
499          %93 = OpLabel
500          %94 = OpLoad %6 %87
501          %95 = OpLoad %6 %11
502          %96 = OpSLessThanEqual %31 %94 %95
503                OpBranchConditional %96 %90 %91
504          %90 = OpLabel
505          %97 = OpLoad %6 %87
506          %98 = OpLoad %6 %87
507          %99 = OpAccessChain %43 %52 %98
508         %100 = OpLoad %6 %99
509         %101 = OpAccessChain %43 %41 %97
510                OpStore %101 %100
511                OpBranch %92
512          %92 = OpLabel
513         %102 = OpLoad %6 %87
514         %103 = OpIAdd %6 %102 %22
515                OpStore %87 %103
516                OpBranch %89
517          %91 = OpLabel
518                OpReturn
519                OpFunctionEnd
520          %14 = OpFunction %2 None %3
521          %15 = OpLabel
522         %104 = OpVariable %7 Function
523         %106 = OpVariable %7 Function
524         %108 = OpVariable %7 Function
525         %117 = OpVariable %7 Function
526         %127 = OpVariable %7 Function
527         %129 = OpVariable %7 Function
528         %134 = OpVariable %7 Function
529         %143 = OpVariable %7 Function
530         %145 = OpVariable %7 Function
531         %147 = OpVariable %7 Function
532                OpStore %104 %105
533                OpStore %106 %107
534                OpStore %108 %22
535                OpBranch %109
536         %109 = OpLabel
537                OpLoopMerge %111 %112 None
538                OpBranch %113
539         %113 = OpLabel
540         %114 = OpLoad %6 %108
541         %115 = OpLoad %6 %106
542         %116 = OpSLessThanEqual %31 %114 %115
543                OpBranchConditional %116 %110 %111
544         %110 = OpLabel
545         %118 = OpLoad %6 %104
546                OpStore %117 %118
547                OpBranch %119
548         %119 = OpLabel
549                OpLoopMerge %121 %122 None
550                OpBranch %123
551         %123 = OpLabel
552         %124 = OpLoad %6 %117
553         %125 = OpLoad %6 %106
554         %126 = OpSLessThan %31 %124 %125
555                OpBranchConditional %126 %120 %121
556         %120 = OpLabel
557         %128 = OpLoad %6 %117
558                OpStore %127 %128
559         %130 = OpLoad %6 %117
560         %131 = OpLoad %6 %108
561         %132 = OpIAdd %6 %130 %131
562         %133 = OpISub %6 %132 %22
563                OpStore %129 %133
564         %135 = OpLoad %6 %117
565         %137 = OpLoad %6 %108
566         %138 = OpIMul %6 %136 %137
567         %139 = OpIAdd %6 %135 %138
568         %140 = OpISub %6 %139 %22
569         %141 = OpLoad %6 %106
570         %142 = OpExtInst %6 %1 SMin %140 %141
571                OpStore %134 %142
572         %144 = OpLoad %6 %127
573                OpStore %143 %144
574         %146 = OpLoad %6 %129
575                OpStore %145 %146
576         %148 = OpLoad %6 %134
577                OpStore %147 %148
578         %149 = OpFunctionCall %2 %12 %143 %145 %147
579                OpBranch %122
580         %122 = OpLabel
581         %150 = OpLoad %6 %108
582         %151 = OpIMul %6 %136 %150
583         %152 = OpLoad %6 %117
584         %153 = OpIAdd %6 %152 %151
585                OpStore %117 %153
586                OpBranch %119
587         %121 = OpLabel
588                OpBranch %112
589         %112 = OpLabel
590         %154 = OpLoad %6 %108
591         %155 = OpIMul %6 %136 %154
592                OpStore %108 %155
593                OpBranch %109
594         %111 = OpLabel
595                OpReturn
596                OpFunctionEnd
597 END
598
599 # uniforms for reference
600
601 # injectionSwitch
602 BUFFER reference_injectionSwitch DATA_TYPE vec2<float> DATA
603  0.0 1.0
604 END
605 # resolution
606 BUFFER reference_resolution DATA_TYPE vec2<float> DATA
607  256.0 256.0
608 END
609
610 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
611
612 PIPELINE graphics reference_pipeline
613   ATTACH reference_vertex_shader
614   ATTACH reference_fragment_shader
615   FRAMEBUFFER_SIZE 256 256
616   BIND BUFFER reference_framebuffer AS color LOCATION 0
617   BIND BUFFER reference_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
618   BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 1
619 END
620 CLEAR_COLOR reference_pipeline 0 0 0 255
621
622 CLEAR reference_pipeline
623 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
624
625
626 SHADER vertex variant_vertex_shader PASSTHROUGH
627
628 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
629 ; SPIR-V
630 ; Version: 1.0
631 ; Generator: Khronos Glslang Reference Front End; 7
632 ; Bound: 534
633 ; Schema: 0
634                OpCapability Shader
635           %1 = OpExtInstImport "GLSL.std.450"
636                OpMemoryModel Logical GLSL450
637                OpEntryPoint Fragment %4 "main" %243 %369
638                OpExecutionMode %4 OriginUpperLeft
639                OpSource ESSL 320
640                OpName %4 "main"
641                OpName %12 "merge(i1;i1;i1;"
642                OpName %9 "from"
643                OpName %10 "mid"
644                OpName %11 "to"
645                OpName %14 "mergeSort("
646                OpName %16 "k"
647                OpName %18 "i"
648                OpName %20 "j"
649                OpName %41 "data"
650                OpName %52 "temp"
651                OpName %87 "i"
652                OpName %104 "low"
653                OpName %106 "high"
654                OpName %108 "m"
655                OpName %117 "i"
656                OpName %127 "from"
657                OpName %129 "mid"
658                OpName %134 "to"
659                OpName %143 "param"
660                OpName %145 "param"
661                OpName %147 "param"
662                OpName %156 "i"
663                OpName %159 "buf0"
664                OpMemberName %159 0 "injectionSwitch"
665                OpName %161 ""
666                OpName %225 "j"
667                OpName %243 "gl_FragCoord"
668                OpName %254 "grey"
669                OpName %369 "_GLF_color"
670                OpName %378 "buf1"
671                OpMemberName %378 0 "resolution"
672                OpName %380 ""
673                OpMemberDecorate %159 0 Offset 0
674                OpDecorate %159 Block
675                OpDecorate %161 DescriptorSet 0
676                OpDecorate %161 Binding 0
677                OpDecorate %243 BuiltIn FragCoord
678                OpDecorate %369 Location 0
679                OpMemberDecorate %378 0 Offset 0
680                OpDecorate %378 Block
681                OpDecorate %380 DescriptorSet 0
682                OpDecorate %380 Binding 1
683           %2 = OpTypeVoid
684           %3 = OpTypeFunction %2
685           %6 = OpTypeInt 32 1
686           %7 = OpTypePointer Function %6
687           %8 = OpTypeFunction %2 %7 %7 %7
688          %22 = OpConstant %6 1
689          %31 = OpTypeBool
690          %37 = OpTypeInt 32 0
691          %38 = OpConstant %37 10
692          %39 = OpTypeArray %6 %38
693          %40 = OpTypePointer Private %39
694          %41 = OpVariable %40 Private
695          %43 = OpTypePointer Private %6
696          %52 = OpVariable %40 Private
697          %74 = OpConstant %6 10
698         %105 = OpConstant %6 0
699         %107 = OpConstant %6 9
700         %136 = OpConstant %6 2
701         %157 = OpTypeFloat 32
702         %158 = OpTypeVector %157 2
703         %159 = OpTypeStruct %158
704         %160 = OpTypePointer Uniform %159
705         %161 = OpVariable %160 Uniform
706         %162 = OpConstant %37 0
707         %163 = OpTypePointer Uniform %157
708         %184 = OpConstant %6 4
709         %188 = OpConstant %6 3
710         %201 = OpConstant %6 -1
711         %205 = OpConstant %6 -2
712         %209 = OpConstant %6 -3
713         %213 = OpConstant %6 -4
714         %217 = OpConstant %6 -5
715         %241 = OpTypeVector %157 4
716         %242 = OpTypePointer Input %241
717         %243 = OpVariable %242 Input
718         %244 = OpConstant %37 1
719         %245 = OpTypePointer Input %157
720         %249 = OpConstant %6 30
721         %253 = OpTypePointer Function %157
722         %255 = OpConstant %157 0.5
723         %259 = OpConstant %157 10
724         %266 = OpConstant %6 60
725         %279 = OpConstant %6 90
726         %292 = OpConstant %6 120
727         %305 = OpConstant %6 150
728         %314 = OpConstant %6 180
729         %318 = OpConstant %6 5
730         %328 = OpConstant %6 210
731         %332 = OpConstant %6 6
732         %342 = OpConstant %6 240
733         %346 = OpConstant %6 7
734         %356 = OpConstant %6 270
735         %360 = OpConstant %6 8
736         %368 = OpTypePointer Output %241
737         %369 = OpVariable %368 Output
738         %371 = OpTypeVector %157 3
739         %373 = OpConstant %157 1
740         %378 = OpTypeStruct %158
741         %379 = OpTypePointer Uniform %378
742         %380 = OpVariable %379 Uniform
743         %533 = OpConstantTrue %31
744           %4 = OpFunction %2 None %3
745           %5 = OpLabel
746         %156 = OpVariable %7 Function
747         %225 = OpVariable %7 Function
748         %254 = OpVariable %253 Function
749         %164 = OpAccessChain %163 %161 %105 %162
750         %165 = OpLoad %157 %164
751         %166 = OpConvertFToS %6 %165
752                OpStore %156 %166
753                OpBranch %167
754         %167 = OpLabel
755                OpLoopMerge %169 %170 None
756                OpBranch %168
757         %168 = OpLabel
758         %171 = OpLoad %6 %156
759                OpSelectionMerge %182 None
760                OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
761         %172 = OpLabel
762         %183 = OpLoad %6 %156
763         %185 = OpAccessChain %43 %41 %183
764                OpStore %185 %184
765                OpBranch %182
766         %173 = OpLabel
767         %187 = OpLoad %6 %156
768         %189 = OpAccessChain %43 %41 %187
769                OpStore %189 %188
770                OpBranch %182
771         %174 = OpLabel
772         %191 = OpLoad %6 %156
773         %192 = OpAccessChain %43 %41 %191
774                OpStore %192 %136
775                OpBranch %182
776         %175 = OpLabel
777         %194 = OpLoad %6 %156
778         %195 = OpAccessChain %43 %41 %194
779                OpStore %195 %22
780                OpBranch %182
781         %176 = OpLabel
782         %197 = OpLoad %6 %156
783         %198 = OpAccessChain %43 %41 %197
784                OpStore %198 %105
785                OpBranch %182
786         %177 = OpLabel
787         %200 = OpLoad %6 %156
788         %202 = OpAccessChain %43 %41 %200
789                OpStore %202 %201
790                OpBranch %182
791         %178 = OpLabel
792         %204 = OpLoad %6 %156
793         %206 = OpAccessChain %43 %41 %204
794                OpStore %206 %205
795                OpBranch %182
796         %179 = OpLabel
797         %208 = OpLoad %6 %156
798         %210 = OpAccessChain %43 %41 %208
799                OpStore %210 %209
800                OpBranch %182
801         %180 = OpLabel
802         %212 = OpLoad %6 %156
803         %214 = OpAccessChain %43 %41 %212
804                OpStore %214 %213
805                OpBranch %182
806         %181 = OpLabel
807         %216 = OpLoad %6 %156
808         %218 = OpAccessChain %43 %41 %216
809                OpStore %218 %217
810                OpBranchConditional %533 %182 %170
811         %182 = OpLabel
812         %221 = OpLoad %6 %156
813         %222 = OpIAdd %6 %221 %22
814                OpStore %156 %222
815                OpBranchConditional %533 %170 %170
816         %170 = OpLabel
817         %223 = OpLoad %6 %156
818         %224 = OpSLessThan %31 %223 %74
819                OpBranchConditional %224 %167 %169
820         %169 = OpLabel
821                OpStore %225 %105
822                OpBranch %226
823         %226 = OpLabel
824                OpLoopMerge %228 %229 None
825                OpBranch %230
826         %230 = OpLabel
827         %231 = OpLoad %6 %225
828         %232 = OpSLessThan %31 %231 %74
829                OpBranchConditional %232 %227 %228
830         %227 = OpLabel
831         %233 = OpLoad %6 %225
832         %234 = OpLoad %6 %225
833         %235 = OpAccessChain %43 %41 %234
834         %236 = OpLoad %6 %235
835         %237 = OpAccessChain %43 %52 %233
836                OpStore %237 %236
837                OpBranch %229
838         %229 = OpLabel
839         %238 = OpLoad %6 %225
840         %239 = OpIAdd %6 %238 %22
841                OpStore %225 %239
842                OpBranch %226
843         %228 = OpLabel
844         %240 = OpFunctionCall %2 %14
845         %246 = OpAccessChain %245 %243 %244
846         %247 = OpLoad %157 %246
847         %248 = OpConvertFToS %6 %247
848         %250 = OpSLessThan %31 %248 %249
849                OpSelectionMerge %252 None
850                OpBranchConditional %250 %251 %262
851         %251 = OpLabel
852         %256 = OpAccessChain %43 %41 %105
853         %257 = OpLoad %6 %256
854         %258 = OpConvertSToF %157 %257
855         %260 = OpFDiv %157 %258 %259
856         %261 = OpFAdd %157 %255 %260
857                OpStore %254 %261
858                OpBranch %252
859         %262 = OpLabel
860         %263 = OpAccessChain %245 %243 %244
861         %264 = OpLoad %157 %263
862         %265 = OpConvertFToS %6 %264
863         %267 = OpSLessThan %31 %265 %266
864                OpSelectionMerge %269 None
865                OpBranchConditional %267 %268 %275
866         %268 = OpLabel
867         %270 = OpAccessChain %43 %41 %22
868         %271 = OpLoad %6 %270
869         %272 = OpConvertSToF %157 %271
870         %273 = OpFDiv %157 %272 %259
871         %274 = OpFAdd %157 %255 %273
872                OpStore %254 %274
873                OpBranch %269
874         %275 = OpLabel
875         %276 = OpAccessChain %245 %243 %244
876         %277 = OpLoad %157 %276
877         %278 = OpConvertFToS %6 %277
878         %280 = OpSLessThan %31 %278 %279
879                OpSelectionMerge %282 None
880                OpBranchConditional %280 %281 %288
881         %281 = OpLabel
882         %283 = OpAccessChain %43 %41 %136
883         %284 = OpLoad %6 %283
884         %285 = OpConvertSToF %157 %284
885         %286 = OpFDiv %157 %285 %259
886         %287 = OpFAdd %157 %255 %286
887                OpStore %254 %287
888                OpBranch %282
889         %288 = OpLabel
890         %289 = OpAccessChain %245 %243 %244
891         %290 = OpLoad %157 %289
892         %291 = OpConvertFToS %6 %290
893         %293 = OpSLessThan %31 %291 %292
894                OpSelectionMerge %295 None
895                OpBranchConditional %293 %294 %301
896         %294 = OpLabel
897         %296 = OpAccessChain %43 %41 %188
898         %297 = OpLoad %6 %296
899         %298 = OpConvertSToF %157 %297
900         %299 = OpFDiv %157 %298 %259
901         %300 = OpFAdd %157 %255 %299
902                OpStore %254 %300
903                OpBranch %295
904         %301 = OpLabel
905         %302 = OpAccessChain %245 %243 %244
906         %303 = OpLoad %157 %302
907         %304 = OpConvertFToS %6 %303
908         %306 = OpSLessThan %31 %304 %305
909                OpSelectionMerge %308 None
910                OpBranchConditional %306 %307 %310
911         %307 = OpLabel
912                OpKill
913         %310 = OpLabel
914         %311 = OpAccessChain %245 %243 %244
915         %312 = OpLoad %157 %311
916         %313 = OpConvertFToS %6 %312
917         %315 = OpSLessThan %31 %313 %314
918                OpSelectionMerge %317 None
919                OpBranchConditional %315 %316 %324
920         %316 = OpLabel
921         %319 = OpAccessChain %43 %41 %318
922         %320 = OpLoad %6 %319
923         %321 = OpConvertSToF %157 %320
924         %322 = OpFDiv %157 %321 %259
925         %323 = OpFAdd %157 %255 %322
926                OpStore %254 %323
927                OpBranch %317
928         %324 = OpLabel
929         %325 = OpAccessChain %245 %243 %244
930         %326 = OpLoad %157 %325
931         %327 = OpConvertFToS %6 %326
932         %329 = OpSLessThan %31 %327 %328
933                OpSelectionMerge %331 None
934                OpBranchConditional %329 %330 %338
935         %330 = OpLabel
936         %333 = OpAccessChain %43 %41 %332
937         %334 = OpLoad %6 %333
938         %335 = OpConvertSToF %157 %334
939         %336 = OpFDiv %157 %335 %259
940         %337 = OpFAdd %157 %255 %336
941                OpStore %254 %337
942                OpBranch %331
943         %338 = OpLabel
944         %339 = OpAccessChain %245 %243 %244
945         %340 = OpLoad %157 %339
946         %341 = OpConvertFToS %6 %340
947         %343 = OpSLessThan %31 %341 %342
948                OpSelectionMerge %345 None
949                OpBranchConditional %343 %344 %352
950         %344 = OpLabel
951         %347 = OpAccessChain %43 %41 %346
952         %348 = OpLoad %6 %347
953         %349 = OpConvertSToF %157 %348
954         %350 = OpFDiv %157 %349 %259
955         %351 = OpFAdd %157 %255 %350
956                OpStore %254 %351
957                OpBranch %345
958         %352 = OpLabel
959         %353 = OpAccessChain %245 %243 %244
960         %354 = OpLoad %157 %353
961         %355 = OpConvertFToS %6 %354
962         %357 = OpSLessThan %31 %355 %356
963                OpSelectionMerge %359 None
964                OpBranchConditional %357 %358 %366
965         %358 = OpLabel
966         %361 = OpAccessChain %43 %41 %360
967         %362 = OpLoad %6 %361
968         %363 = OpConvertSToF %157 %362
969         %364 = OpFDiv %157 %363 %259
970         %365 = OpFAdd %157 %255 %364
971                OpStore %254 %365
972                OpBranch %359
973         %366 = OpLabel
974                OpKill
975         %359 = OpLabel
976                OpBranch %345
977         %345 = OpLabel
978                OpBranch %331
979         %331 = OpLabel
980                OpBranch %317
981         %317 = OpLabel
982                OpBranch %308
983         %308 = OpLabel
984                OpBranch %295
985         %295 = OpLabel
986                OpBranch %282
987         %282 = OpLabel
988                OpBranch %269
989         %269 = OpLabel
990                OpBranch %252
991         %252 = OpLabel
992         %370 = OpLoad %157 %254
993         %372 = OpCompositeConstruct %371 %370 %370 %370
994         %374 = OpCompositeExtract %157 %372 0
995         %375 = OpCompositeExtract %157 %372 1
996         %376 = OpCompositeExtract %157 %372 2
997         %377 = OpCompositeConstruct %241 %374 %375 %376 %373
998                OpStore %369 %377
999                OpReturn
1000                OpFunctionEnd
1001          %12 = OpFunction %2 None %8
1002           %9 = OpFunctionParameter %7
1003          %10 = OpFunctionParameter %7
1004          %11 = OpFunctionParameter %7
1005          %13 = OpLabel
1006          %16 = OpVariable %7 Function
1007          %18 = OpVariable %7 Function
1008          %20 = OpVariable %7 Function
1009          %87 = OpVariable %7 Function
1010          %17 = OpLoad %6 %9
1011                OpStore %16 %17
1012          %19 = OpLoad %6 %9
1013                OpStore %18 %19
1014          %21 = OpLoad %6 %10
1015          %23 = OpIAdd %6 %21 %22
1016                OpStore %20 %23
1017                OpBranch %24
1018          %24 = OpLabel
1019                OpLoopMerge %26 %27 None
1020                OpBranch %28
1021          %28 = OpLabel
1022          %29 = OpLoad %6 %18
1023          %30 = OpLoad %6 %10
1024          %32 = OpSLessThanEqual %31 %29 %30
1025          %33 = OpLoad %6 %20
1026          %34 = OpLoad %6 %11
1027          %35 = OpSLessThanEqual %31 %33 %34
1028          %36 = OpLogicalAnd %31 %32 %35
1029                OpBranchConditional %36 %25 %26
1030          %25 = OpLabel
1031          %42 = OpLoad %6 %18
1032          %44 = OpAccessChain %43 %41 %42
1033          %45 = OpLoad %6 %44
1034          %46 = OpLoad %6 %20
1035          %47 = OpAccessChain %43 %41 %46
1036          %48 = OpLoad %6 %47
1037          %49 = OpSLessThan %31 %45 %48
1038                OpSelectionMerge %51 None
1039                OpBranchConditional %49 %50 %60
1040          %50 = OpLabel
1041          %53 = OpLoad %6 %16
1042          %54 = OpIAdd %6 %53 %22
1043                OpStore %16 %54
1044          %55 = OpLoad %6 %18
1045          %56 = OpIAdd %6 %55 %22
1046                OpStore %18 %56
1047          %57 = OpAccessChain %43 %41 %55
1048          %58 = OpLoad %6 %57
1049          %59 = OpAccessChain %43 %52 %53
1050                OpStore %59 %58
1051                OpBranch %51
1052          %60 = OpLabel
1053          %61 = OpLoad %6 %16
1054          %62 = OpIAdd %6 %61 %22
1055                OpStore %16 %62
1056          %63 = OpLoad %6 %20
1057          %64 = OpIAdd %6 %63 %22
1058                OpStore %20 %64
1059          %65 = OpAccessChain %43 %41 %63
1060          %66 = OpLoad %6 %65
1061          %67 = OpAccessChain %43 %52 %61
1062                OpStore %67 %66
1063                OpBranch %51
1064          %51 = OpLabel
1065                OpBranch %27
1066          %27 = OpLabel
1067                OpBranch %24
1068          %26 = OpLabel
1069                OpBranch %68
1070          %68 = OpLabel
1071                OpLoopMerge %70 %71 None
1072                OpBranch %72
1073          %72 = OpLabel
1074          %73 = OpLoad %6 %18
1075          %75 = OpSLessThan %31 %73 %74
1076          %76 = OpLoad %6 %18
1077          %77 = OpLoad %6 %10
1078          %78 = OpSLessThanEqual %31 %76 %77
1079          %79 = OpLogicalAnd %31 %75 %78
1080                OpBranchConditional %79 %69 %70
1081          %69 = OpLabel
1082          %80 = OpLoad %6 %16
1083          %81 = OpIAdd %6 %80 %22
1084                OpStore %16 %81
1085          %82 = OpLoad %6 %18
1086          %83 = OpIAdd %6 %82 %22
1087                OpStore %18 %83
1088          %84 = OpAccessChain %43 %41 %82
1089          %85 = OpLoad %6 %84
1090          %86 = OpAccessChain %43 %52 %80
1091                OpStore %86 %85
1092                OpBranch %71
1093          %71 = OpLabel
1094                OpBranch %68
1095          %70 = OpLabel
1096          %88 = OpLoad %6 %9
1097                OpStore %87 %88
1098                OpBranch %89
1099          %89 = OpLabel
1100                OpLoopMerge %91 %92 None
1101                OpBranch %93
1102          %93 = OpLabel
1103          %94 = OpLoad %6 %87
1104          %95 = OpLoad %6 %11
1105          %96 = OpSLessThanEqual %31 %94 %95
1106                OpBranchConditional %96 %90 %91
1107          %90 = OpLabel
1108          %97 = OpLoad %6 %87
1109          %98 = OpLoad %6 %87
1110          %99 = OpAccessChain %43 %52 %98
1111         %100 = OpLoad %6 %99
1112         %101 = OpAccessChain %43 %41 %97
1113                OpStore %101 %100
1114                OpBranch %92
1115          %92 = OpLabel
1116         %102 = OpLoad %6 %87
1117         %103 = OpIAdd %6 %102 %22
1118                OpStore %87 %103
1119                OpBranch %89
1120          %91 = OpLabel
1121                OpReturn
1122                OpFunctionEnd
1123          %14 = OpFunction %2 None %3
1124          %15 = OpLabel
1125         %104 = OpVariable %7 Function
1126         %106 = OpVariable %7 Function
1127         %108 = OpVariable %7 Function
1128         %117 = OpVariable %7 Function
1129         %127 = OpVariable %7 Function
1130         %129 = OpVariable %7 Function
1131         %134 = OpVariable %7 Function
1132         %143 = OpVariable %7 Function
1133         %145 = OpVariable %7 Function
1134         %147 = OpVariable %7 Function
1135                OpStore %104 %105
1136                OpStore %106 %107
1137                OpStore %108 %22
1138                OpBranch %109
1139         %109 = OpLabel
1140                OpLoopMerge %111 %112 None
1141                OpBranch %113
1142         %113 = OpLabel
1143         %114 = OpLoad %6 %108
1144         %115 = OpLoad %6 %106
1145         %116 = OpSLessThanEqual %31 %114 %115
1146                OpBranchConditional %116 %110 %111
1147         %110 = OpLabel
1148         %118 = OpLoad %6 %104
1149                OpStore %117 %118
1150                OpBranch %119
1151         %119 = OpLabel
1152                OpLoopMerge %121 %122 None
1153                OpBranch %123
1154         %123 = OpLabel
1155         %124 = OpLoad %6 %117
1156         %125 = OpLoad %6 %106
1157         %126 = OpSLessThan %31 %124 %125
1158                OpBranchConditional %126 %120 %121
1159         %120 = OpLabel
1160         %128 = OpLoad %6 %117
1161                OpStore %127 %128
1162         %130 = OpLoad %6 %117
1163         %131 = OpLoad %6 %108
1164         %132 = OpIAdd %6 %130 %131
1165         %133 = OpISub %6 %132 %22
1166                OpStore %129 %133
1167         %135 = OpLoad %6 %117
1168         %137 = OpLoad %6 %108
1169         %138 = OpIMul %6 %136 %137
1170         %139 = OpIAdd %6 %135 %138
1171         %140 = OpISub %6 %139 %22
1172         %141 = OpLoad %6 %106
1173         %142 = OpExtInst %6 %1 SMin %140 %141
1174                OpStore %134 %142
1175         %144 = OpLoad %6 %127
1176                OpStore %143 %144
1177         %146 = OpLoad %6 %129
1178                OpStore %145 %146
1179         %148 = OpLoad %6 %134
1180                OpStore %147 %148
1181         %149 = OpFunctionCall %2 %12 %143 %145 %147
1182                OpBranch %122
1183         %122 = OpLabel
1184         %150 = OpLoad %6 %108
1185         %151 = OpIMul %6 %136 %150
1186         %152 = OpLoad %6 %117
1187         %153 = OpIAdd %6 %152 %151
1188                OpStore %117 %153
1189                OpBranch %119
1190         %121 = OpLabel
1191                OpBranch %112
1192         %112 = OpLabel
1193         %154 = OpLoad %6 %108
1194         %155 = OpIMul %6 %136 %154
1195                OpStore %108 %155
1196                OpBranch %109
1197         %111 = OpLabel
1198                OpReturn
1199                OpFunctionEnd
1200 END
1201
1202 # uniforms for variant
1203
1204 # injectionSwitch
1205 BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
1206  0.0 1.0
1207 END
1208 # resolution
1209 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
1210  256.0 256.0
1211 END
1212
1213 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1214
1215 PIPELINE graphics variant_pipeline
1216   ATTACH variant_vertex_shader
1217   ATTACH variant_fragment_shader
1218   FRAMEBUFFER_SIZE 256 256
1219   BIND BUFFER variant_framebuffer AS color LOCATION 0
1220   BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
1221   BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 1
1222 END
1223 CLEAR_COLOR variant_pipeline 0 0 0 255
1224
1225 CLEAR variant_pipeline
1226 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
1227
1228 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005