• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
24SHADER vertex reference_vertex_shader PASSTHROUGH
25
26SHADER 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
587END
588
589# uniforms for reference
590
591# injectionSwitch
592BUFFER reference_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
593 0.0 1.0
594END
595
596BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
597
598PIPELINE 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
604END
605CLEAR_COLOR reference_pipeline 0 0 0 255
606
607CLEAR reference_pipeline
608RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
609
610
611SHADER vertex variant_vertex_shader PASSTHROUGH
612
613SHADER 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
1190END
1191
1192# uniforms for variant
1193
1194# injectionSwitch
1195BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
1196 0.0 1.0
1197END
1198
1199BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1200
1201PIPELINE 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
1207END
1208CLEAR_COLOR variant_pipeline 0 0 0 255
1209
1210CLEAR variant_pipeline
1211RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
1212
1213EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
1214