Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / spv-stable-mergesort-flatten-selection-dead-continues.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: Shaders diff: selection %25 flattened; dead continues
21
22 # The test renders three images using semantically equivalent shaders, and then
23 # checks that the images are similar.
24 # The test passes because the shaders have the same semantics and so the images
25 # should be the same.
26
27 SHADER vertex reference_vertex_shader PASSTHROUGH
28
29 SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
30 ; SPIR-V
31 ; Version: 1.0
32 ; Generator: Khronos Glslang Reference Front End; 7
33 ; Bound: 378
34 ; Schema: 0
35                OpCapability Shader
36           %1 = OpExtInstImport "GLSL.std.450"
37                OpMemoryModel Logical GLSL450
38                OpEntryPoint Fragment %4 "main" %243 %369
39                OpExecutionMode %4 OriginUpperLeft
40                OpSource ESSL 320
41                OpName %4 "main"
42                OpName %12 "merge(i1;i1;i1;"
43                OpName %9 "from"
44                OpName %10 "mid"
45                OpName %11 "to"
46                OpName %14 "mergeSort("
47                OpName %16 "k"
48                OpName %18 "i"
49                OpName %20 "j"
50                OpName %41 "data"
51                OpName %52 "temp"
52                OpName %87 "i"
53                OpName %104 "low"
54                OpName %106 "high"
55                OpName %108 "m"
56                OpName %117 "i"
57                OpName %127 "from"
58                OpName %129 "mid"
59                OpName %134 "to"
60                OpName %143 "param"
61                OpName %145 "param"
62                OpName %147 "param"
63                OpName %156 "i"
64                OpName %159 "buf0"
65                OpMemberName %159 0 "injectionSwitch"
66                OpName %161 ""
67                OpName %225 "j"
68                OpName %243 "gl_FragCoord"
69                OpName %254 "grey"
70                OpName %369 "_GLF_color"
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           %2 = OpTypeVoid
78           %3 = OpTypeFunction %2
79           %6 = OpTypeInt 32 1
80           %7 = OpTypePointer Function %6
81           %8 = OpTypeFunction %2 %7 %7 %7
82          %22 = OpConstant %6 1
83          %31 = OpTypeBool
84          %37 = OpTypeInt 32 0
85          %38 = OpConstant %37 10
86          %39 = OpTypeArray %6 %38
87          %40 = OpTypePointer Private %39
88          %41 = OpVariable %40 Private
89          %43 = OpTypePointer Private %6
90          %52 = OpVariable %40 Private
91          %74 = OpConstant %6 10
92         %105 = OpConstant %6 0
93         %107 = OpConstant %6 9
94         %136 = OpConstant %6 2
95         %157 = OpTypeFloat 32
96         %158 = OpTypeVector %157 2
97         %159 = OpTypeStruct %158
98         %160 = OpTypePointer Uniform %159
99         %161 = OpVariable %160 Uniform
100         %162 = OpConstant %37 0
101         %163 = OpTypePointer Uniform %157
102         %184 = OpConstant %6 4
103         %188 = OpConstant %6 3
104         %201 = OpConstant %6 -1
105         %205 = OpConstant %6 -2
106         %209 = OpConstant %6 -3
107         %213 = OpConstant %6 -4
108         %217 = OpConstant %6 -5
109         %241 = OpTypeVector %157 4
110         %242 = OpTypePointer Input %241
111         %243 = OpVariable %242 Input
112         %244 = OpConstant %37 1
113         %245 = OpTypePointer Input %157
114         %249 = OpConstant %6 30
115         %253 = OpTypePointer Function %157
116         %255 = OpConstant %157 0.5
117         %259 = OpConstant %157 10
118         %266 = OpConstant %6 60
119         %279 = OpConstant %6 90
120         %292 = OpConstant %6 120
121         %305 = OpConstant %6 150
122         %314 = OpConstant %6 180
123         %318 = OpConstant %6 5
124         %328 = OpConstant %6 210
125         %332 = OpConstant %6 6
126         %342 = OpConstant %6 240
127         %346 = OpConstant %6 7
128         %356 = OpConstant %6 270
129         %360 = OpConstant %6 8
130         %368 = OpTypePointer Output %241
131         %369 = OpVariable %368 Output
132         %371 = OpTypeVector %157 3
133         %373 = OpConstant %157 1
134           %4 = OpFunction %2 None %3
135           %5 = OpLabel
136         %156 = OpVariable %7 Function
137         %225 = OpVariable %7 Function
138         %254 = OpVariable %253 Function
139         %164 = OpAccessChain %163 %161 %105 %162
140         %165 = OpLoad %157 %164
141         %166 = OpConvertFToS %6 %165
142                OpStore %156 %166
143                OpBranch %167
144         %167 = OpLabel
145                OpLoopMerge %169 %170 None
146                OpBranch %168
147         %168 = OpLabel
148         %171 = OpLoad %6 %156
149                OpSelectionMerge %182 None
150                OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
151         %172 = OpLabel
152         %183 = OpLoad %6 %156
153         %185 = OpAccessChain %43 %41 %183
154                OpStore %185 %184
155                OpBranch %182
156         %173 = OpLabel
157         %187 = OpLoad %6 %156
158         %189 = OpAccessChain %43 %41 %187
159                OpStore %189 %188
160                OpBranch %182
161         %174 = OpLabel
162         %191 = OpLoad %6 %156
163         %192 = OpAccessChain %43 %41 %191
164                OpStore %192 %136
165                OpBranch %182
166         %175 = OpLabel
167         %194 = OpLoad %6 %156
168         %195 = OpAccessChain %43 %41 %194
169                OpStore %195 %22
170                OpBranch %182
171         %176 = OpLabel
172         %197 = OpLoad %6 %156
173         %198 = OpAccessChain %43 %41 %197
174                OpStore %198 %105
175                OpBranch %182
176         %177 = OpLabel
177         %200 = OpLoad %6 %156
178         %202 = OpAccessChain %43 %41 %200
179                OpStore %202 %201
180                OpBranch %182
181         %178 = OpLabel
182         %204 = OpLoad %6 %156
183         %206 = OpAccessChain %43 %41 %204
184                OpStore %206 %205
185                OpBranch %182
186         %179 = OpLabel
187         %208 = OpLoad %6 %156
188         %210 = OpAccessChain %43 %41 %208
189                OpStore %210 %209
190                OpBranch %182
191         %180 = OpLabel
192         %212 = OpLoad %6 %156
193         %214 = OpAccessChain %43 %41 %212
194                OpStore %214 %213
195                OpBranch %182
196         %181 = OpLabel
197         %216 = OpLoad %6 %156
198         %218 = OpAccessChain %43 %41 %216
199                OpStore %218 %217
200                OpBranch %182
201         %182 = OpLabel
202         %221 = OpLoad %6 %156
203         %222 = OpIAdd %6 %221 %22
204                OpStore %156 %222
205                OpBranch %170
206         %170 = OpLabel
207         %223 = OpLoad %6 %156
208         %224 = OpSLessThan %31 %223 %74
209                OpBranchConditional %224 %167 %169
210         %169 = OpLabel
211                OpStore %225 %105
212                OpBranch %226
213         %226 = OpLabel
214                OpLoopMerge %228 %229 None
215                OpBranch %230
216         %230 = OpLabel
217         %231 = OpLoad %6 %225
218         %232 = OpSLessThan %31 %231 %74
219                OpBranchConditional %232 %227 %228
220         %227 = OpLabel
221         %233 = OpLoad %6 %225
222         %234 = OpLoad %6 %225
223         %235 = OpAccessChain %43 %41 %234
224         %236 = OpLoad %6 %235
225         %237 = OpAccessChain %43 %52 %233
226                OpStore %237 %236
227                OpBranch %229
228         %229 = OpLabel
229         %238 = OpLoad %6 %225
230         %239 = OpIAdd %6 %238 %22
231                OpStore %225 %239
232                OpBranch %226
233         %228 = OpLabel
234         %240 = OpFunctionCall %2 %14
235         %246 = OpAccessChain %245 %243 %244
236         %247 = OpLoad %157 %246
237         %248 = OpConvertFToS %6 %247
238         %250 = OpSLessThan %31 %248 %249
239                OpSelectionMerge %252 None
240                OpBranchConditional %250 %251 %262
241         %251 = OpLabel
242         %256 = OpAccessChain %43 %41 %105
243         %257 = OpLoad %6 %256
244         %258 = OpConvertSToF %157 %257
245         %260 = OpFDiv %157 %258 %259
246         %261 = OpFAdd %157 %255 %260
247                OpStore %254 %261
248                OpBranch %252
249         %262 = OpLabel
250         %263 = OpAccessChain %245 %243 %244
251         %264 = OpLoad %157 %263
252         %265 = OpConvertFToS %6 %264
253         %267 = OpSLessThan %31 %265 %266
254                OpSelectionMerge %269 None
255                OpBranchConditional %267 %268 %275
256         %268 = OpLabel
257         %270 = OpAccessChain %43 %41 %22
258         %271 = OpLoad %6 %270
259         %272 = OpConvertSToF %157 %271
260         %273 = OpFDiv %157 %272 %259
261         %274 = OpFAdd %157 %255 %273
262                OpStore %254 %274
263                OpBranch %269
264         %275 = OpLabel
265         %276 = OpAccessChain %245 %243 %244
266         %277 = OpLoad %157 %276
267         %278 = OpConvertFToS %6 %277
268         %280 = OpSLessThan %31 %278 %279
269                OpSelectionMerge %282 None
270                OpBranchConditional %280 %281 %288
271         %281 = OpLabel
272         %283 = OpAccessChain %43 %41 %136
273         %284 = OpLoad %6 %283
274         %285 = OpConvertSToF %157 %284
275         %286 = OpFDiv %157 %285 %259
276         %287 = OpFAdd %157 %255 %286
277                OpStore %254 %287
278                OpBranch %282
279         %288 = OpLabel
280         %289 = OpAccessChain %245 %243 %244
281         %290 = OpLoad %157 %289
282         %291 = OpConvertFToS %6 %290
283         %293 = OpSLessThan %31 %291 %292
284                OpSelectionMerge %295 None
285                OpBranchConditional %293 %294 %301
286         %294 = OpLabel
287         %296 = OpAccessChain %43 %41 %188
288         %297 = OpLoad %6 %296
289         %298 = OpConvertSToF %157 %297
290         %299 = OpFDiv %157 %298 %259
291         %300 = OpFAdd %157 %255 %299
292                OpStore %254 %300
293                OpBranch %295
294         %301 = OpLabel
295         %302 = OpAccessChain %245 %243 %244
296         %303 = OpLoad %157 %302
297         %304 = OpConvertFToS %6 %303
298         %306 = OpSLessThan %31 %304 %305
299                OpSelectionMerge %308 None
300                OpBranchConditional %306 %307 %310
301         %307 = OpLabel
302                OpKill
303         %310 = OpLabel
304         %311 = OpAccessChain %245 %243 %244
305         %312 = OpLoad %157 %311
306         %313 = OpConvertFToS %6 %312
307         %315 = OpSLessThan %31 %313 %314
308                OpSelectionMerge %317 None
309                OpBranchConditional %315 %316 %324
310         %316 = OpLabel
311         %319 = OpAccessChain %43 %41 %318
312         %320 = OpLoad %6 %319
313         %321 = OpConvertSToF %157 %320
314         %322 = OpFDiv %157 %321 %259
315         %323 = OpFAdd %157 %255 %322
316                OpStore %254 %323
317                OpBranch %317
318         %324 = OpLabel
319         %325 = OpAccessChain %245 %243 %244
320         %326 = OpLoad %157 %325
321         %327 = OpConvertFToS %6 %326
322         %329 = OpSLessThan %31 %327 %328
323                OpSelectionMerge %331 None
324                OpBranchConditional %329 %330 %338
325         %330 = OpLabel
326         %333 = OpAccessChain %43 %41 %332
327         %334 = OpLoad %6 %333
328         %335 = OpConvertSToF %157 %334
329         %336 = OpFDiv %157 %335 %259
330         %337 = OpFAdd %157 %255 %336
331                OpStore %254 %337
332                OpBranch %331
333         %338 = OpLabel
334         %339 = OpAccessChain %245 %243 %244
335         %340 = OpLoad %157 %339
336         %341 = OpConvertFToS %6 %340
337         %343 = OpSLessThan %31 %341 %342
338                OpSelectionMerge %345 None
339                OpBranchConditional %343 %344 %352
340         %344 = OpLabel
341         %347 = OpAccessChain %43 %41 %346
342         %348 = OpLoad %6 %347
343         %349 = OpConvertSToF %157 %348
344         %350 = OpFDiv %157 %349 %259
345         %351 = OpFAdd %157 %255 %350
346                OpStore %254 %351
347                OpBranch %345
348         %352 = OpLabel
349         %353 = OpAccessChain %245 %243 %244
350         %354 = OpLoad %157 %353
351         %355 = OpConvertFToS %6 %354
352         %357 = OpSLessThan %31 %355 %356
353                OpSelectionMerge %359 None
354                OpBranchConditional %357 %358 %366
355         %358 = OpLabel
356         %361 = OpAccessChain %43 %41 %360
357         %362 = OpLoad %6 %361
358         %363 = OpConvertSToF %157 %362
359         %364 = OpFDiv %157 %363 %259
360         %365 = OpFAdd %157 %255 %364
361                OpStore %254 %365
362                OpBranch %359
363         %366 = OpLabel
364                OpKill
365         %359 = OpLabel
366                OpBranch %345
367         %345 = OpLabel
368                OpBranch %331
369         %331 = OpLabel
370                OpBranch %317
371         %317 = OpLabel
372                OpBranch %308
373         %308 = OpLabel
374                OpBranch %295
375         %295 = OpLabel
376                OpBranch %282
377         %282 = OpLabel
378                OpBranch %269
379         %269 = OpLabel
380                OpBranch %252
381         %252 = OpLabel
382         %370 = OpLoad %157 %254
383         %372 = OpCompositeConstruct %371 %370 %370 %370
384         %374 = OpCompositeExtract %157 %372 0
385         %375 = OpCompositeExtract %157 %372 1
386         %376 = OpCompositeExtract %157 %372 2
387         %377 = OpCompositeConstruct %241 %374 %375 %376 %373
388                OpStore %369 %377
389                OpReturn
390                OpFunctionEnd
391          %12 = OpFunction %2 None %8
392           %9 = OpFunctionParameter %7
393          %10 = OpFunctionParameter %7
394          %11 = OpFunctionParameter %7
395          %13 = OpLabel
396          %16 = OpVariable %7 Function
397          %18 = OpVariable %7 Function
398          %20 = OpVariable %7 Function
399          %87 = OpVariable %7 Function
400          %17 = OpLoad %6 %9
401                OpStore %16 %17
402          %19 = OpLoad %6 %9
403                OpStore %18 %19
404          %21 = OpLoad %6 %10
405          %23 = OpIAdd %6 %21 %22
406                OpStore %20 %23
407                OpBranch %24
408          %24 = OpLabel
409                OpLoopMerge %26 %27 None
410                OpBranch %28
411          %28 = OpLabel
412          %29 = OpLoad %6 %18
413          %30 = OpLoad %6 %10
414          %32 = OpSLessThanEqual %31 %29 %30
415          %33 = OpLoad %6 %20
416          %34 = OpLoad %6 %11
417          %35 = OpSLessThanEqual %31 %33 %34
418          %36 = OpLogicalAnd %31 %32 %35
419                OpBranchConditional %36 %25 %26
420          %25 = OpLabel
421          %42 = OpLoad %6 %18
422          %44 = OpAccessChain %43 %41 %42
423          %45 = OpLoad %6 %44
424          %46 = OpLoad %6 %20
425          %47 = OpAccessChain %43 %41 %46
426          %48 = OpLoad %6 %47
427          %49 = OpSLessThan %31 %45 %48
428                OpSelectionMerge %51 None
429                OpBranchConditional %49 %50 %60
430          %50 = OpLabel
431          %53 = OpLoad %6 %16
432          %54 = OpIAdd %6 %53 %22
433                OpStore %16 %54
434          %55 = OpLoad %6 %18
435          %56 = OpIAdd %6 %55 %22
436                OpStore %18 %56
437          %57 = OpAccessChain %43 %41 %55
438          %58 = OpLoad %6 %57
439          %59 = OpAccessChain %43 %52 %53
440                OpStore %59 %58
441                OpBranch %51
442          %60 = OpLabel
443          %61 = OpLoad %6 %16
444          %62 = OpIAdd %6 %61 %22
445                OpStore %16 %62
446          %63 = OpLoad %6 %20
447          %64 = OpIAdd %6 %63 %22
448                OpStore %20 %64
449          %65 = OpAccessChain %43 %41 %63
450          %66 = OpLoad %6 %65
451          %67 = OpAccessChain %43 %52 %61
452                OpStore %67 %66
453                OpBranch %51
454          %51 = OpLabel
455                OpBranch %27
456          %27 = OpLabel
457                OpBranch %24
458          %26 = OpLabel
459                OpBranch %68
460          %68 = OpLabel
461                OpLoopMerge %70 %71 None
462                OpBranch %72
463          %72 = OpLabel
464          %73 = OpLoad %6 %18
465          %75 = OpSLessThan %31 %73 %74
466          %76 = OpLoad %6 %18
467          %77 = OpLoad %6 %10
468          %78 = OpSLessThanEqual %31 %76 %77
469          %79 = OpLogicalAnd %31 %75 %78
470                OpBranchConditional %79 %69 %70
471          %69 = OpLabel
472          %80 = OpLoad %6 %16
473          %81 = OpIAdd %6 %80 %22
474                OpStore %16 %81
475          %82 = OpLoad %6 %18
476          %83 = OpIAdd %6 %82 %22
477                OpStore %18 %83
478          %84 = OpAccessChain %43 %41 %82
479          %85 = OpLoad %6 %84
480          %86 = OpAccessChain %43 %52 %80
481                OpStore %86 %85
482                OpBranch %71
483          %71 = OpLabel
484                OpBranch %68
485          %70 = OpLabel
486          %88 = OpLoad %6 %9
487                OpStore %87 %88
488                OpBranch %89
489          %89 = OpLabel
490                OpLoopMerge %91 %92 None
491                OpBranch %93
492          %93 = OpLabel
493          %94 = OpLoad %6 %87
494          %95 = OpLoad %6 %11
495          %96 = OpSLessThanEqual %31 %94 %95
496                OpBranchConditional %96 %90 %91
497          %90 = OpLabel
498          %97 = OpLoad %6 %87
499          %98 = OpLoad %6 %87
500          %99 = OpAccessChain %43 %52 %98
501         %100 = OpLoad %6 %99
502         %101 = OpAccessChain %43 %41 %97
503                OpStore %101 %100
504                OpBranch %92
505          %92 = OpLabel
506         %102 = OpLoad %6 %87
507         %103 = OpIAdd %6 %102 %22
508                OpStore %87 %103
509                OpBranch %89
510          %91 = OpLabel
511                OpReturn
512                OpFunctionEnd
513          %14 = OpFunction %2 None %3
514          %15 = OpLabel
515         %104 = OpVariable %7 Function
516         %106 = OpVariable %7 Function
517         %108 = OpVariable %7 Function
518         %117 = OpVariable %7 Function
519         %127 = OpVariable %7 Function
520         %129 = OpVariable %7 Function
521         %134 = OpVariable %7 Function
522         %143 = OpVariable %7 Function
523         %145 = OpVariable %7 Function
524         %147 = OpVariable %7 Function
525                OpStore %104 %105
526                OpStore %106 %107
527                OpStore %108 %22
528                OpBranch %109
529         %109 = OpLabel
530                OpLoopMerge %111 %112 None
531                OpBranch %113
532         %113 = OpLabel
533         %114 = OpLoad %6 %108
534         %115 = OpLoad %6 %106
535         %116 = OpSLessThanEqual %31 %114 %115
536                OpBranchConditional %116 %110 %111
537         %110 = OpLabel
538         %118 = OpLoad %6 %104
539                OpStore %117 %118
540                OpBranch %119
541         %119 = OpLabel
542                OpLoopMerge %121 %122 None
543                OpBranch %123
544         %123 = OpLabel
545         %124 = OpLoad %6 %117
546         %125 = OpLoad %6 %106
547         %126 = OpSLessThan %31 %124 %125
548                OpBranchConditional %126 %120 %121
549         %120 = OpLabel
550         %128 = OpLoad %6 %117
551                OpStore %127 %128
552         %130 = OpLoad %6 %117
553         %131 = OpLoad %6 %108
554         %132 = OpIAdd %6 %130 %131
555         %133 = OpISub %6 %132 %22
556                OpStore %129 %133
557         %135 = OpLoad %6 %117
558         %137 = OpLoad %6 %108
559         %138 = OpIMul %6 %136 %137
560         %139 = OpIAdd %6 %135 %138
561         %140 = OpISub %6 %139 %22
562         %141 = OpLoad %6 %106
563         %142 = OpExtInst %6 %1 SMin %140 %141
564                OpStore %134 %142
565         %144 = OpLoad %6 %127
566                OpStore %143 %144
567         %146 = OpLoad %6 %129
568                OpStore %145 %146
569         %148 = OpLoad %6 %134
570                OpStore %147 %148
571         %149 = OpFunctionCall %2 %12 %143 %145 %147
572                OpBranch %122
573         %122 = OpLabel
574         %150 = OpLoad %6 %108
575         %151 = OpIMul %6 %136 %150
576         %152 = OpLoad %6 %117
577         %153 = OpIAdd %6 %152 %151
578                OpStore %117 %153
579                OpBranch %119
580         %121 = OpLabel
581                OpBranch %112
582         %112 = OpLabel
583         %154 = OpLoad %6 %108
584         %155 = OpIMul %6 %136 %154
585                OpStore %108 %155
586                OpBranch %109
587         %111 = OpLabel
588                OpReturn
589                OpFunctionEnd
590 END
591
592 # uniforms for reference
593
594 # injectionSwitch
595 BUFFER reference_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
596  0.0 1.0
597 END
598
599 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
600
601 PIPELINE graphics reference_pipeline
602   ATTACH reference_vertex_shader
603   ATTACH reference_fragment_shader
604   FRAMEBUFFER_SIZE 256 256
605   BIND BUFFER reference_framebuffer AS color LOCATION 0
606   BIND BUFFER reference_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
607 END
608 CLEAR_COLOR reference_pipeline 0 0 0 255
609
610 CLEAR reference_pipeline
611 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
612
613
614 SHADER vertex variant_vertex_shader PASSTHROUGH
615
616 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
617 ; SPIR-V
618 ; Version: 1.0
619 ; Generator: Khronos Glslang Reference Front End; 7
620 ; Bound: 648
621 ; Schema: 0
622                OpCapability Shader
623           %1 = OpExtInstImport "GLSL.std.450"
624                OpMemoryModel Logical GLSL450
625                OpEntryPoint Fragment %4 "main" %243 %369
626                OpExecutionMode %4 OriginUpperLeft
627                OpSource ESSL 320
628                OpName %4 "main"
629                OpName %12 "merge(i1;i1;i1;"
630                OpName %9 "from"
631                OpName %10 "mid"
632                OpName %11 "to"
633                OpName %14 "mergeSort("
634                OpName %16 "k"
635                OpName %18 "i"
636                OpName %20 "j"
637                OpName %41 "data"
638                OpName %52 "temp"
639                OpName %87 "i"
640                OpName %104 "low"
641                OpName %106 "high"
642                OpName %108 "m"
643                OpName %117 "i"
644                OpName %127 "from"
645                OpName %129 "mid"
646                OpName %134 "to"
647                OpName %143 "param"
648                OpName %145 "param"
649                OpName %147 "param"
650                OpName %156 "i"
651                OpName %159 "buf0"
652                OpMemberName %159 0 "injectionSwitch"
653                OpName %161 ""
654                OpName %225 "j"
655                OpName %243 "gl_FragCoord"
656                OpName %254 "grey"
657                OpName %369 "_GLF_color"
658                OpMemberDecorate %159 0 Offset 0
659                OpDecorate %159 Block
660                OpDecorate %161 DescriptorSet 0
661                OpDecorate %161 Binding 0
662                OpDecorate %243 BuiltIn FragCoord
663                OpDecorate %369 Location 0
664           %2 = OpTypeVoid
665           %3 = OpTypeFunction %2
666           %6 = OpTypeInt 32 1
667           %7 = OpTypePointer Function %6
668           %8 = OpTypeFunction %2 %7 %7 %7
669          %22 = OpConstant %6 1
670          %31 = OpTypeBool
671          %37 = OpTypeInt 32 0
672          %38 = OpConstant %37 10
673          %39 = OpTypeArray %6 %38
674          %40 = OpTypePointer Private %39
675          %41 = OpVariable %40 Private
676          %43 = OpTypePointer Private %6
677          %52 = OpVariable %40 Private
678          %74 = OpConstant %6 10
679         %105 = OpConstant %6 0
680         %107 = OpConstant %6 9
681         %136 = OpConstant %6 2
682         %157 = OpTypeFloat 32
683         %158 = OpTypeVector %157 2
684         %159 = OpTypeStruct %158
685         %160 = OpTypePointer Uniform %159
686         %161 = OpVariable %160 Uniform
687         %162 = OpConstant %37 0
688         %163 = OpTypePointer Uniform %157
689         %184 = OpConstant %6 4
690         %188 = OpConstant %6 3
691         %201 = OpConstant %6 -1
692         %205 = OpConstant %6 -2
693         %209 = OpConstant %6 -3
694         %213 = OpConstant %6 -4
695         %217 = OpConstant %6 -5
696         %241 = OpTypeVector %157 4
697         %242 = OpTypePointer Input %241
698         %243 = OpVariable %242 Input
699         %244 = OpConstant %37 1
700         %245 = OpTypePointer Input %157
701         %249 = OpConstant %6 30
702         %253 = OpTypePointer Function %157
703         %255 = OpConstant %157 0.5
704         %259 = OpConstant %157 10
705         %266 = OpConstant %6 60
706         %279 = OpConstant %6 90
707         %292 = OpConstant %6 120
708         %305 = OpConstant %6 150
709         %314 = OpConstant %6 180
710         %318 = OpConstant %6 5
711         %328 = OpConstant %6 210
712         %332 = OpConstant %6 6
713         %342 = OpConstant %6 240
714         %346 = OpConstant %6 7
715         %356 = OpConstant %6 270
716         %360 = OpConstant %6 8
717         %368 = OpTypePointer Output %241
718         %369 = OpVariable %368 Output
719         %371 = OpTypeVector %157 3
720         %373 = OpConstant %157 1
721         %484 = OpConstant %6 0
722         %573 = OpConstantTrue %31
723         %574 = OpConstantFalse %31
724         %575 = OpConstant %157 0
725           %4 = OpFunction %2 None %3
726           %5 = OpLabel
727         %156 = OpVariable %7 Function
728         %225 = OpVariable %7 Function
729         %254 = OpVariable %253 Function
730         %164 = OpAccessChain %163 %161 %105 %162
731         %165 = OpLoad %157 %164
732         %166 = OpConvertFToS %6 %165
733                OpStore %156 %166
734                OpBranch %167
735         %167 = OpLabel
736                OpLoopMerge %169 %170 None
737                OpBranch %168
738         %168 = OpLabel
739         %171 = OpLoad %6 %156
740                OpSelectionMerge %182 None
741                OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
742         %172 = OpLabel
743         %183 = OpLoad %6 %156
744         %185 = OpAccessChain %43 %41 %183
745                OpStore %185 %184
746                OpBranch %182
747         %173 = OpLabel
748         %187 = OpLoad %6 %156
749         %189 = OpAccessChain %43 %41 %187
750                OpStore %189 %188
751                OpBranch %182
752         %174 = OpLabel
753         %191 = OpLoad %6 %156
754         %192 = OpAccessChain %43 %41 %191
755                OpStore %192 %136
756                OpBranch %182
757         %175 = OpLabel
758         %194 = OpLoad %6 %156
759         %195 = OpAccessChain %43 %41 %194
760                OpStore %195 %22
761                OpBranch %182
762         %176 = OpLabel
763         %197 = OpLoad %6 %156
764         %198 = OpAccessChain %43 %41 %197
765                OpStore %198 %105
766                OpBranch %182
767         %177 = OpLabel
768         %200 = OpLoad %6 %156
769         %202 = OpAccessChain %43 %41 %200
770                OpStore %202 %201
771                OpBranch %182
772         %178 = OpLabel
773         %204 = OpLoad %6 %156
774         %206 = OpAccessChain %43 %41 %204
775                OpStore %206 %205
776                OpBranch %182
777         %179 = OpLabel
778         %208 = OpLoad %6 %156
779         %210 = OpAccessChain %43 %41 %208
780                OpStore %210 %209
781                OpBranch %182
782         %180 = OpLabel
783         %212 = OpLoad %6 %156
784         %214 = OpAccessChain %43 %41 %212
785                OpStore %214 %213
786                OpBranch %182
787         %181 = OpLabel
788         %216 = OpLoad %6 %156
789         %218 = OpAccessChain %43 %41 %216
790                OpStore %218 %217
791                OpBranch %182
792         %182 = OpLabel
793         %221 = OpLoad %6 %156
794         %222 = OpIAdd %6 %221 %22
795                OpStore %156 %222
796                OpBranch %170
797         %170 = OpLabel
798         %223 = OpLoad %6 %156
799         %224 = OpSLessThan %31 %223 %74
800                OpBranchConditional %224 %167 %169
801         %169 = OpLabel
802                OpStore %225 %105
803                OpBranch %226
804         %226 = OpLabel
805                OpLoopMerge %228 %229 None
806                OpBranch %230
807         %230 = OpLabel
808         %231 = OpLoad %6 %225
809         %232 = OpSLessThan %31 %231 %74
810                OpBranchConditional %232 %227 %228
811         %227 = OpLabel
812         %233 = OpLoad %6 %225
813         %234 = OpLoad %6 %225
814         %235 = OpAccessChain %43 %41 %234
815         %236 = OpLoad %6 %235
816         %237 = OpAccessChain %43 %52 %233
817                OpStore %237 %236
818                OpBranch %229
819         %229 = OpLabel
820         %238 = OpLoad %6 %225
821         %239 = OpIAdd %6 %238 %22
822                OpStore %225 %239
823                OpBranch %226
824         %228 = OpLabel
825         %240 = OpFunctionCall %2 %14
826         %246 = OpAccessChain %245 %243 %244
827         %247 = OpLoad %157 %246
828         %248 = OpConvertFToS %6 %247
829         %250 = OpSLessThan %31 %248 %249
830                OpSelectionMerge %252 None
831                OpBranchConditional %250 %251 %262
832         %251 = OpLabel
833         %256 = OpAccessChain %43 %41 %105
834         %257 = OpLoad %6 %256
835         %258 = OpConvertSToF %157 %257
836         %260 = OpFDiv %157 %258 %259
837         %261 = OpFAdd %157 %255 %260
838                OpStore %254 %261
839                OpBranch %252
840         %262 = OpLabel
841         %263 = OpAccessChain %245 %243 %244
842         %264 = OpLoad %157 %263
843         %265 = OpConvertFToS %6 %264
844         %267 = OpSLessThan %31 %265 %266
845                OpSelectionMerge %269 None
846                OpBranchConditional %267 %268 %275
847         %268 = OpLabel
848         %270 = OpAccessChain %43 %41 %22
849         %271 = OpLoad %6 %270
850         %272 = OpConvertSToF %157 %271
851         %273 = OpFDiv %157 %272 %259
852         %274 = OpFAdd %157 %255 %273
853                OpStore %254 %274
854                OpBranch %269
855         %275 = OpLabel
856         %276 = OpAccessChain %245 %243 %244
857         %277 = OpLoad %157 %276
858         %278 = OpConvertFToS %6 %277
859         %280 = OpSLessThan %31 %278 %279
860                OpSelectionMerge %282 None
861                OpBranchConditional %280 %281 %288
862         %281 = OpLabel
863         %283 = OpAccessChain %43 %41 %136
864         %284 = OpLoad %6 %283
865         %285 = OpConvertSToF %157 %284
866         %286 = OpFDiv %157 %285 %259
867         %287 = OpFAdd %157 %255 %286
868                OpStore %254 %287
869                OpBranch %282
870         %288 = OpLabel
871         %289 = OpAccessChain %245 %243 %244
872         %290 = OpLoad %157 %289
873         %291 = OpConvertFToS %6 %290
874         %293 = OpSLessThan %31 %291 %292
875                OpSelectionMerge %295 None
876                OpBranchConditional %293 %294 %301
877         %294 = OpLabel
878         %296 = OpAccessChain %43 %41 %188
879         %297 = OpLoad %6 %296
880         %298 = OpConvertSToF %157 %297
881         %299 = OpFDiv %157 %298 %259
882         %300 = OpFAdd %157 %255 %299
883                OpStore %254 %300
884                OpBranch %295
885         %301 = OpLabel
886         %302 = OpAccessChain %245 %243 %244
887         %303 = OpLoad %157 %302
888         %304 = OpConvertFToS %6 %303
889         %306 = OpSLessThan %31 %304 %305
890                OpSelectionMerge %308 None
891                OpBranchConditional %306 %307 %310
892         %307 = OpLabel
893                OpKill
894         %310 = OpLabel
895         %311 = OpAccessChain %245 %243 %244
896         %312 = OpLoad %157 %311
897         %313 = OpConvertFToS %6 %312
898         %315 = OpSLessThan %31 %313 %314
899                OpSelectionMerge %317 None
900                OpBranchConditional %315 %316 %324
901         %316 = OpLabel
902         %319 = OpAccessChain %43 %41 %318
903         %320 = OpLoad %6 %319
904         %321 = OpConvertSToF %157 %320
905         %322 = OpFDiv %157 %321 %259
906         %323 = OpFAdd %157 %255 %322
907                OpStore %254 %323
908                OpBranch %317
909         %324 = OpLabel
910         %325 = OpAccessChain %245 %243 %244
911         %326 = OpLoad %157 %325
912         %327 = OpConvertFToS %6 %326
913         %329 = OpSLessThan %31 %327 %328
914                OpSelectionMerge %331 None
915                OpBranchConditional %329 %330 %338
916         %330 = OpLabel
917         %333 = OpAccessChain %43 %41 %332
918         %334 = OpLoad %6 %333
919         %335 = OpConvertSToF %157 %334
920         %336 = OpFDiv %157 %335 %259
921         %337 = OpFAdd %157 %255 %336
922                OpStore %254 %337
923                OpBranch %331
924         %338 = OpLabel
925         %339 = OpAccessChain %245 %243 %244
926         %340 = OpLoad %157 %339
927         %341 = OpConvertFToS %6 %340
928         %343 = OpSLessThan %31 %341 %342
929                OpSelectionMerge %345 None
930                OpBranchConditional %343 %344 %352
931         %344 = OpLabel
932         %347 = OpAccessChain %43 %41 %346
933         %348 = OpLoad %6 %347
934         %349 = OpConvertSToF %157 %348
935         %350 = OpFDiv %157 %349 %259
936         %351 = OpFAdd %157 %255 %350
937                OpStore %254 %351
938                OpBranch %345
939         %352 = OpLabel
940         %353 = OpAccessChain %245 %243 %244
941         %354 = OpLoad %157 %353
942         %355 = OpConvertFToS %6 %354
943         %357 = OpSLessThan %31 %355 %356
944                OpSelectionMerge %359 None
945                OpBranchConditional %357 %358 %366
946         %358 = OpLabel
947         %361 = OpAccessChain %43 %41 %360
948         %362 = OpLoad %6 %361
949         %363 = OpConvertSToF %157 %362
950         %364 = OpFDiv %157 %363 %259
951         %365 = OpFAdd %157 %255 %364
952                OpStore %254 %365
953                OpBranch %359
954         %366 = OpLabel
955                OpKill
956         %359 = OpLabel
957                OpBranch %345
958         %345 = OpLabel
959                OpBranch %331
960         %331 = OpLabel
961                OpBranch %317
962         %317 = OpLabel
963                OpBranch %308
964         %308 = OpLabel
965                OpBranch %295
966         %295 = OpLabel
967                OpBranch %282
968         %282 = OpLabel
969                OpBranch %269
970         %269 = OpLabel
971                OpBranch %252
972         %252 = OpLabel
973         %370 = OpLoad %157 %254
974         %372 = OpCompositeConstruct %371 %370 %370 %370
975         %374 = OpCompositeExtract %157 %372 0
976         %375 = OpCompositeExtract %157 %372 1
977         %376 = OpCompositeExtract %157 %372 2
978         %377 = OpCompositeConstruct %241 %374 %375 %376 %373
979                OpStore %369 %377
980                OpReturn
981                OpFunctionEnd
982          %12 = OpFunction %2 None %8
983           %9 = OpFunctionParameter %7
984          %10 = OpFunctionParameter %7
985          %11 = OpFunctionParameter %7
986          %13 = OpLabel
987          %16 = OpVariable %7 Function
988          %18 = OpVariable %7 Function
989          %20 = OpVariable %7 Function
990          %87 = OpVariable %7 Function
991          %17 = OpLoad %6 %9
992                OpStore %16 %17
993          %19 = OpLoad %6 %9
994                OpStore %18 %19
995          %21 = OpLoad %6 %10
996          %23 = OpIAdd %6 %21 %22
997                OpStore %20 %23
998                OpBranch %24
999          %24 = OpLabel
1000         %646 = OpAccessChain %163 %161 %105 %105
1001         %647 = OpLoad %157 %646
1002         %643 = OpFOrdGreaterThanEqual %31 %373 %647
1003                OpLoopMerge %26 %27 None
1004                OpBranchConditional %643 %28 %27
1005          %28 = OpLabel
1006          %29 = OpLoad %6 %18
1007          %30 = OpLoad %6 %10
1008          %32 = OpSLessThanEqual %31 %29 %30
1009          %33 = OpLoad %6 %20
1010          %34 = OpLoad %6 %11
1011          %35 = OpSLessThanEqual %31 %33 %34
1012          %36 = OpLogicalAnd %31 %32 %35
1013                OpBranchConditional %36 %25 %26
1014          %25 = OpLabel
1015          %42 = OpLoad %6 %18
1016          %44 = OpAccessChain %43 %41 %42
1017          %45 = OpLoad %6 %44
1018          %46 = OpLoad %6 %20
1019          %47 = OpAccessChain %43 %41 %46
1020          %48 = OpLoad %6 %47
1021          %49 = OpSLessThan %31 %45 %48
1022                OpBranch %50
1023          %50 = OpLabel
1024                OpSelectionMerge %479 None
1025                OpBranchConditional %49 %480 %482
1026         %480 = OpLabel
1027         %481 = OpLoad %6 %16
1028                OpBranch %479
1029         %482 = OpLabel
1030         %483 = OpCopyObject %6 %484
1031                OpBranch %479
1032         %479 = OpLabel
1033          %53 = OpPhi %6 %481 %480 %483 %482
1034          %54 = OpIAdd %6 %53 %22
1035                OpBranch %486
1036         %486 = OpLabel
1037                OpSelectionMerge %536 None
1038                OpBranchConditional %49 %537 %536
1039         %537 = OpLabel
1040                OpStore %16 %54
1041         %622 = OpAccessChain %163 %161 %105 %105
1042         %623 = OpLoad %157 %622
1043         %621 = OpFUnordGreaterThan %31 %373 %623
1044                OpBranchConditional %621 %536 %27
1045         %536 = OpLabel
1046                OpBranch %485
1047         %485 = OpLabel
1048         %595 = OpAccessChain %163 %161 %105 %22
1049         %596 = OpLoad %157 %595
1050         %594 = OpFOrdGreaterThanEqual %31 %596 %575
1051                OpBranchConditional %594 %490 %27
1052         %490 = OpLabel
1053         %491 = OpCopyObject %6 %484
1054                OpBranch %488
1055         %488 = OpLabel
1056                OpSelectionMerge %538 None
1057                OpBranchConditional %49 %539 %541
1058         %539 = OpLabel
1059         %540 = OpLoad %6 %18
1060                OpBranch %538
1061         %541 = OpLabel
1062         %542 = OpCopyObject %6 %484
1063                OpBranch %538
1064         %538 = OpLabel
1065         %489 = OpPhi %6 %540 %539 %542 %541
1066                OpBranch %487
1067         %487 = OpLabel
1068          %55 = OpSelect %6 %49 %489 %491
1069          %56 = OpIAdd %6 %55 %22
1070                OpSelectionMerge %492 None
1071                OpBranchConditional %49 %493 %492
1072         %493 = OpLabel
1073                OpStore %18 %56
1074                OpBranch %492
1075         %492 = OpLabel
1076          %57 = OpAccessChain %43 %41 %55
1077                OpBranch %497
1078         %497 = OpLabel
1079         %498 = OpCopyObject %6 %484
1080                OpBranch %495
1081         %495 = OpLabel
1082                OpSelectionMerge %545 None
1083                OpBranchConditional %49 %546 %548
1084         %546 = OpLabel
1085         %547 = OpLoad %6 %57
1086         %598 = OpAccessChain %163 %161 %105 %22
1087         %599 = OpLoad %157 %598
1088         %597 = OpFUnordGreaterThan %31 %575 %599
1089                OpBranchConditional %597 %27 %545
1090         %548 = OpLabel
1091         %549 = OpCopyObject %6 %484
1092         %619 = OpAccessChain %163 %161 %105 %22
1093         %620 = OpLoad %157 %619
1094         %618 = OpFUnordGreaterThanEqual %31 %620 %575
1095                OpBranchConditional %618 %545 %27
1096         %545 = OpLabel
1097         %496 = OpPhi %6 %547 %546 %549 %548
1098                OpBranch %494
1099         %494 = OpLabel
1100          %58 = OpSelect %6 %49 %496 %498
1101          %59 = OpAccessChain %43 %52 %53
1102                OpSelectionMerge %499 None
1103                OpBranchConditional %49 %500 %499
1104         %500 = OpLabel
1105                OpStore %59 %58
1106                OpBranch %499
1107         %499 = OpLabel
1108                OpBranch %60
1109          %60 = OpLabel
1110                OpSelectionMerge %501 None
1111                OpBranchConditional %49 %504 %502
1112         %502 = OpLabel
1113         %503 = OpLoad %6 %16
1114                OpBranch %501
1115         %504 = OpLabel
1116         %505 = OpCopyObject %6 %484
1117                OpBranch %501
1118         %501 = OpLabel
1119          %61 = OpPhi %6 %503 %502 %505 %504
1120          %62 = OpIAdd %6 %61 %22
1121                OpSelectionMerge %506 None
1122                OpBranchConditional %49 %506 %507
1123         %507 = OpLabel
1124                OpStore %16 %62
1125                OpBranch %506
1126         %506 = OpLabel
1127         %602 = OpAccessChain %163 %161 %105 %105
1128         %603 = OpLoad %157 %602
1129         %601 = OpFUnordGreaterThan %31 %373 %603
1130                OpBranchConditional %601 %509 %27
1131         %509 = OpLabel
1132                OpSelectionMerge %559 None
1133                OpBranchConditional %49 %562 %560
1134         %560 = OpLabel
1135         %561 = OpLoad %6 %20
1136                OpBranch %559
1137         %562 = OpLabel
1138         %563 = OpCopyObject %6 %484
1139                OpBranch %559
1140         %559 = OpLabel
1141         %510 = OpPhi %6 %561 %560 %563 %562
1142                OpBranch %511
1143         %511 = OpLabel
1144         %512 = OpCopyObject %6 %484
1145                OpBranch %508
1146         %508 = OpLabel
1147          %63 = OpSelect %6 %49 %512 %510
1148          %64 = OpIAdd %6 %63 %22
1149                OpSelectionMerge %513 None
1150                OpBranchConditional %49 %513 %514
1151         %514 = OpLabel
1152                OpStore %20 %64
1153                OpBranch %513
1154         %513 = OpLabel
1155          %65 = OpAccessChain %43 %41 %63
1156                OpSelectionMerge %515 None
1157                OpBranchConditional %49 %518 %516
1158         %516 = OpLabel
1159         %517 = OpLoad %6 %65
1160                OpBranch %515
1161         %518 = OpLabel
1162         %519 = OpCopyObject %6 %484
1163                OpBranch %515
1164         %515 = OpLabel
1165          %66 = OpPhi %6 %517 %516 %519 %518
1166          %67 = OpAccessChain %43 %52 %61
1167                OpSelectionMerge %520 None
1168                OpBranchConditional %49 %520 %521
1169         %521 = OpLabel
1170                OpStore %67 %66
1171                OpBranch %520
1172         %520 = OpLabel
1173                OpBranch %51
1174          %51 = OpLabel
1175                OpBranch %27
1176          %27 = OpLabel
1177                OpBranch %24
1178          %26 = OpLabel
1179                OpBranch %68
1180          %68 = OpLabel
1181                OpLoopMerge %70 %71 None
1182                OpBranch %72
1183          %72 = OpLabel
1184          %73 = OpLoad %6 %18
1185          %75 = OpSLessThan %31 %73 %74
1186          %76 = OpLoad %6 %18
1187          %77 = OpLoad %6 %10
1188          %78 = OpSLessThanEqual %31 %76 %77
1189          %79 = OpLogicalAnd %31 %75 %78
1190                OpBranchConditional %79 %69 %70
1191          %69 = OpLabel
1192          %80 = OpLoad %6 %16
1193          %81 = OpIAdd %6 %80 %22
1194                OpStore %16 %81
1195          %82 = OpLoad %6 %18
1196          %83 = OpIAdd %6 %82 %22
1197                OpStore %18 %83
1198          %84 = OpAccessChain %43 %41 %82
1199          %85 = OpLoad %6 %84
1200          %86 = OpAccessChain %43 %52 %80
1201                OpStore %86 %85
1202                OpBranch %71
1203          %71 = OpLabel
1204                OpBranch %68
1205          %70 = OpLabel
1206          %88 = OpLoad %6 %9
1207                OpStore %87 %88
1208                OpBranch %89
1209          %89 = OpLabel
1210                OpLoopMerge %91 %92 None
1211                OpBranch %93
1212          %93 = OpLabel
1213          %94 = OpLoad %6 %87
1214          %95 = OpLoad %6 %11
1215          %96 = OpSLessThanEqual %31 %94 %95
1216                OpBranchConditional %96 %90 %91
1217          %90 = OpLabel
1218          %97 = OpLoad %6 %87
1219          %98 = OpLoad %6 %87
1220          %99 = OpAccessChain %43 %52 %98
1221         %100 = OpLoad %6 %99
1222         %101 = OpAccessChain %43 %41 %97
1223                OpStore %101 %100
1224                OpBranch %92
1225          %92 = OpLabel
1226         %102 = OpLoad %6 %87
1227         %103 = OpIAdd %6 %102 %22
1228                OpStore %87 %103
1229                OpBranch %89
1230          %91 = OpLabel
1231                OpReturn
1232                OpFunctionEnd
1233          %14 = OpFunction %2 None %3
1234          %15 = OpLabel
1235         %104 = OpVariable %7 Function
1236         %106 = OpVariable %7 Function
1237         %108 = OpVariable %7 Function
1238         %117 = OpVariable %7 Function
1239         %127 = OpVariable %7 Function
1240         %129 = OpVariable %7 Function
1241         %134 = OpVariable %7 Function
1242         %143 = OpVariable %7 Function
1243         %145 = OpVariable %7 Function
1244         %147 = OpVariable %7 Function
1245                OpStore %104 %105
1246                OpStore %106 %107
1247                OpStore %108 %22
1248                OpBranch %109
1249         %109 = OpLabel
1250                OpLoopMerge %111 %112 None
1251                OpBranch %113
1252         %113 = OpLabel
1253         %114 = OpLoad %6 %108
1254         %115 = OpLoad %6 %106
1255         %116 = OpSLessThanEqual %31 %114 %115
1256                OpBranchConditional %116 %110 %111
1257         %110 = OpLabel
1258         %118 = OpLoad %6 %104
1259                OpStore %117 %118
1260                OpBranch %119
1261         %119 = OpLabel
1262                OpLoopMerge %121 %122 None
1263                OpBranch %123
1264         %123 = OpLabel
1265         %124 = OpLoad %6 %117
1266         %125 = OpLoad %6 %106
1267         %126 = OpSLessThan %31 %124 %125
1268                OpBranchConditional %126 %120 %121
1269         %120 = OpLabel
1270         %128 = OpLoad %6 %117
1271                OpStore %127 %128
1272         %130 = OpLoad %6 %117
1273         %131 = OpLoad %6 %108
1274         %132 = OpIAdd %6 %130 %131
1275         %133 = OpISub %6 %132 %22
1276                OpStore %129 %133
1277         %135 = OpLoad %6 %117
1278         %137 = OpLoad %6 %108
1279         %138 = OpIMul %6 %136 %137
1280         %139 = OpIAdd %6 %135 %138
1281         %140 = OpISub %6 %139 %22
1282         %141 = OpLoad %6 %106
1283         %142 = OpExtInst %6 %1 SMin %140 %141
1284                OpStore %134 %142
1285         %144 = OpLoad %6 %127
1286                OpStore %143 %144
1287         %146 = OpLoad %6 %129
1288                OpStore %145 %146
1289         %148 = OpLoad %6 %134
1290                OpStore %147 %148
1291         %149 = OpFunctionCall %2 %12 %143 %145 %147
1292                OpBranch %122
1293         %122 = OpLabel
1294         %150 = OpLoad %6 %108
1295         %151 = OpIMul %6 %136 %150
1296         %152 = OpLoad %6 %117
1297         %153 = OpIAdd %6 %152 %151
1298                OpStore %117 %153
1299                OpBranch %119
1300         %121 = OpLabel
1301                OpBranch %112
1302         %112 = OpLabel
1303         %154 = OpLoad %6 %108
1304         %155 = OpIMul %6 %136 %154
1305                OpStore %108 %155
1306                OpBranch %109
1307         %111 = OpLabel
1308                OpReturn
1309                OpFunctionEnd
1310 END
1311
1312 # uniforms for variant
1313
1314 # injectionSwitch
1315 BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
1316  0.0 1.0
1317 END
1318
1319 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1320
1321 PIPELINE graphics variant_pipeline
1322   ATTACH variant_vertex_shader
1323   ATTACH variant_fragment_shader
1324   FRAMEBUFFER_SIZE 256 256
1325   BIND BUFFER variant_framebuffer AS color LOCATION 0
1326   BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
1327 END
1328 CLEAR_COLOR variant_pipeline 0 0 0 255
1329
1330 CLEAR variant_pipeline
1331 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
1332
1333
1334 SHADER vertex variant_2_vertex_shader PASSTHROUGH
1335
1336 SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
1337 ; SPIR-V
1338 ; Version: 1.0
1339 ; Generator: Khronos Glslang Reference Front End; 7
1340 ; Bound: 644
1341 ; Schema: 0
1342                OpCapability Shader
1343           %1 = OpExtInstImport "GLSL.std.450"
1344                OpMemoryModel Logical GLSL450
1345                OpEntryPoint Fragment %4 "main" %243 %369
1346                OpExecutionMode %4 OriginUpperLeft
1347                OpSource ESSL 320
1348                OpName %4 "main"
1349                OpName %12 "merge(i1;i1;i1;"
1350                OpName %9 "from"
1351                OpName %10 "mid"
1352                OpName %11 "to"
1353                OpName %14 "mergeSort("
1354                OpName %16 "k"
1355                OpName %18 "i"
1356                OpName %20 "j"
1357                OpName %41 "data"
1358                OpName %52 "temp"
1359                OpName %87 "i"
1360                OpName %104 "low"
1361                OpName %106 "high"
1362                OpName %108 "m"
1363                OpName %117 "i"
1364                OpName %127 "from"
1365                OpName %129 "mid"
1366                OpName %134 "to"
1367                OpName %143 "param"
1368                OpName %145 "param"
1369                OpName %147 "param"
1370                OpName %156 "i"
1371                OpName %159 "buf0"
1372                OpMemberName %159 0 "injectionSwitch"
1373                OpName %161 ""
1374                OpName %225 "j"
1375                OpName %243 "gl_FragCoord"
1376                OpName %254 "grey"
1377                OpName %369 "_GLF_color"
1378                OpMemberDecorate %159 0 Offset 0
1379                OpDecorate %159 Block
1380                OpDecorate %161 DescriptorSet 0
1381                OpDecorate %161 Binding 0
1382                OpDecorate %243 BuiltIn FragCoord
1383                OpDecorate %369 Location 0
1384           %2 = OpTypeVoid
1385           %3 = OpTypeFunction %2
1386           %6 = OpTypeInt 32 1
1387           %7 = OpTypePointer Function %6
1388           %8 = OpTypeFunction %2 %7 %7 %7
1389          %22 = OpConstant %6 1
1390          %31 = OpTypeBool
1391          %37 = OpTypeInt 32 0
1392          %38 = OpConstant %37 10
1393          %39 = OpTypeArray %6 %38
1394          %40 = OpTypePointer Private %39
1395          %41 = OpVariable %40 Private
1396          %43 = OpTypePointer Private %6
1397          %52 = OpVariable %40 Private
1398          %74 = OpConstant %6 10
1399         %105 = OpConstant %6 0
1400         %107 = OpConstant %6 9
1401         %136 = OpConstant %6 2
1402         %157 = OpTypeFloat 32
1403         %158 = OpTypeVector %157 2
1404         %159 = OpTypeStruct %158
1405         %160 = OpTypePointer Uniform %159
1406         %161 = OpVariable %160 Uniform
1407         %162 = OpConstant %37 0
1408         %163 = OpTypePointer Uniform %157
1409         %184 = OpConstant %6 4
1410         %188 = OpConstant %6 3
1411         %201 = OpConstant %6 -1
1412         %205 = OpConstant %6 -2
1413         %209 = OpConstant %6 -3
1414         %213 = OpConstant %6 -4
1415         %217 = OpConstant %6 -5
1416         %241 = OpTypeVector %157 4
1417         %242 = OpTypePointer Input %241
1418         %243 = OpVariable %242 Input
1419         %244 = OpConstant %37 1
1420         %245 = OpTypePointer Input %157
1421         %249 = OpConstant %6 30
1422         %253 = OpTypePointer Function %157
1423         %255 = OpConstant %157 0.5
1424         %259 = OpConstant %157 10
1425         %266 = OpConstant %6 60
1426         %279 = OpConstant %6 90
1427         %292 = OpConstant %6 120
1428         %305 = OpConstant %6 150
1429         %314 = OpConstant %6 180
1430         %318 = OpConstant %6 5
1431         %328 = OpConstant %6 210
1432         %332 = OpConstant %6 6
1433         %342 = OpConstant %6 240
1434         %346 = OpConstant %6 7
1435         %356 = OpConstant %6 270
1436         %360 = OpConstant %6 8
1437         %368 = OpTypePointer Output %241
1438         %369 = OpVariable %368 Output
1439         %371 = OpTypeVector %157 3
1440         %373 = OpConstant %157 1
1441         %484 = OpConstant %6 0
1442         %573 = OpConstantTrue %31
1443         %574 = OpConstantFalse %31
1444         %575 = OpConstant %157 0
1445           %4 = OpFunction %2 None %3
1446           %5 = OpLabel
1447         %156 = OpVariable %7 Function
1448         %225 = OpVariable %7 Function
1449         %254 = OpVariable %253 Function
1450         %164 = OpAccessChain %163 %161 %105 %162
1451         %165 = OpLoad %157 %164
1452         %166 = OpConvertFToS %6 %165
1453                OpStore %156 %166
1454                OpBranch %167
1455         %167 = OpLabel
1456                OpLoopMerge %169 %170 None
1457                OpBranch %168
1458         %168 = OpLabel
1459         %171 = OpLoad %6 %156
1460                OpSelectionMerge %182 None
1461                OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
1462         %172 = OpLabel
1463         %183 = OpLoad %6 %156
1464         %185 = OpAccessChain %43 %41 %183
1465                OpStore %185 %184
1466                OpBranch %182
1467         %173 = OpLabel
1468         %187 = OpLoad %6 %156
1469         %189 = OpAccessChain %43 %41 %187
1470                OpStore %189 %188
1471                OpBranch %182
1472         %174 = OpLabel
1473         %191 = OpLoad %6 %156
1474         %192 = OpAccessChain %43 %41 %191
1475                OpStore %192 %136
1476                OpBranch %182
1477         %175 = OpLabel
1478         %194 = OpLoad %6 %156
1479         %195 = OpAccessChain %43 %41 %194
1480                OpStore %195 %22
1481                OpBranch %182
1482         %176 = OpLabel
1483         %197 = OpLoad %6 %156
1484         %198 = OpAccessChain %43 %41 %197
1485                OpStore %198 %105
1486                OpBranch %182
1487         %177 = OpLabel
1488         %200 = OpLoad %6 %156
1489         %202 = OpAccessChain %43 %41 %200
1490                OpStore %202 %201
1491                OpBranch %182
1492         %178 = OpLabel
1493         %204 = OpLoad %6 %156
1494         %206 = OpAccessChain %43 %41 %204
1495                OpStore %206 %205
1496                OpBranch %182
1497         %179 = OpLabel
1498         %208 = OpLoad %6 %156
1499         %210 = OpAccessChain %43 %41 %208
1500                OpStore %210 %209
1501                OpBranch %182
1502         %180 = OpLabel
1503         %212 = OpLoad %6 %156
1504         %214 = OpAccessChain %43 %41 %212
1505                OpStore %214 %213
1506                OpBranch %182
1507         %181 = OpLabel
1508         %216 = OpLoad %6 %156
1509         %218 = OpAccessChain %43 %41 %216
1510                OpStore %218 %217
1511                OpBranch %182
1512         %182 = OpLabel
1513         %221 = OpLoad %6 %156
1514         %222 = OpIAdd %6 %221 %22
1515                OpStore %156 %222
1516                OpBranch %170
1517         %170 = OpLabel
1518         %223 = OpLoad %6 %156
1519         %224 = OpSLessThan %31 %223 %74
1520                OpBranchConditional %224 %167 %169
1521         %169 = OpLabel
1522                OpStore %225 %105
1523                OpBranch %226
1524         %226 = OpLabel
1525                OpLoopMerge %228 %229 None
1526                OpBranch %230
1527         %230 = OpLabel
1528         %231 = OpLoad %6 %225
1529         %232 = OpSLessThan %31 %231 %74
1530                OpBranchConditional %232 %227 %228
1531         %227 = OpLabel
1532         %233 = OpLoad %6 %225
1533         %234 = OpLoad %6 %225
1534         %235 = OpAccessChain %43 %41 %234
1535         %236 = OpLoad %6 %235
1536         %237 = OpAccessChain %43 %52 %233
1537                OpStore %237 %236
1538                OpBranch %229
1539         %229 = OpLabel
1540         %238 = OpLoad %6 %225
1541         %239 = OpIAdd %6 %238 %22
1542                OpStore %225 %239
1543                OpBranch %226
1544         %228 = OpLabel
1545         %240 = OpFunctionCall %2 %14
1546         %246 = OpAccessChain %245 %243 %244
1547         %247 = OpLoad %157 %246
1548         %248 = OpConvertFToS %6 %247
1549         %250 = OpSLessThan %31 %248 %249
1550                OpSelectionMerge %252 None
1551                OpBranchConditional %250 %251 %262
1552         %251 = OpLabel
1553         %256 = OpAccessChain %43 %41 %105
1554         %257 = OpLoad %6 %256
1555         %258 = OpConvertSToF %157 %257
1556         %260 = OpFDiv %157 %258 %259
1557         %261 = OpFAdd %157 %255 %260
1558                OpStore %254 %261
1559                OpBranch %252
1560         %262 = OpLabel
1561         %263 = OpAccessChain %245 %243 %244
1562         %264 = OpLoad %157 %263
1563         %265 = OpConvertFToS %6 %264
1564         %267 = OpSLessThan %31 %265 %266
1565                OpSelectionMerge %269 None
1566                OpBranchConditional %267 %268 %275
1567         %268 = OpLabel
1568         %270 = OpAccessChain %43 %41 %22
1569         %271 = OpLoad %6 %270
1570         %272 = OpConvertSToF %157 %271
1571         %273 = OpFDiv %157 %272 %259
1572         %274 = OpFAdd %157 %255 %273
1573                OpStore %254 %274
1574                OpBranch %269
1575         %275 = OpLabel
1576         %276 = OpAccessChain %245 %243 %244
1577         %277 = OpLoad %157 %276
1578         %278 = OpConvertFToS %6 %277
1579         %280 = OpSLessThan %31 %278 %279
1580                OpSelectionMerge %282 None
1581                OpBranchConditional %280 %281 %288
1582         %281 = OpLabel
1583         %283 = OpAccessChain %43 %41 %136
1584         %284 = OpLoad %6 %283
1585         %285 = OpConvertSToF %157 %284
1586         %286 = OpFDiv %157 %285 %259
1587         %287 = OpFAdd %157 %255 %286
1588                OpStore %254 %287
1589                OpBranch %282
1590         %288 = OpLabel
1591         %289 = OpAccessChain %245 %243 %244
1592         %290 = OpLoad %157 %289
1593         %291 = OpConvertFToS %6 %290
1594         %293 = OpSLessThan %31 %291 %292
1595                OpSelectionMerge %295 None
1596                OpBranchConditional %293 %294 %301
1597         %294 = OpLabel
1598         %296 = OpAccessChain %43 %41 %188
1599         %297 = OpLoad %6 %296
1600         %298 = OpConvertSToF %157 %297
1601         %299 = OpFDiv %157 %298 %259
1602         %300 = OpFAdd %157 %255 %299
1603                OpStore %254 %300
1604                OpBranch %295
1605         %301 = OpLabel
1606         %302 = OpAccessChain %245 %243 %244
1607         %303 = OpLoad %157 %302
1608         %304 = OpConvertFToS %6 %303
1609         %306 = OpSLessThan %31 %304 %305
1610                OpSelectionMerge %308 None
1611                OpBranchConditional %306 %307 %310
1612         %307 = OpLabel
1613                OpKill
1614         %310 = OpLabel
1615         %311 = OpAccessChain %245 %243 %244
1616         %312 = OpLoad %157 %311
1617         %313 = OpConvertFToS %6 %312
1618         %315 = OpSLessThan %31 %313 %314
1619                OpSelectionMerge %317 None
1620                OpBranchConditional %315 %316 %324
1621         %316 = OpLabel
1622         %319 = OpAccessChain %43 %41 %318
1623         %320 = OpLoad %6 %319
1624         %321 = OpConvertSToF %157 %320
1625         %322 = OpFDiv %157 %321 %259
1626         %323 = OpFAdd %157 %255 %322
1627                OpStore %254 %323
1628                OpBranch %317
1629         %324 = OpLabel
1630         %325 = OpAccessChain %245 %243 %244
1631         %326 = OpLoad %157 %325
1632         %327 = OpConvertFToS %6 %326
1633         %329 = OpSLessThan %31 %327 %328
1634                OpSelectionMerge %331 None
1635                OpBranchConditional %329 %330 %338
1636         %330 = OpLabel
1637         %333 = OpAccessChain %43 %41 %332
1638         %334 = OpLoad %6 %333
1639         %335 = OpConvertSToF %157 %334
1640         %336 = OpFDiv %157 %335 %259
1641         %337 = OpFAdd %157 %255 %336
1642                OpStore %254 %337
1643                OpBranch %331
1644         %338 = OpLabel
1645         %339 = OpAccessChain %245 %243 %244
1646         %340 = OpLoad %157 %339
1647         %341 = OpConvertFToS %6 %340
1648         %343 = OpSLessThan %31 %341 %342
1649                OpSelectionMerge %345 None
1650                OpBranchConditional %343 %344 %352
1651         %344 = OpLabel
1652         %347 = OpAccessChain %43 %41 %346
1653         %348 = OpLoad %6 %347
1654         %349 = OpConvertSToF %157 %348
1655         %350 = OpFDiv %157 %349 %259
1656         %351 = OpFAdd %157 %255 %350
1657                OpStore %254 %351
1658                OpBranch %345
1659         %352 = OpLabel
1660         %353 = OpAccessChain %245 %243 %244
1661         %354 = OpLoad %157 %353
1662         %355 = OpConvertFToS %6 %354
1663         %357 = OpSLessThan %31 %355 %356
1664                OpSelectionMerge %359 None
1665                OpBranchConditional %357 %358 %366
1666         %358 = OpLabel
1667         %361 = OpAccessChain %43 %41 %360
1668         %362 = OpLoad %6 %361
1669         %363 = OpConvertSToF %157 %362
1670         %364 = OpFDiv %157 %363 %259
1671         %365 = OpFAdd %157 %255 %364
1672                OpStore %254 %365
1673                OpBranch %359
1674         %366 = OpLabel
1675                OpKill
1676         %359 = OpLabel
1677                OpBranch %345
1678         %345 = OpLabel
1679                OpBranch %331
1680         %331 = OpLabel
1681                OpBranch %317
1682         %317 = OpLabel
1683                OpBranch %308
1684         %308 = OpLabel
1685                OpBranch %295
1686         %295 = OpLabel
1687                OpBranch %282
1688         %282 = OpLabel
1689                OpBranch %269
1690         %269 = OpLabel
1691                OpBranch %252
1692         %252 = OpLabel
1693         %370 = OpLoad %157 %254
1694         %372 = OpCompositeConstruct %371 %370 %370 %370
1695         %374 = OpCompositeExtract %157 %372 0
1696         %375 = OpCompositeExtract %157 %372 1
1697         %376 = OpCompositeExtract %157 %372 2
1698         %377 = OpCompositeConstruct %241 %374 %375 %376 %373
1699                OpStore %369 %377
1700                OpReturn
1701                OpFunctionEnd
1702          %12 = OpFunction %2 None %8
1703           %9 = OpFunctionParameter %7
1704          %10 = OpFunctionParameter %7
1705          %11 = OpFunctionParameter %7
1706          %13 = OpLabel
1707          %16 = OpVariable %7 Function
1708          %18 = OpVariable %7 Function
1709          %20 = OpVariable %7 Function
1710          %87 = OpVariable %7 Function
1711          %17 = OpLoad %6 %9
1712                OpStore %16 %17
1713          %19 = OpLoad %6 %9
1714                OpStore %18 %19
1715          %21 = OpLoad %6 %10
1716          %23 = OpIAdd %6 %21 %22
1717                OpStore %20 %23
1718                OpBranch %24
1719          %24 = OpLabel
1720         %643 = OpFOrdGreaterThanEqual %31 %373 %575
1721                OpLoopMerge %26 %27 None
1722                OpBranchConditional %643 %28 %27
1723          %28 = OpLabel
1724          %29 = OpLoad %6 %18
1725          %30 = OpLoad %6 %10
1726          %32 = OpSLessThanEqual %31 %29 %30
1727          %33 = OpLoad %6 %20
1728          %34 = OpLoad %6 %11
1729          %35 = OpSLessThanEqual %31 %33 %34
1730          %36 = OpLogicalAnd %31 %32 %35
1731                OpBranchConditional %36 %25 %26
1732          %25 = OpLabel
1733          %42 = OpLoad %6 %18
1734          %44 = OpAccessChain %43 %41 %42
1735          %45 = OpLoad %6 %44
1736          %46 = OpLoad %6 %20
1737          %47 = OpAccessChain %43 %41 %46
1738          %48 = OpLoad %6 %47
1739          %49 = OpSLessThan %31 %45 %48
1740                OpBranch %50
1741          %50 = OpLabel
1742                OpSelectionMerge %479 None
1743                OpBranchConditional %49 %480 %482
1744         %480 = OpLabel
1745         %481 = OpLoad %6 %16
1746                OpBranch %479
1747         %482 = OpLabel
1748         %483 = OpCopyObject %6 %484
1749                OpBranch %479
1750         %479 = OpLabel
1751          %53 = OpPhi %6 %481 %480 %483 %482
1752          %54 = OpIAdd %6 %53 %22
1753                OpBranch %486
1754         %486 = OpLabel
1755                OpSelectionMerge %536 None
1756                OpBranchConditional %49 %537 %536
1757         %537 = OpLabel
1758                OpStore %16 %54
1759         %622 = OpAccessChain %163 %161 %105 %105
1760         %623 = OpLoad %157 %622
1761         %621 = OpFUnordGreaterThan %31 %373 %623
1762                OpBranchConditional %621 %536 %27
1763         %536 = OpLabel
1764                OpBranch %485
1765         %485 = OpLabel
1766         %595 = OpAccessChain %163 %161 %105 %22
1767         %596 = OpLoad %157 %595
1768         %594 = OpFOrdGreaterThanEqual %31 %596 %575
1769                OpBranchConditional %594 %490 %27
1770         %490 = OpLabel
1771         %491 = OpCopyObject %6 %484
1772                OpBranch %488
1773         %488 = OpLabel
1774                OpSelectionMerge %538 None
1775                OpBranchConditional %49 %539 %541
1776         %539 = OpLabel
1777         %540 = OpLoad %6 %18
1778                OpBranch %538
1779         %541 = OpLabel
1780         %542 = OpCopyObject %6 %484
1781                OpBranch %538
1782         %538 = OpLabel
1783         %489 = OpPhi %6 %540 %539 %542 %541
1784                OpBranch %487
1785         %487 = OpLabel
1786          %55 = OpSelect %6 %49 %489 %491
1787          %56 = OpIAdd %6 %55 %22
1788                OpSelectionMerge %492 None
1789                OpBranchConditional %49 %493 %492
1790         %493 = OpLabel
1791                OpStore %18 %56
1792                OpBranch %492
1793         %492 = OpLabel
1794          %57 = OpAccessChain %43 %41 %55
1795                OpBranch %497
1796         %497 = OpLabel
1797         %498 = OpCopyObject %6 %484
1798                OpBranch %495
1799         %495 = OpLabel
1800                OpSelectionMerge %545 None
1801                OpBranchConditional %49 %546 %548
1802         %546 = OpLabel
1803         %547 = OpLoad %6 %57
1804         %598 = OpAccessChain %163 %161 %105 %22
1805         %599 = OpLoad %157 %598
1806         %597 = OpFUnordGreaterThan %31 %575 %599
1807                OpBranchConditional %597 %27 %545
1808         %548 = OpLabel
1809         %549 = OpCopyObject %6 %484
1810         %619 = OpAccessChain %163 %161 %105 %22
1811         %620 = OpLoad %157 %619
1812         %618 = OpFUnordGreaterThanEqual %31 %620 %575
1813                OpBranchConditional %618 %545 %27
1814         %545 = OpLabel
1815         %496 = OpPhi %6 %547 %546 %549 %548
1816                OpBranch %494
1817         %494 = OpLabel
1818          %58 = OpSelect %6 %49 %496 %498
1819          %59 = OpAccessChain %43 %52 %53
1820                OpSelectionMerge %499 None
1821                OpBranchConditional %49 %500 %499
1822         %500 = OpLabel
1823                OpStore %59 %58
1824                OpBranch %499
1825         %499 = OpLabel
1826                OpBranch %60
1827          %60 = OpLabel
1828                OpSelectionMerge %501 None
1829                OpBranchConditional %49 %504 %502
1830         %502 = OpLabel
1831         %503 = OpLoad %6 %16
1832                OpBranch %501
1833         %504 = OpLabel
1834         %505 = OpCopyObject %6 %484
1835                OpBranch %501
1836         %501 = OpLabel
1837          %61 = OpPhi %6 %503 %502 %505 %504
1838          %62 = OpIAdd %6 %61 %22
1839                OpSelectionMerge %506 None
1840                OpBranchConditional %49 %506 %507
1841         %507 = OpLabel
1842                OpStore %16 %62
1843                OpBranch %506
1844         %506 = OpLabel
1845         %602 = OpAccessChain %163 %161 %105 %105
1846         %603 = OpLoad %157 %602
1847         %601 = OpFUnordGreaterThan %31 %373 %603
1848                OpBranchConditional %601 %509 %27
1849         %509 = OpLabel
1850                OpSelectionMerge %559 None
1851                OpBranchConditional %49 %562 %560
1852         %560 = OpLabel
1853         %561 = OpLoad %6 %20
1854                OpBranch %559
1855         %562 = OpLabel
1856         %563 = OpCopyObject %6 %484
1857                OpBranch %559
1858         %559 = OpLabel
1859         %510 = OpPhi %6 %561 %560 %563 %562
1860                OpBranch %511
1861         %511 = OpLabel
1862         %512 = OpCopyObject %6 %484
1863                OpBranch %508
1864         %508 = OpLabel
1865          %63 = OpSelect %6 %49 %512 %510
1866          %64 = OpIAdd %6 %63 %22
1867                OpSelectionMerge %513 None
1868                OpBranchConditional %49 %513 %514
1869         %514 = OpLabel
1870                OpStore %20 %64
1871                OpBranch %513
1872         %513 = OpLabel
1873          %65 = OpAccessChain %43 %41 %63
1874                OpSelectionMerge %515 None
1875                OpBranchConditional %49 %518 %516
1876         %516 = OpLabel
1877         %517 = OpLoad %6 %65
1878                OpBranch %515
1879         %518 = OpLabel
1880         %519 = OpCopyObject %6 %484
1881                OpBranch %515
1882         %515 = OpLabel
1883          %66 = OpPhi %6 %517 %516 %519 %518
1884          %67 = OpAccessChain %43 %52 %61
1885                OpSelectionMerge %520 None
1886                OpBranchConditional %49 %520 %521
1887         %521 = OpLabel
1888                OpStore %67 %66
1889                OpBranch %520
1890         %520 = OpLabel
1891                OpBranch %51
1892          %51 = OpLabel
1893                OpBranch %27
1894          %27 = OpLabel
1895                OpBranch %24
1896          %26 = OpLabel
1897                OpBranch %68
1898          %68 = OpLabel
1899                OpLoopMerge %70 %71 None
1900                OpBranch %72
1901          %72 = OpLabel
1902          %73 = OpLoad %6 %18
1903          %75 = OpSLessThan %31 %73 %74
1904          %76 = OpLoad %6 %18
1905          %77 = OpLoad %6 %10
1906          %78 = OpSLessThanEqual %31 %76 %77
1907          %79 = OpLogicalAnd %31 %75 %78
1908                OpBranchConditional %79 %69 %70
1909          %69 = OpLabel
1910          %80 = OpLoad %6 %16
1911          %81 = OpIAdd %6 %80 %22
1912                OpStore %16 %81
1913          %82 = OpLoad %6 %18
1914          %83 = OpIAdd %6 %82 %22
1915                OpStore %18 %83
1916          %84 = OpAccessChain %43 %41 %82
1917          %85 = OpLoad %6 %84
1918          %86 = OpAccessChain %43 %52 %80
1919                OpStore %86 %85
1920                OpBranch %71
1921          %71 = OpLabel
1922                OpBranch %68
1923          %70 = OpLabel
1924          %88 = OpLoad %6 %9
1925                OpStore %87 %88
1926                OpBranch %89
1927          %89 = OpLabel
1928                OpLoopMerge %91 %92 None
1929                OpBranch %93
1930          %93 = OpLabel
1931          %94 = OpLoad %6 %87
1932          %95 = OpLoad %6 %11
1933          %96 = OpSLessThanEqual %31 %94 %95
1934                OpBranchConditional %96 %90 %91
1935          %90 = OpLabel
1936          %97 = OpLoad %6 %87
1937          %98 = OpLoad %6 %87
1938          %99 = OpAccessChain %43 %52 %98
1939         %100 = OpLoad %6 %99
1940         %101 = OpAccessChain %43 %41 %97
1941                OpStore %101 %100
1942                OpBranch %92
1943          %92 = OpLabel
1944         %102 = OpLoad %6 %87
1945         %103 = OpIAdd %6 %102 %22
1946                OpStore %87 %103
1947                OpBranch %89
1948          %91 = OpLabel
1949                OpReturn
1950                OpFunctionEnd
1951          %14 = OpFunction %2 None %3
1952          %15 = OpLabel
1953         %104 = OpVariable %7 Function
1954         %106 = OpVariable %7 Function
1955         %108 = OpVariable %7 Function
1956         %117 = OpVariable %7 Function
1957         %127 = OpVariable %7 Function
1958         %129 = OpVariable %7 Function
1959         %134 = OpVariable %7 Function
1960         %143 = OpVariable %7 Function
1961         %145 = OpVariable %7 Function
1962         %147 = OpVariable %7 Function
1963                OpStore %104 %105
1964                OpStore %106 %107
1965                OpStore %108 %22
1966                OpBranch %109
1967         %109 = OpLabel
1968                OpLoopMerge %111 %112 None
1969                OpBranch %113
1970         %113 = OpLabel
1971         %114 = OpLoad %6 %108
1972         %115 = OpLoad %6 %106
1973         %116 = OpSLessThanEqual %31 %114 %115
1974                OpBranchConditional %116 %110 %111
1975         %110 = OpLabel
1976         %118 = OpLoad %6 %104
1977                OpStore %117 %118
1978                OpBranch %119
1979         %119 = OpLabel
1980                OpLoopMerge %121 %122 None
1981                OpBranch %123
1982         %123 = OpLabel
1983         %124 = OpLoad %6 %117
1984         %125 = OpLoad %6 %106
1985         %126 = OpSLessThan %31 %124 %125
1986                OpBranchConditional %126 %120 %121
1987         %120 = OpLabel
1988         %128 = OpLoad %6 %117
1989                OpStore %127 %128
1990         %130 = OpLoad %6 %117
1991         %131 = OpLoad %6 %108
1992         %132 = OpIAdd %6 %130 %131
1993         %133 = OpISub %6 %132 %22
1994                OpStore %129 %133
1995         %135 = OpLoad %6 %117
1996         %137 = OpLoad %6 %108
1997         %138 = OpIMul %6 %136 %137
1998         %139 = OpIAdd %6 %135 %138
1999         %140 = OpISub %6 %139 %22
2000         %141 = OpLoad %6 %106
2001         %142 = OpExtInst %6 %1 SMin %140 %141
2002                OpStore %134 %142
2003         %144 = OpLoad %6 %127
2004                OpStore %143 %144
2005         %146 = OpLoad %6 %129
2006                OpStore %145 %146
2007         %148 = OpLoad %6 %134
2008                OpStore %147 %148
2009         %149 = OpFunctionCall %2 %12 %143 %145 %147
2010                OpBranch %122
2011         %122 = OpLabel
2012         %150 = OpLoad %6 %108
2013         %151 = OpIMul %6 %136 %150
2014         %152 = OpLoad %6 %117
2015         %153 = OpIAdd %6 %152 %151
2016                OpStore %117 %153
2017                OpBranch %119
2018         %121 = OpLabel
2019                OpBranch %112
2020         %112 = OpLabel
2021         %154 = OpLoad %6 %108
2022         %155 = OpIMul %6 %136 %154
2023                OpStore %108 %155
2024                OpBranch %109
2025         %111 = OpLabel
2026                OpReturn
2027                OpFunctionEnd
2028 END
2029
2030 # uniforms for variant_2
2031
2032 # injectionSwitch
2033 BUFFER variant_2_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
2034  0.0 1.0
2035 END
2036
2037 BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
2038
2039 PIPELINE graphics variant_2_pipeline
2040   ATTACH variant_2_vertex_shader
2041   ATTACH variant_2_fragment_shader
2042   FRAMEBUFFER_SIZE 256 256
2043   BIND BUFFER variant_2_framebuffer AS color LOCATION 0
2044   BIND BUFFER variant_2_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
2045 END
2046 CLEAR_COLOR variant_2_pipeline 0 0 0 255
2047
2048 CLEAR variant_2_pipeline
2049 RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256
2050
2051 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
2052 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005