3 # Copyright 2020 Google LLC
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
18 # A test for a bug found by the GraphicsFuzz project.
20 # Short description: Equivalent shaders, one with a dead break and an Unroll annotation
22 # The test passes because both shaders render the same image.
24 SHADER vertex reference_vertex_shader PASSTHROUGH
26 SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
29 ; Generator: Khronos Glslang Reference Front End; 7
33 %1 = OpExtInstImport "GLSL.std.450"
34 OpMemoryModel Logical GLSL450
35 OpEntryPoint Fragment %4 "main" %12 %435
36 OpExecutionMode %4 OriginUpperLeft
40 OpName %12 "gl_FragCoord"
42 OpMemberName %15 0 "resolution"
50 OpName %74 "directions"
53 OpName %435 "_GLF_color"
54 OpDecorate %12 BuiltIn FragCoord
55 OpMemberDecorate %15 0 Offset 0
57 OpDecorate %17 DescriptorSet 0
58 OpDecorate %17 Binding 0
59 OpDecorate %435 Location 0
61 %3 = OpTypeFunction %2
63 %7 = OpTypeVector %6 2
64 %8 = OpTypePointer Function %7
65 %10 = OpTypeVector %6 4
66 %11 = OpTypePointer Input %10
67 %12 = OpVariable %11 Input
69 %16 = OpTypePointer Uniform %15
70 %17 = OpVariable %16 Uniform
72 %19 = OpConstant %18 0
73 %20 = OpTypePointer Uniform %7
74 %24 = OpTypeVector %18 2
75 %25 = OpTypePointer Function %24
77 %28 = OpConstant %27 0
78 %29 = OpTypePointer Function %6
79 %32 = OpConstant %6 16
80 %35 = OpConstant %27 1
81 %41 = OpTypePointer Function %18
82 %49 = OpConstant %18 256
84 %52 = OpConstant %27 256
85 %53 = OpTypeArray %18 %52
86 %54 = OpTypePointer Private %53
87 %55 = OpVariable %54 Private
88 %57 = OpTypePointer Private %18
89 %60 = OpConstant %18 1
90 %63 = OpConstantComposite %24 %19 %19
91 %64 = OpTypePointer Function %50
92 %66 = OpConstantTrue %50
93 %82 = OpConstant %18 2
94 %86 = OpConstant %18 16
95 %119 = OpConstant %18 14
96 %162 = OpConstantFalse %50
97 %169 = OpConstant %18 8
98 %434 = OpTypePointer Output %10
99 %435 = OpVariable %434 Output
100 %436 = OpConstant %6 1
101 %437 = OpConstantComposite %10 %436 %436 %436 %436
102 %440 = OpConstant %6 0
103 %441 = OpConstantComposite %10 %440 %440 %440 %436
104 %4 = OpFunction %2 None %3
106 %9 = OpVariable %8 Function
107 %26 = OpVariable %25 Function
108 %42 = OpVariable %41 Function
109 %62 = OpVariable %25 Function
110 %65 = OpVariable %64 Function
111 %67 = OpVariable %41 Function
112 %74 = OpVariable %41 Function
113 %171 = OpVariable %41 Function
114 %208 = OpVariable %41 Function
116 %14 = OpVectorShuffle %7 %13 %13 0 1
117 %21 = OpAccessChain %20 %17 %19
119 %23 = OpFDiv %7 %14 %22
121 %30 = OpAccessChain %29 %9 %28
123 %33 = OpFMul %6 %31 %32
124 %34 = OpConvertFToS %18 %33
125 %36 = OpAccessChain %29 %9 %35
127 %38 = OpFMul %6 %37 %32
128 %39 = OpConvertFToS %18 %38
129 %40 = OpCompositeConstruct %24 %34 %39
134 OpLoopMerge %45 %46 None
138 %51 = OpSLessThan %50 %48 %49
139 OpBranchConditional %51 %44 %45
142 %58 = OpAccessChain %57 %55 %56
147 %61 = OpIAdd %18 %59 %60
156 OpLoopMerge %70 %71 None
160 %73 = OpIAdd %18 %72 %60
163 %75 = OpAccessChain %41 %62 %28
165 %77 = OpSGreaterThan %50 %76 %19
166 OpSelectionMerge %79 None
167 OpBranchConditional %77 %78 %79
169 %80 = OpAccessChain %41 %62 %28
171 %83 = OpISub %18 %81 %82
172 %84 = OpAccessChain %41 %62 %35
174 %87 = OpIMul %18 %85 %86
175 %88 = OpIAdd %18 %83 %87
176 %89 = OpAccessChain %57 %55 %88
178 %91 = OpIEqual %50 %90 %19
181 %92 = OpPhi %50 %77 %69 %91 %78
182 OpSelectionMerge %94 None
183 OpBranchConditional %92 %93 %94
186 %96 = OpIAdd %18 %95 %60
190 %97 = OpAccessChain %41 %62 %35
192 %99 = OpSGreaterThan %50 %98 %19
193 OpSelectionMerge %101 None
194 OpBranchConditional %99 %100 %101
196 %102 = OpAccessChain %41 %62 %28
197 %103 = OpLoad %18 %102
198 %104 = OpAccessChain %41 %62 %35
199 %105 = OpLoad %18 %104
200 %106 = OpISub %18 %105 %82
201 %107 = OpIMul %18 %106 %86
202 %108 = OpIAdd %18 %103 %107
203 %109 = OpAccessChain %57 %55 %108
204 %110 = OpLoad %18 %109
205 %111 = OpIEqual %50 %110 %19
208 %112 = OpPhi %50 %99 %94 %111 %100
209 OpSelectionMerge %114 None
210 OpBranchConditional %112 %113 %114
212 %115 = OpLoad %18 %74
213 %116 = OpIAdd %18 %115 %60
217 %117 = OpAccessChain %41 %62 %28
218 %118 = OpLoad %18 %117
219 %120 = OpSLessThan %50 %118 %119
220 OpSelectionMerge %122 None
221 OpBranchConditional %120 %121 %122
223 %123 = OpAccessChain %41 %62 %28
224 %124 = OpLoad %18 %123
225 %125 = OpIAdd %18 %124 %82
226 %126 = OpAccessChain %41 %62 %35
227 %127 = OpLoad %18 %126
228 %128 = OpIMul %18 %127 %86
229 %129 = OpIAdd %18 %125 %128
230 %130 = OpAccessChain %57 %55 %129
231 %131 = OpLoad %18 %130
232 %132 = OpIEqual %50 %131 %19
235 %133 = OpPhi %50 %120 %114 %132 %121
236 OpSelectionMerge %135 None
237 OpBranchConditional %133 %134 %135
239 %136 = OpLoad %18 %74
240 %137 = OpIAdd %18 %136 %60
244 %138 = OpAccessChain %41 %62 %35
245 %139 = OpLoad %18 %138
246 %140 = OpSLessThan %50 %139 %119
247 OpSelectionMerge %142 None
248 OpBranchConditional %140 %141 %142
250 %143 = OpAccessChain %41 %62 %28
251 %144 = OpLoad %18 %143
252 %145 = OpAccessChain %41 %62 %35
253 %146 = OpLoad %18 %145
254 %147 = OpIAdd %18 %146 %82
255 %148 = OpIMul %18 %147 %86
256 %149 = OpIAdd %18 %144 %148
257 %150 = OpAccessChain %57 %55 %149
258 %151 = OpLoad %18 %150
259 %152 = OpIEqual %50 %151 %19
262 %153 = OpPhi %50 %140 %135 %152 %141
263 OpSelectionMerge %155 None
264 OpBranchConditional %153 %154 %155
266 %156 = OpLoad %18 %74
267 %157 = OpIAdd %18 %156 %60
271 %158 = OpLoad %18 %74
272 %159 = OpIEqual %50 %158 %19
273 OpSelectionMerge %161 None
274 OpBranchConditional %159 %160 %207
280 OpLoopMerge %165 %166 None
283 %168 = OpLoad %18 %42
284 %170 = OpSLessThan %50 %168 %169
285 OpBranchConditional %170 %164 %165
290 OpLoopMerge %174 %175 None
293 %177 = OpLoad %18 %171
294 %178 = OpSLessThan %50 %177 %169
295 OpBranchConditional %178 %173 %174
297 %179 = OpLoad %18 %171
298 %180 = OpIMul %18 %179 %82
299 %181 = OpLoad %18 %42
300 %182 = OpIMul %18 %181 %82
301 %183 = OpIMul %18 %182 %86
302 %184 = OpIAdd %18 %180 %183
303 %185 = OpAccessChain %57 %55 %184
304 %186 = OpLoad %18 %185
305 %187 = OpIEqual %50 %186 %19
306 OpSelectionMerge %189 None
307 OpBranchConditional %187 %188 %189
309 %190 = OpLoad %18 %171
310 %191 = OpIMul %18 %190 %82
311 %192 = OpAccessChain %41 %62 %28
313 %193 = OpLoad %18 %42
314 %194 = OpIMul %18 %193 %82
315 %195 = OpAccessChain %41 %62 %35
322 %196 = OpLoad %18 %171
323 %197 = OpIAdd %18 %196 %60
329 %198 = OpLoad %18 %42
330 %199 = OpIAdd %18 %198 %60
334 %200 = OpAccessChain %41 %62 %28
335 %201 = OpLoad %18 %200
336 %202 = OpAccessChain %41 %62 %35
337 %203 = OpLoad %18 %202
338 %204 = OpIMul %18 %203 %86
339 %205 = OpIAdd %18 %201 %204
340 %206 = OpAccessChain %57 %55 %205
344 %209 = OpLoad %18 %67
345 %210 = OpLoad %18 %74
346 %211 = OpSMod %18 %209 %210
348 %212 = OpLoad %18 %74
349 %213 = OpLoad %18 %67
350 %214 = OpIAdd %18 %213 %212
352 %215 = OpLoad %18 %208
353 %216 = OpSGreaterThanEqual %50 %215 %19
354 OpSelectionMerge %218 None
355 OpBranchConditional %216 %217 %218
357 %219 = OpAccessChain %41 %62 %28
358 %220 = OpLoad %18 %219
359 %221 = OpSGreaterThan %50 %220 %19
362 %222 = OpPhi %50 %216 %207 %221 %217
363 OpSelectionMerge %224 None
364 OpBranchConditional %222 %223 %224
366 %225 = OpAccessChain %41 %62 %28
367 %226 = OpLoad %18 %225
368 %227 = OpISub %18 %226 %82
369 %228 = OpAccessChain %41 %62 %35
370 %229 = OpLoad %18 %228
371 %230 = OpIMul %18 %229 %86
372 %231 = OpIAdd %18 %227 %230
373 %232 = OpAccessChain %57 %55 %231
374 %233 = OpLoad %18 %232
375 %234 = OpIEqual %50 %233 %19
378 %235 = OpPhi %50 %222 %218 %234 %223
379 OpSelectionMerge %237 None
380 OpBranchConditional %235 %236 %237
382 %238 = OpLoad %18 %208
383 %239 = OpISub %18 %238 %60
385 %240 = OpAccessChain %41 %62 %28
386 %241 = OpLoad %18 %240
387 %242 = OpAccessChain %41 %62 %35
388 %243 = OpLoad %18 %242
389 %244 = OpIMul %18 %243 %86
390 %245 = OpIAdd %18 %241 %244
391 %246 = OpAccessChain %57 %55 %245
393 %247 = OpAccessChain %41 %62 %28
394 %248 = OpLoad %18 %247
395 %249 = OpISub %18 %248 %60
396 %250 = OpAccessChain %41 %62 %35
397 %251 = OpLoad %18 %250
398 %252 = OpIMul %18 %251 %86
399 %253 = OpIAdd %18 %249 %252
400 %254 = OpAccessChain %57 %55 %253
402 %255 = OpAccessChain %41 %62 %28
403 %256 = OpLoad %18 %255
404 %257 = OpISub %18 %256 %82
405 %258 = OpAccessChain %41 %62 %35
406 %259 = OpLoad %18 %258
407 %260 = OpIMul %18 %259 %86
408 %261 = OpIAdd %18 %257 %260
409 %262 = OpAccessChain %57 %55 %261
411 %263 = OpAccessChain %41 %62 %28
412 %264 = OpLoad %18 %263
413 %265 = OpISub %18 %264 %82
414 %266 = OpAccessChain %41 %62 %28
418 %267 = OpLoad %18 %208
419 %268 = OpSGreaterThanEqual %50 %267 %19
420 OpSelectionMerge %270 None
421 OpBranchConditional %268 %269 %270
423 %271 = OpAccessChain %41 %62 %35
424 %272 = OpLoad %18 %271
425 %273 = OpSGreaterThan %50 %272 %19
428 %274 = OpPhi %50 %268 %237 %273 %269
429 OpSelectionMerge %276 None
430 OpBranchConditional %274 %275 %276
432 %277 = OpAccessChain %41 %62 %28
433 %278 = OpLoad %18 %277
434 %279 = OpAccessChain %41 %62 %35
435 %280 = OpLoad %18 %279
436 %281 = OpISub %18 %280 %82
437 %282 = OpIMul %18 %281 %86
438 %283 = OpIAdd %18 %278 %282
439 %284 = OpAccessChain %57 %55 %283
440 %285 = OpLoad %18 %284
441 %286 = OpIEqual %50 %285 %19
444 %287 = OpPhi %50 %274 %270 %286 %275
445 OpSelectionMerge %289 None
446 OpBranchConditional %287 %288 %289
448 %290 = OpLoad %18 %208
449 %291 = OpISub %18 %290 %60
451 %292 = OpAccessChain %41 %62 %28
452 %293 = OpLoad %18 %292
453 %294 = OpAccessChain %41 %62 %35
454 %295 = OpLoad %18 %294
455 %296 = OpIMul %18 %295 %86
456 %297 = OpIAdd %18 %293 %296
457 %298 = OpAccessChain %57 %55 %297
459 %299 = OpAccessChain %41 %62 %28
460 %300 = OpLoad %18 %299
461 %301 = OpAccessChain %41 %62 %35
462 %302 = OpLoad %18 %301
463 %303 = OpISub %18 %302 %60
464 %304 = OpIMul %18 %303 %86
465 %305 = OpIAdd %18 %300 %304
466 %306 = OpAccessChain %57 %55 %305
468 %307 = OpAccessChain %41 %62 %28
469 %308 = OpLoad %18 %307
470 %309 = OpAccessChain %41 %62 %35
471 %310 = OpLoad %18 %309
472 %311 = OpISub %18 %310 %82
473 %312 = OpIMul %18 %311 %86
474 %313 = OpIAdd %18 %308 %312
475 %314 = OpAccessChain %57 %55 %313
477 %315 = OpAccessChain %41 %62 %35
478 %316 = OpLoad %18 %315
479 %317 = OpISub %18 %316 %82
480 %318 = OpAccessChain %41 %62 %35
484 %319 = OpLoad %18 %208
485 %320 = OpSGreaterThanEqual %50 %319 %19
486 OpSelectionMerge %322 None
487 OpBranchConditional %320 %321 %322
489 %323 = OpAccessChain %41 %62 %28
490 %324 = OpLoad %18 %323
491 %325 = OpSLessThan %50 %324 %119
494 %326 = OpPhi %50 %320 %289 %325 %321
495 OpSelectionMerge %328 None
496 OpBranchConditional %326 %327 %328
498 %329 = OpAccessChain %41 %62 %28
499 %330 = OpLoad %18 %329
500 %331 = OpIAdd %18 %330 %82
501 %332 = OpAccessChain %41 %62 %35
502 %333 = OpLoad %18 %332
503 %334 = OpIMul %18 %333 %86
504 %335 = OpIAdd %18 %331 %334
505 %336 = OpAccessChain %57 %55 %335
506 %337 = OpLoad %18 %336
507 %338 = OpIEqual %50 %337 %19
510 %339 = OpPhi %50 %326 %322 %338 %327
511 OpSelectionMerge %341 None
512 OpBranchConditional %339 %340 %341
514 %342 = OpLoad %18 %208
515 %343 = OpISub %18 %342 %60
517 %344 = OpAccessChain %41 %62 %28
518 %345 = OpLoad %18 %344
519 %346 = OpAccessChain %41 %62 %35
520 %347 = OpLoad %18 %346
521 %348 = OpIMul %18 %347 %86
522 %349 = OpIAdd %18 %345 %348
523 %350 = OpAccessChain %57 %55 %349
525 %351 = OpAccessChain %41 %62 %28
526 %352 = OpLoad %18 %351
527 %353 = OpIAdd %18 %352 %60
528 %354 = OpAccessChain %41 %62 %35
529 %355 = OpLoad %18 %354
530 %356 = OpIMul %18 %355 %86
531 %357 = OpIAdd %18 %353 %356
532 %358 = OpAccessChain %57 %55 %357
534 %359 = OpAccessChain %41 %62 %28
535 %360 = OpLoad %18 %359
536 %361 = OpIAdd %18 %360 %82
537 %362 = OpAccessChain %41 %62 %35
538 %363 = OpLoad %18 %362
539 %364 = OpIMul %18 %363 %86
540 %365 = OpIAdd %18 %361 %364
541 %366 = OpAccessChain %57 %55 %365
543 %367 = OpAccessChain %41 %62 %28
544 %368 = OpLoad %18 %367
545 %369 = OpIAdd %18 %368 %82
546 %370 = OpAccessChain %41 %62 %28
550 %371 = OpLoad %18 %208
551 %372 = OpSGreaterThanEqual %50 %371 %19
552 OpSelectionMerge %374 None
553 OpBranchConditional %372 %373 %374
555 %375 = OpAccessChain %41 %62 %35
556 %376 = OpLoad %18 %375
557 %377 = OpSLessThan %50 %376 %119
560 %378 = OpPhi %50 %372 %341 %377 %373
561 OpSelectionMerge %380 None
562 OpBranchConditional %378 %379 %380
564 %381 = OpAccessChain %41 %62 %28
565 %382 = OpLoad %18 %381
566 %383 = OpAccessChain %41 %62 %35
567 %384 = OpLoad %18 %383
568 %385 = OpIAdd %18 %384 %82
569 %386 = OpIMul %18 %385 %86
570 %387 = OpIAdd %18 %382 %386
571 %388 = OpAccessChain %57 %55 %387
572 %389 = OpLoad %18 %388
573 %390 = OpIEqual %50 %389 %19
576 %391 = OpPhi %50 %378 %374 %390 %379
577 OpSelectionMerge %393 None
578 OpBranchConditional %391 %392 %393
580 %394 = OpLoad %18 %208
581 %395 = OpISub %18 %394 %60
583 %396 = OpAccessChain %41 %62 %28
584 %397 = OpLoad %18 %396
585 %398 = OpAccessChain %41 %62 %35
586 %399 = OpLoad %18 %398
587 %400 = OpIMul %18 %399 %86
588 %401 = OpIAdd %18 %397 %400
589 %402 = OpAccessChain %57 %55 %401
591 %403 = OpAccessChain %41 %62 %28
592 %404 = OpLoad %18 %403
593 %405 = OpAccessChain %41 %62 %35
594 %406 = OpLoad %18 %405
595 %407 = OpIAdd %18 %406 %60
596 %408 = OpIMul %18 %407 %86
597 %409 = OpIAdd %18 %404 %408
598 %410 = OpAccessChain %57 %55 %409
600 %411 = OpAccessChain %41 %62 %28
601 %412 = OpLoad %18 %411
602 %413 = OpAccessChain %41 %62 %35
603 %414 = OpLoad %18 %413
604 %415 = OpIAdd %18 %414 %82
605 %416 = OpIMul %18 %415 %86
606 %417 = OpIAdd %18 %412 %416
607 %418 = OpAccessChain %57 %55 %417
609 %419 = OpAccessChain %41 %62 %35
610 %420 = OpLoad %18 %419
611 %421 = OpIAdd %18 %420 %82
612 %422 = OpAccessChain %41 %62 %35
618 %423 = OpAccessChain %41 %26 %35
619 %424 = OpLoad %18 %423
620 %425 = OpIMul %18 %424 %86
621 %426 = OpAccessChain %41 %26 %28
622 %427 = OpLoad %18 %426
623 %428 = OpIAdd %18 %425 %427
624 %429 = OpAccessChain %57 %55 %428
625 %430 = OpLoad %18 %429
626 %431 = OpIEqual %50 %430 %60
627 OpSelectionMerge %433 None
628 OpBranchConditional %431 %432 %433
635 %439 = OpLoad %50 %65
636 OpBranchConditional %439 %68 %70
643 # uniforms for reference
646 BUFFER reference_resolution DATA_TYPE vec2<float> DATA
650 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
652 PIPELINE graphics reference_pipeline
653 ATTACH reference_vertex_shader
654 ATTACH reference_fragment_shader
655 FRAMEBUFFER_SIZE 64 64
656 BIND BUFFER reference_framebuffer AS color LOCATION 0
657 BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
659 CLEAR_COLOR reference_pipeline 0 0 0 255
661 CLEAR reference_pipeline
662 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 64 64
665 SHADER vertex variant_vertex_shader PASSTHROUGH
667 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
670 ; Generator: Khronos Glslang Reference Front End; 7
674 %1 = OpExtInstImport "GLSL.std.450"
675 OpMemoryModel Logical GLSL450
676 OpEntryPoint Fragment %4 "main" %12 %435
677 OpExecutionMode %4 OriginUpperLeft
681 OpName %12 "gl_FragCoord"
683 OpMemberName %15 0 "resolution"
691 OpName %74 "directions"
694 OpName %435 "_GLF_color"
695 OpDecorate %12 BuiltIn FragCoord
696 OpMemberDecorate %15 0 Offset 0
698 OpDecorate %17 DescriptorSet 0
699 OpDecorate %17 Binding 0
700 OpDecorate %435 Location 0
702 %3 = OpTypeFunction %2
704 %7 = OpTypeVector %6 2
705 %8 = OpTypePointer Function %7
706 %10 = OpTypeVector %6 4
707 %11 = OpTypePointer Input %10
708 %12 = OpVariable %11 Input
709 %15 = OpTypeStruct %7
710 %16 = OpTypePointer Uniform %15
711 %17 = OpVariable %16 Uniform
713 %19 = OpConstant %18 0
714 %20 = OpTypePointer Uniform %7
715 %24 = OpTypeVector %18 2
716 %25 = OpTypePointer Function %24
718 %28 = OpConstant %27 0
719 %29 = OpTypePointer Function %6
720 %32 = OpConstant %6 16
721 %35 = OpConstant %27 1
722 %41 = OpTypePointer Function %18
723 %49 = OpConstant %18 256
725 %52 = OpConstant %27 256
726 %53 = OpTypeArray %18 %52
727 %54 = OpTypePointer Private %53
728 %55 = OpVariable %54 Private
729 %57 = OpTypePointer Private %18
730 %60 = OpConstant %18 1
731 %63 = OpConstantComposite %24 %19 %19
732 %64 = OpTypePointer Function %50
733 %66 = OpConstantTrue %50
734 %82 = OpConstant %18 2
735 %86 = OpConstant %18 16
736 %119 = OpConstant %18 14
737 %162 = OpConstantFalse %50
738 %169 = OpConstant %18 8
739 %434 = OpTypePointer Output %10
740 %435 = OpVariable %434 Output
741 %436 = OpConstant %6 1
742 %437 = OpConstantComposite %10 %436 %436 %436 %436
743 %440 = OpConstant %6 0
744 %441 = OpConstantComposite %10 %440 %440 %440 %436
745 %551 = OpTypeMatrix %10 2
746 %555 = OpTypePointer Private %551
747 %556 = OpConstantComposite %10 %440 %440 %440 %440
748 %557 = OpConstantComposite %551 %556 %556
749 %558 = OpVariable %555 Private %557
750 %760 = OpConstantNull %50
751 %4 = OpFunction %2 None %3
753 %9 = OpVariable %8 Function
754 %26 = OpVariable %25 Function
755 %42 = OpVariable %41 Function
756 %62 = OpVariable %25 Function
757 %65 = OpVariable %64 Function
758 %67 = OpVariable %41 Function
759 %74 = OpVariable %41 Function
760 %171 = OpVariable %41 Function
761 %208 = OpVariable %41 Function
763 %14 = OpVectorShuffle %7 %13 %13 0 1
764 %564 = OpISub %18 %49 %119
765 %21 = OpAccessChain %20 %17 %19
767 %566 = OpSNegate %18 %564
768 %23 = OpFDiv %7 %14 %22
770 %30 = OpAccessChain %29 %9 %28
772 %33 = OpFMul %6 %31 %32
773 %34 = OpConvertFToS %18 %33
774 %36 = OpAccessChain %29 %9 %35
776 %38 = OpFMul %6 %37 %32
777 %39 = OpConvertFToS %18 %38
778 %40 = OpCompositeConstruct %24 %34 %39
783 OpLoopMerge %45 %46 None
787 %51 = OpSLessThan %50 %48 %49
788 OpBranchConditional %51 %44 %45
791 %58 = OpAccessChain %57 %55 %56
796 %61 = OpIAdd %18 %59 %60
805 OpLoopMerge %70 %71 None
809 %73 = OpIAdd %18 %72 %60
812 %75 = OpAccessChain %41 %62 %28
814 %77 = OpSGreaterThan %50 %76 %19
815 OpSelectionMerge %79 None
816 OpBranchConditional %77 %78 %79
818 %80 = OpAccessChain %41 %62 %28
820 %83 = OpISub %18 %81 %82
821 %84 = OpAccessChain %41 %62 %35
823 %87 = OpIMul %18 %85 %86
824 %88 = OpIAdd %18 %83 %87
825 %89 = OpAccessChain %57 %55 %88
827 %91 = OpIEqual %50 %90 %19
830 %92 = OpPhi %50 %77 %69 %91 %78
831 OpSelectionMerge %94 None
832 OpBranchConditional %92 %93 %94
835 %96 = OpIAdd %18 %95 %60
839 %97 = OpAccessChain %41 %62 %35
841 %99 = OpSGreaterThan %50 %98 %19
842 OpSelectionMerge %101 None
843 OpBranchConditional %99 %100 %101
845 %102 = OpAccessChain %41 %62 %28
846 %103 = OpLoad %18 %102
847 %104 = OpAccessChain %41 %62 %35
848 %105 = OpLoad %18 %104
849 %106 = OpISub %18 %105 %82
850 %107 = OpIMul %18 %106 %86
851 %108 = OpIAdd %18 %103 %107
852 %109 = OpAccessChain %57 %55 %108
853 %110 = OpLoad %18 %109
854 %111 = OpIEqual %50 %110 %19
857 %112 = OpPhi %50 %99 %94 %111 %100
858 OpSelectionMerge %114 None
859 OpBranchConditional %112 %113 %114
861 %115 = OpLoad %18 %74
862 %116 = OpIAdd %18 %115 %60
866 %117 = OpAccessChain %41 %62 %28
867 %118 = OpLoad %18 %117
868 %120 = OpSLessThan %50 %118 %119
869 OpSelectionMerge %122 None
870 OpBranchConditional %120 %121 %122
872 %123 = OpAccessChain %41 %62 %28
873 %124 = OpLoad %18 %123
874 %125 = OpIAdd %18 %124 %82
875 %126 = OpAccessChain %41 %62 %35
876 %127 = OpLoad %18 %126
877 %128 = OpIMul %18 %127 %86
878 %129 = OpIAdd %18 %125 %128
879 %130 = OpAccessChain %57 %55 %129
880 %131 = OpLoad %18 %130
881 %132 = OpIEqual %50 %131 %19
884 %133 = OpPhi %50 %120 %114 %132 %121
885 OpSelectionMerge %135 None
886 OpBranchConditional %133 %134 %135
888 %136 = OpLoad %18 %74
889 %137 = OpIAdd %18 %136 %60
893 %594 = OpISub %18 %49 %566
894 %138 = OpAccessChain %41 %62 %35
895 %139 = OpLoad %18 %138
896 %140 = OpSLessThan %50 %139 %119
897 OpSelectionMerge %142 None
898 OpBranchConditional %140 %141 %142
900 %143 = OpAccessChain %41 %62 %28
901 %144 = OpLoad %18 %143
902 %145 = OpAccessChain %41 %62 %35
903 %146 = OpLoad %18 %145
904 %147 = OpIAdd %18 %146 %82
905 %148 = OpIMul %18 %147 %86
906 %149 = OpIAdd %18 %144 %148
907 %150 = OpAccessChain %57 %55 %149
908 %151 = OpLoad %18 %150
909 %152 = OpIEqual %50 %151 %19
912 %153 = OpPhi %50 %140 %135 %152 %141
913 OpSelectionMerge %155 None
914 OpBranchConditional %153 %154 %155
916 %156 = OpLoad %18 %74
917 %157 = OpIAdd %18 %156 %60
921 %158 = OpLoad %18 %74
922 %159 = OpIEqual %50 %158 %19
923 OpSelectionMerge %161 None
924 OpBranchConditional %159 %160 %207
930 OpLoopMerge %165 %166 None
933 %168 = OpLoad %18 %42
934 %170 = OpSLessThan %50 %168 %169
935 OpBranchConditional %170 %164 %165
938 %609 = OpISub %18 %594 %168
940 OpBranchConditional %760 %166 %172
942 OpLoopMerge %174 %175 Unroll
945 %177 = OpLoad %18 %171
946 %178 = OpSLessThan %50 %177 %169
947 OpBranchConditional %178 %173 %174
949 %179 = OpLoad %18 %171
950 %180 = OpIMul %18 %179 %82
951 %181 = OpLoad %18 %42
952 %182 = OpIMul %18 %181 %82
953 %183 = OpIMul %18 %182 %86
954 %184 = OpIAdd %18 %180 %183
955 %185 = OpAccessChain %57 %55 %184
956 %186 = OpLoad %18 %185
957 %187 = OpIEqual %50 %186 %19
958 OpSelectionMerge %189 None
959 OpBranchConditional %187 %188 %189
961 %190 = OpLoad %18 %171
962 %191 = OpIMul %18 %190 %82
963 %192 = OpAccessChain %41 %62 %28
965 %193 = OpLoad %18 %42
966 %194 = OpIMul %18 %193 %82
967 %195 = OpAccessChain %41 %62 %35
974 %196 = OpLoad %18 %171
975 %197 = OpIAdd %18 %196 %60
981 %198 = OpLoad %18 %42
982 %199 = OpIAdd %18 %198 %60
986 %200 = OpAccessChain %41 %62 %28
987 %201 = OpLoad %18 %200
988 %202 = OpAccessChain %41 %62 %35
989 %203 = OpLoad %18 %202
990 %204 = OpIMul %18 %203 %86
991 %205 = OpIAdd %18 %201 %204
992 %206 = OpAccessChain %57 %55 %205
996 %209 = OpLoad %18 %67
997 %210 = OpLoad %18 %74
998 %211 = OpSMod %18 %209 %210
1000 %212 = OpLoad %18 %74
1001 %213 = OpLoad %18 %67
1002 %214 = OpIAdd %18 %213 %212
1004 %215 = OpLoad %18 %208
1005 %216 = OpSGreaterThanEqual %50 %215 %19
1006 OpSelectionMerge %218 None
1007 OpBranchConditional %216 %217 %218
1009 %219 = OpAccessChain %41 %62 %28
1010 %220 = OpLoad %18 %219
1011 %221 = OpSGreaterThan %50 %220 %19
1014 %222 = OpPhi %50 %216 %207 %221 %217
1015 OpSelectionMerge %224 None
1016 OpBranchConditional %222 %223 %224
1018 %225 = OpAccessChain %41 %62 %28
1019 %226 = OpLoad %18 %225
1020 %227 = OpISub %18 %226 %82
1021 %228 = OpAccessChain %41 %62 %35
1022 %229 = OpLoad %18 %228
1023 %230 = OpIMul %18 %229 %86
1024 %231 = OpIAdd %18 %227 %230
1025 %232 = OpAccessChain %57 %55 %231
1026 %233 = OpLoad %18 %232
1027 %234 = OpIEqual %50 %233 %19
1030 %235 = OpPhi %50 %222 %218 %234 %223
1031 OpSelectionMerge %237 None
1032 OpBranchConditional %235 %236 %237
1034 %238 = OpLoad %18 %208
1035 %239 = OpISub %18 %238 %60
1037 %240 = OpAccessChain %41 %62 %28
1038 %241 = OpLoad %18 %240
1039 %242 = OpAccessChain %41 %62 %35
1040 %243 = OpLoad %18 %242
1041 %244 = OpIMul %18 %243 %86
1042 %245 = OpIAdd %18 %241 %244
1043 %246 = OpAccessChain %57 %55 %245
1045 %247 = OpAccessChain %41 %62 %28
1046 %248 = OpLoad %18 %247
1047 %249 = OpISub %18 %248 %60
1048 %250 = OpAccessChain %41 %62 %35
1049 %251 = OpLoad %18 %250
1050 %252 = OpIMul %18 %251 %86
1051 %253 = OpIAdd %18 %249 %252
1052 %254 = OpAccessChain %57 %55 %253
1054 %255 = OpAccessChain %41 %62 %28
1055 %256 = OpLoad %18 %255
1056 %257 = OpISub %18 %256 %82
1057 %258 = OpAccessChain %41 %62 %35
1058 %259 = OpLoad %18 %258
1059 %260 = OpIMul %18 %259 %86
1060 %261 = OpIAdd %18 %257 %260
1061 %262 = OpAccessChain %57 %55 %261
1063 %263 = OpAccessChain %41 %62 %28
1064 %264 = OpLoad %18 %263
1065 %265 = OpISub %18 %264 %82
1066 %266 = OpAccessChain %41 %62 %28
1070 %267 = OpLoad %18 %208
1071 %268 = OpSGreaterThanEqual %50 %267 %19
1072 OpSelectionMerge %270 None
1073 OpBranchConditional %268 %269 %270
1075 %271 = OpAccessChain %41 %62 %35
1076 %272 = OpLoad %18 %271
1077 %273 = OpSGreaterThan %50 %272 %19
1080 %274 = OpPhi %50 %268 %237 %273 %269
1081 OpSelectionMerge %276 None
1082 OpBranchConditional %274 %275 %276
1084 %277 = OpAccessChain %41 %62 %28
1085 %278 = OpLoad %18 %277
1086 %279 = OpAccessChain %41 %62 %35
1087 %280 = OpLoad %18 %279
1088 %281 = OpISub %18 %280 %82
1089 %282 = OpIMul %18 %281 %86
1090 %283 = OpIAdd %18 %278 %282
1091 %284 = OpAccessChain %57 %55 %283
1092 %285 = OpLoad %18 %284
1093 %286 = OpIEqual %50 %285 %19
1096 %287 = OpPhi %50 %274 %270 %286 %275
1097 OpSelectionMerge %289 None
1098 OpBranchConditional %287 %288 %289
1100 %290 = OpLoad %18 %208
1101 %291 = OpISub %18 %290 %60
1103 %292 = OpAccessChain %41 %62 %28
1104 %293 = OpLoad %18 %292
1105 %294 = OpAccessChain %41 %62 %35
1106 %295 = OpLoad %18 %294
1107 %296 = OpIMul %18 %295 %86
1108 %297 = OpIAdd %18 %293 %296
1109 %298 = OpAccessChain %57 %55 %297
1111 %299 = OpAccessChain %41 %62 %28
1112 %300 = OpLoad %18 %299
1113 %301 = OpAccessChain %41 %62 %35
1114 %302 = OpLoad %18 %301
1115 %303 = OpISub %18 %302 %60
1116 %304 = OpIMul %18 %303 %86
1117 %305 = OpIAdd %18 %300 %304
1118 %306 = OpAccessChain %57 %55 %305
1120 %307 = OpAccessChain %41 %62 %28
1121 %308 = OpLoad %18 %307
1122 %309 = OpAccessChain %41 %62 %35
1123 %310 = OpLoad %18 %309
1124 %311 = OpISub %18 %310 %82
1125 %312 = OpIMul %18 %311 %86
1126 %313 = OpIAdd %18 %308 %312
1127 %314 = OpAccessChain %57 %55 %313
1129 %315 = OpAccessChain %41 %62 %35
1130 %316 = OpLoad %18 %315
1131 %317 = OpISub %18 %316 %82
1132 %318 = OpAccessChain %41 %62 %35
1136 %319 = OpLoad %18 %208
1137 %320 = OpSGreaterThanEqual %50 %319 %19
1138 OpSelectionMerge %322 None
1139 OpBranchConditional %320 %321 %322
1141 %323 = OpAccessChain %41 %62 %28
1142 %324 = OpLoad %18 %323
1143 %325 = OpSLessThan %50 %324 %119
1146 %326 = OpPhi %50 %320 %289 %325 %321
1147 OpSelectionMerge %328 None
1148 OpBranchConditional %326 %327 %328
1150 %329 = OpAccessChain %41 %62 %28
1151 %330 = OpLoad %18 %329
1152 %331 = OpIAdd %18 %330 %82
1153 %332 = OpAccessChain %41 %62 %35
1154 %333 = OpLoad %18 %332
1155 %334 = OpIMul %18 %333 %86
1156 %335 = OpIAdd %18 %331 %334
1157 %336 = OpAccessChain %57 %55 %335
1158 %337 = OpLoad %18 %336
1159 %338 = OpIEqual %50 %337 %19
1162 %339 = OpPhi %50 %326 %322 %338 %327
1163 OpSelectionMerge %341 None
1164 OpBranchConditional %339 %340 %341
1166 %342 = OpLoad %18 %208
1167 %343 = OpISub %18 %342 %60
1169 %344 = OpAccessChain %41 %62 %28
1170 %345 = OpLoad %18 %344
1171 %346 = OpAccessChain %41 %62 %35
1172 %347 = OpLoad %18 %346
1173 %348 = OpIMul %18 %347 %86
1174 %349 = OpIAdd %18 %345 %348
1175 %350 = OpAccessChain %57 %55 %349
1177 %351 = OpAccessChain %41 %62 %28
1178 %352 = OpLoad %18 %351
1179 %353 = OpIAdd %18 %352 %60
1180 %354 = OpAccessChain %41 %62 %35
1181 %355 = OpLoad %18 %354
1182 %356 = OpIMul %18 %355 %86
1183 %357 = OpIAdd %18 %353 %356
1184 %358 = OpAccessChain %57 %55 %357
1186 %359 = OpAccessChain %41 %62 %28
1187 %360 = OpLoad %18 %359
1188 %361 = OpIAdd %18 %360 %82
1189 %362 = OpAccessChain %41 %62 %35
1190 %363 = OpLoad %18 %362
1191 %364 = OpIMul %18 %363 %86
1192 %365 = OpIAdd %18 %361 %364
1193 %366 = OpAccessChain %57 %55 %365
1195 %367 = OpAccessChain %41 %62 %28
1196 %368 = OpLoad %18 %367
1197 %369 = OpIAdd %18 %368 %82
1198 %370 = OpAccessChain %41 %62 %28
1202 %371 = OpLoad %18 %208
1203 %372 = OpSGreaterThanEqual %50 %371 %19
1204 OpSelectionMerge %374 None
1205 OpBranchConditional %372 %373 %374
1207 %375 = OpAccessChain %41 %62 %35
1208 %376 = OpLoad %18 %375
1209 %377 = OpSLessThan %50 %376 %119
1212 %378 = OpPhi %50 %372 %341 %377 %373
1213 OpSelectionMerge %380 None
1214 OpBranchConditional %378 %379 %380
1216 %381 = OpAccessChain %41 %62 %28
1217 %382 = OpLoad %18 %381
1218 %383 = OpAccessChain %41 %62 %35
1219 %384 = OpLoad %18 %383
1220 %385 = OpIAdd %18 %384 %82
1221 %386 = OpIMul %18 %385 %86
1222 %387 = OpIAdd %18 %382 %386
1223 %388 = OpAccessChain %57 %55 %387
1224 %389 = OpLoad %18 %388
1225 %390 = OpIEqual %50 %389 %19
1228 %391 = OpPhi %50 %378 %374 %390 %379
1229 OpSelectionMerge %393 None
1230 OpBranchConditional %391 %392 %393
1232 %394 = OpLoad %18 %208
1233 %395 = OpISub %18 %394 %60
1235 %396 = OpAccessChain %41 %62 %28
1236 %397 = OpLoad %18 %396
1237 %398 = OpAccessChain %41 %62 %35
1238 %399 = OpLoad %18 %398
1239 %400 = OpIMul %18 %399 %86
1240 %401 = OpIAdd %18 %397 %400
1241 %402 = OpAccessChain %57 %55 %401
1243 %403 = OpAccessChain %41 %62 %28
1244 %404 = OpLoad %18 %403
1245 %405 = OpAccessChain %41 %62 %35
1246 %406 = OpLoad %18 %405
1247 %407 = OpIAdd %18 %406 %60
1248 %408 = OpIMul %18 %407 %86
1249 %409 = OpIAdd %18 %404 %408
1250 %410 = OpAccessChain %57 %55 %409
1252 %411 = OpAccessChain %41 %62 %28
1253 %412 = OpLoad %18 %411
1254 %413 = OpAccessChain %41 %62 %35
1255 %414 = OpLoad %18 %413
1256 %415 = OpIAdd %18 %414 %82
1257 %416 = OpIMul %18 %415 %86
1258 %417 = OpIAdd %18 %412 %416
1259 %418 = OpAccessChain %57 %55 %417
1261 %419 = OpAccessChain %41 %62 %35
1262 %420 = OpLoad %18 %419
1263 %421 = OpIAdd %18 %420 %82
1264 %422 = OpAccessChain %41 %62 %35
1270 %423 = OpAccessChain %41 %26 %35
1271 %424 = OpLoad %18 %423
1272 %425 = OpIMul %18 %424 %86
1273 %426 = OpAccessChain %41 %26 %28
1274 %427 = OpLoad %18 %426
1275 %428 = OpIAdd %18 %425 %427
1276 %429 = OpAccessChain %57 %55 %428
1277 %430 = OpLoad %18 %429
1278 %431 = OpIEqual %50 %430 %60
1279 OpSelectionMerge %433 None
1280 OpBranchConditional %431 %432 %433
1287 %439 = OpLoad %50 %65
1288 OpBranchConditional %439 %68 %70
1295 # uniforms for variant
1298 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
1302 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1304 PIPELINE graphics variant_pipeline
1305 ATTACH variant_vertex_shader
1306 ATTACH variant_fragment_shader
1307 FRAMEBUFFER_SIZE 64 64
1308 BIND BUFFER variant_framebuffer AS color LOCATION 0
1309 BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
1311 CLEAR_COLOR variant_pipeline 0 0 0 255
1313 CLEAR variant_pipeline
1314 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 64 64
1316 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005