3 # Copyright 2022 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 coverage-gap found by the GraphicsFuzz project.
20 # Short description: A fragment shader that covers specific LLVM code paths
22 # The test passes because the shader always writes red.
24 # Optimized using spirv-opt with the following arguments:
26 # spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af
30 SHADER vertex variant_vertex_shader PASSTHROUGH
32 # variant_fragment_shader is derived from the following GLSL:
35 # precision highp float;
36 # precision highp int;
38 # const int _GLF_global_loop_bound = 10;
39 # int _GLF_global_loop_count = 0;
41 # // Contents of injectionSwitch: [0.0, 1.0]
42 # layout(set = 0, binding = 0) uniform buf0
44 # highp vec2 injectionSwitch;
47 # layout(location = 0) out vec4 _GLF_color;
51 # _GLF_color = vec4(0);
55 # // None of the returns, discards, or continues are executed in this loop, except for the return at the end.
58 # _GLF_global_loop_count ++;
60 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
61 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
62 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
63 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
64 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
65 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
66 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
67 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
68 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
69 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
70 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
77 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
78 # if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return; if(gl_FragCoord.x < 0.0) return;
80 # while (_GLF_global_loop_count < _GLF_global_loop_bound)
82 # _GLF_global_loop_count ++;
84 # if(gl_FragCoord.x < 0.0) return;
86 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
87 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
90 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
94 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
95 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
96 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
97 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
98 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
99 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
100 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
101 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
102 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
103 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
104 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
105 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
106 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
107 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
108 # if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard; if(gl_FragCoord.x < 0.0) discard;
109 # if(gl_FragCoord.x < 0.0) discard;
111 # if(injectionSwitch.x > injectionSwitch.y)
113 # if(gl_FragCoord.x < 0.0) return;
114 # if(gl_FragCoord.x < 0.0) continue;
121 # if(gl_FragCoord.x < 0.0) discard;
122 # if(gl_FragCoord.x < 0.0) continue;
124 # _GLF_color = vec4(1, 0, 0, 1);
128 # while(_GLF_global_loop_count < _GLF_global_loop_bound);
130 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
133 ; Generator: Khronos Glslang Reference Front End; 10
137 %1 = OpExtInstImport "GLSL.std.450"
138 OpMemoryModel Logical GLSL450
139 OpEntryPoint Fragment %4 "main" %13 %26
140 OpExecutionMode %4 OriginUpperLeft
143 OpName %13 "_GLF_color"
144 OpName %26 "gl_FragCoord"
146 OpMemberName %793 0 "injectionSwitch"
148 OpDecorate %13 Location 0
149 OpDecorate %26 BuiltIn FragCoord
150 OpMemberDecorate %793 0 Offset 0
151 OpDecorate %793 Block
152 OpDecorate %795 DescriptorSet 0
153 OpDecorate %795 Binding 0
155 %3 = OpTypeFunction %2
159 %11 = OpTypeVector %10 4
160 %12 = OpTypePointer Output %11
161 %13 = OpVariable %12 Output
162 %14 = OpConstant %10 0
163 %15 = OpConstantComposite %11 %14 %14 %14 %14
164 %23 = OpConstant %6 1
165 %25 = OpTypePointer Input %11
166 %26 = OpVariable %25 Input
168 %28 = OpConstant %27 0
169 %29 = OpTypePointer Input %10
171 %355 = OpConstant %6 10
172 %792 = OpTypeVector %10 2
173 %793 = OpTypeStruct %792
174 %794 = OpTypePointer Uniform %793
175 %795 = OpVariable %794 Uniform
176 %796 = OpTypePointer Uniform %10
177 %799 = OpConstant %27 1
178 %830 = OpConstant %10 1
179 %831 = OpConstantComposite %11 %830 %14 %14 %830
180 %837 = OpConstantFalse %32
181 %840 = OpConstantTrue %32
182 %4 = OpFunction %2 None %3
184 OpSelectionMerge %835 None
190 %850 = OpPhi %32 %837 %836 %855 %21
191 %846 = OpPhi %6 %9 %836 %296 %21
192 %845 = OpPhi %6 %9 %836 %851 %21
193 OpLoopMerge %20 %21 None
196 %24 = OpIAdd %6 %845 %23
197 %30 = OpAccessChain %29 %26 %28
199 %33 = OpFOrdLessThan %32 %31 %14
200 OpSelectionMerge %35 None
201 OpBranchConditional %33 %34 %35
205 OpSelectionMerge %41 None
206 OpBranchConditional %33 %40 %41
210 OpSelectionMerge %47 None
211 OpBranchConditional %33 %46 %47
215 OpSelectionMerge %53 None
216 OpBranchConditional %33 %52 %53
220 OpSelectionMerge %59 None
221 OpBranchConditional %33 %58 %59
225 OpSelectionMerge %65 None
226 OpBranchConditional %33 %64 %65
230 OpSelectionMerge %71 None
231 OpBranchConditional %33 %70 %71
235 OpSelectionMerge %77 None
236 OpBranchConditional %33 %76 %77
240 OpSelectionMerge %83 None
241 OpBranchConditional %33 %82 %83
245 OpSelectionMerge %89 None
246 OpBranchConditional %33 %88 %89
250 OpSelectionMerge %95 None
251 OpBranchConditional %33 %94 %95
255 OpSelectionMerge %101 None
256 OpBranchConditional %33 %100 %101
260 OpSelectionMerge %107 None
261 OpBranchConditional %33 %106 %107
265 OpSelectionMerge %113 None
266 OpBranchConditional %33 %112 %113
270 OpSelectionMerge %119 None
271 OpBranchConditional %33 %118 %119
275 OpSelectionMerge %125 None
276 OpBranchConditional %33 %124 %125
280 OpSelectionMerge %131 None
281 OpBranchConditional %33 %130 %131
285 OpSelectionMerge %137 None
286 OpBranchConditional %33 %136 %137
290 OpSelectionMerge %143 None
291 OpBranchConditional %33 %142 %143
295 OpSelectionMerge %149 None
296 OpBranchConditional %33 %148 %149
300 OpSelectionMerge %155 None
301 OpBranchConditional %33 %154 %155
305 OpSelectionMerge %161 None
306 OpBranchConditional %33 %160 %161
310 OpSelectionMerge %167 None
311 OpBranchConditional %33 %166 %167
315 OpSelectionMerge %173 None
316 OpBranchConditional %33 %172 %173
320 OpSelectionMerge %179 None
321 OpBranchConditional %33 %178 %179
325 OpSelectionMerge %185 None
326 OpBranchConditional %33 %184 %185
330 OpSelectionMerge %191 None
331 OpBranchConditional %33 %190 %191
335 OpSelectionMerge %197 None
336 OpBranchConditional %33 %196 %197
340 OpSelectionMerge %203 None
341 OpBranchConditional %33 %202 %203
345 OpSelectionMerge %209 None
346 OpBranchConditional %33 %208 %209
350 OpSelectionMerge %215 None
351 OpBranchConditional %33 %214 %215
355 OpSelectionMerge %221 None
356 OpBranchConditional %33 %220 %221
360 OpSelectionMerge %227 None
361 OpBranchConditional %33 %226 %227
365 OpSelectionMerge %233 None
366 OpBranchConditional %33 %232 %233
370 OpSelectionMerge %239 None
371 OpBranchConditional %33 %238 %239
375 OpSelectionMerge %245 None
376 OpBranchConditional %33 %244 %245
380 OpSelectionMerge %251 None
381 OpBranchConditional %33 %250 %251
385 OpSelectionMerge %257 None
386 OpBranchConditional %33 %256 %257
390 OpSelectionMerge %263 None
391 OpBranchConditional %33 %262 %263
395 OpSelectionMerge %269 None
396 OpBranchConditional %33 %268 %269
400 OpSelectionMerge %275 None
401 OpBranchConditional %33 %274 %275
405 OpSelectionMerge %281 None
406 OpBranchConditional %33 %280 %281
410 OpSelectionMerge %287 None
411 OpBranchConditional %33 %286 %287
415 OpSelectionMerge %293 None
416 OpBranchConditional %33 %292 %293
420 %296 = OpIAdd %6 %846 %23
421 %298 = OpIEqual %32 %296 %9
422 OpSelectionMerge %300 None
423 OpBranchConditional %298 %299 %425
425 OpSelectionMerge %305 None
426 OpBranchConditional %33 %304 %305
430 OpSelectionMerge %311 None
431 OpBranchConditional %33 %310 %311
435 OpSelectionMerge %317 None
436 OpBranchConditional %33 %316 %317
440 OpSelectionMerge %323 None
441 OpBranchConditional %33 %322 %323
445 OpSelectionMerge %329 None
446 OpBranchConditional %33 %328 %329
450 OpSelectionMerge %335 None
451 OpBranchConditional %33 %334 %335
455 OpSelectionMerge %341 None
456 OpBranchConditional %33 %340 %341
460 OpSelectionMerge %347 None
461 OpBranchConditional %33 %346 %347
467 %847 = OpPhi %6 %24 %347 %358 %352
468 %356 = OpSLessThan %32 %847 %355
469 OpLoopMerge %351 %352 None
470 OpBranchConditional %356 %350 %351
472 %358 = OpIAdd %6 %847 %23
473 OpSelectionMerge %363 None
474 OpBranchConditional %33 %362 %363
478 OpSelectionMerge %369 None
479 OpBranchConditional %33 %368 %369
483 OpSelectionMerge %375 None
484 OpBranchConditional %33 %374 %375
488 OpSelectionMerge %381 None
489 OpBranchConditional %33 %380 %381
493 OpSelectionMerge %387 None
494 OpBranchConditional %33 %386 %387
498 OpSelectionMerge %393 None
499 OpBranchConditional %33 %392 %393
503 OpSelectionMerge %399 None
504 OpBranchConditional %33 %398 %399
508 OpSelectionMerge %405 None
509 OpBranchConditional %33 %404 %405
513 OpSelectionMerge %411 None
514 OpBranchConditional %33 %410 %411
522 %853 = OpPhi %6 %847 %349 %358 %362
523 %848 = OpPhi %32 %850 %349 %840 %362
524 OpSelectionMerge %843 None
525 OpBranchConditional %848 %20 %843
527 OpSelectionMerge %417 None
528 OpBranchConditional %33 %416 %417
532 OpSelectionMerge %423 None
533 OpBranchConditional %33 %422 %423
539 OpSelectionMerge %430 None
540 OpBranchConditional %33 %429 %430
544 OpSelectionMerge %436 None
545 OpBranchConditional %33 %435 %436
549 OpSelectionMerge %442 None
550 OpBranchConditional %33 %441 %442
554 OpSelectionMerge %448 None
555 OpBranchConditional %33 %447 %448
559 OpSelectionMerge %454 None
560 OpBranchConditional %33 %453 %454
564 OpSelectionMerge %460 None
565 OpBranchConditional %33 %459 %460
569 OpSelectionMerge %466 None
570 OpBranchConditional %33 %465 %466
574 OpSelectionMerge %472 None
575 OpBranchConditional %33 %471 %472
579 OpSelectionMerge %478 None
580 OpBranchConditional %33 %477 %478
584 OpSelectionMerge %484 None
585 OpBranchConditional %33 %483 %484
589 OpSelectionMerge %490 None
590 OpBranchConditional %33 %489 %490
594 OpSelectionMerge %496 None
595 OpBranchConditional %33 %495 %496
599 OpSelectionMerge %502 None
600 OpBranchConditional %33 %501 %502
604 OpSelectionMerge %508 None
605 OpBranchConditional %33 %507 %508
609 OpSelectionMerge %514 None
610 OpBranchConditional %33 %513 %514
614 OpSelectionMerge %520 None
615 OpBranchConditional %33 %519 %520
619 OpSelectionMerge %526 None
620 OpBranchConditional %33 %525 %526
624 OpSelectionMerge %532 None
625 OpBranchConditional %33 %531 %532
629 OpSelectionMerge %538 None
630 OpBranchConditional %33 %537 %538
634 OpSelectionMerge %544 None
635 OpBranchConditional %33 %543 %544
639 OpSelectionMerge %550 None
640 OpBranchConditional %33 %549 %550
644 OpSelectionMerge %556 None
645 OpBranchConditional %33 %555 %556
649 OpSelectionMerge %562 None
650 OpBranchConditional %33 %561 %562
654 OpSelectionMerge %568 None
655 OpBranchConditional %33 %567 %568
659 OpSelectionMerge %574 None
660 OpBranchConditional %33 %573 %574
664 OpSelectionMerge %580 None
665 OpBranchConditional %33 %579 %580
669 OpSelectionMerge %586 None
670 OpBranchConditional %33 %585 %586
674 OpSelectionMerge %592 None
675 OpBranchConditional %33 %591 %592
679 OpSelectionMerge %598 None
680 OpBranchConditional %33 %597 %598
684 OpSelectionMerge %604 None
685 OpBranchConditional %33 %603 %604
689 OpSelectionMerge %610 None
690 OpBranchConditional %33 %609 %610
694 OpSelectionMerge %616 None
695 OpBranchConditional %33 %615 %616
699 OpSelectionMerge %622 None
700 OpBranchConditional %33 %621 %622
704 OpSelectionMerge %628 None
705 OpBranchConditional %33 %627 %628
709 OpSelectionMerge %634 None
710 OpBranchConditional %33 %633 %634
714 OpSelectionMerge %640 None
715 OpBranchConditional %33 %639 %640
719 OpSelectionMerge %646 None
720 OpBranchConditional %33 %645 %646
724 OpSelectionMerge %652 None
725 OpBranchConditional %33 %651 %652
729 OpSelectionMerge %658 None
730 OpBranchConditional %33 %657 %658
734 OpSelectionMerge %664 None
735 OpBranchConditional %33 %663 %664
739 OpSelectionMerge %670 None
740 OpBranchConditional %33 %669 %670
744 OpSelectionMerge %676 None
745 OpBranchConditional %33 %675 %676
749 OpSelectionMerge %682 None
750 OpBranchConditional %33 %681 %682
754 OpSelectionMerge %688 None
755 OpBranchConditional %33 %687 %688
759 OpSelectionMerge %694 None
760 OpBranchConditional %33 %693 %694
764 OpSelectionMerge %700 None
765 OpBranchConditional %33 %699 %700
769 OpSelectionMerge %706 None
770 OpBranchConditional %33 %705 %706
774 OpSelectionMerge %712 None
775 OpBranchConditional %33 %711 %712
779 OpSelectionMerge %718 None
780 OpBranchConditional %33 %717 %718
784 OpSelectionMerge %724 None
785 OpBranchConditional %33 %723 %724
789 OpSelectionMerge %730 None
790 OpBranchConditional %33 %729 %730
794 OpSelectionMerge %736 None
795 OpBranchConditional %33 %735 %736
799 OpSelectionMerge %742 None
800 OpBranchConditional %33 %741 %742
804 OpSelectionMerge %748 None
805 OpBranchConditional %33 %747 %748
809 OpSelectionMerge %754 None
810 OpBranchConditional %33 %753 %754
814 OpSelectionMerge %760 None
815 OpBranchConditional %33 %759 %760
819 OpSelectionMerge %766 None
820 OpBranchConditional %33 %765 %766
824 OpSelectionMerge %772 None
825 OpBranchConditional %33 %771 %772
829 OpSelectionMerge %778 None
830 OpBranchConditional %33 %777 %778
834 OpSelectionMerge %784 None
835 OpBranchConditional %33 %783 %784
839 OpSelectionMerge %790 None
840 OpBranchConditional %33 %789 %790
844 %797 = OpAccessChain %796 %795 %9 %28
845 %798 = OpLoad %10 %797
846 %800 = OpAccessChain %796 %795 %9 %799
847 %801 = OpLoad %10 %800
848 %802 = OpFOrdGreaterThan %32 %798 %801
849 OpSelectionMerge %804 None
850 OpBranchConditional %802 %803 %804
852 OpSelectionMerge %809 None
853 OpBranchConditional %33 %808 %809
857 OpSelectionMerge %815 None
858 OpBranchConditional %33 %814 %815
866 %856 = OpPhi %32 %848 %423 %850 %804
867 %852 = OpPhi %6 %853 %423 %24 %804
868 OpSelectionMerge %822 None
869 OpBranchConditional %33 %821 %822
873 OpSelectionMerge %828 None
874 OpBranchConditional %33 %827 %828
881 %855 = OpPhi %32 %850 %814 %856 %827
882 %851 = OpPhi %6 %24 %814 %852 %827
883 %834 = OpSLessThan %32 %851 %355
884 OpBranchConditional %834 %18 %20
886 %854 = OpPhi %32 %840 %34 %840 %40 %840 %46 %840 %52 %840 %58 %840 %64 %840 %70 %840 %76 %840 %82 %840 %88 %840 %94 %840 %100 %840 %106 %840 %112 %840 %118 %840 %124 %840 %130 %840 %136 %840 %142 %840 %148 %840 %154 %840 %160 %840 %166 %840 %172 %840 %178 %840 %184 %840 %190 %840 %196 %840 %202 %840 %208 %840 %214 %840 %220 %840 %226 %840 %232 %840 %238 %840 %244 %840 %250 %840 %256 %840 %262 %840 %268 %840 %274 %840 %280 %840 %286 %840 %292 %840 %304 %840 %310 %840 %316 %840 %322 %840 %328 %840 %334 %840 %340 %840 %346 %848 %351 %840 %808 %840 %828 %855 %21
887 OpSelectionMerge %841 None
888 OpBranchConditional %854 %835 %841
896 # uniforms for variant
899 BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
903 BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
907 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
909 PIPELINE graphics variant_pipeline
910 ATTACH variant_vertex_shader
911 ATTACH variant_fragment_shader
912 FRAMEBUFFER_SIZE 32 32
913 BIND BUFFER variant_framebuffer AS color LOCATION 0
914 BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 1
915 BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
917 CLEAR_COLOR variant_pipeline 0 0 0 255
919 CLEAR variant_pipeline
920 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
922 EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255