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