#!amber # Copyright 2021 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # A test for a coverage-gap found by the GraphicsFuzz project. # Short description: A fragment shader that covers specific BRW code paths # The test passes because the shader always writes red. # Optimized using spirv-opt with the following arguments: # '-Os' # spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af SHADER vertex variant_vertex_shader PASSTHROUGH # variant_fragment_shader is derived from the following GLSL: # #version 320 es # # precision highp float; # precision highp int; # # const int _GLF_global_loop_bound = 100; # int _GLF_global_loop_count = 0; # # layout(location = 0) out vec4 _GLF_color; # # struct S # { # int data[10]; # }; # # int func(S obj) # { # int x = 0; # # // Five more iterations as the global loop count has already # // reached its limit. # while(_GLF_global_loop_count < _GLF_global_loop_bound + 5) # { # _GLF_global_loop_count ++; # # // Checks if the first five elements are set to the # // correct value inside the inner loop in the main # // function. Return zero if the check fails. # if (obj.data[x] != x) # return 0; # # x++; # } # # // Return 1 when the check passes. # return 1; # } # # // Global loop counter incrementation cannot be inside the for loop (along with i++) for the coverage points to trigger. # #define LOOP _GLF_global_loop_count++; for(int i = 0; i < 5 && _GLF_global_loop_count < _GLF_global_loop_bound; i++) # # void main() # { # S obj = S(int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); # # LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { # LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { # LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { # // Sets the first five elements to 0, 1, 2, 3, 4. # obj.data[i] = i; # } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } # # int a = 0; # // Always true. # if(gl_FragCoord.y > 0.0) # a = func(obj); # # // Always true. # if (a == 1) # _GLF_color = vec4(1, 0, 0, 1); # else # _GLF_color = vec4(0); # } SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 ; SPIR-V ; Version: 1.0 ; Generator: Khronos Glslang Reference Front End; 10 ; Bound: 836 ; Schema: 0 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %642 %659 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 320 OpName %4 "main" OpName %642 "gl_FragCoord" OpName %659 "_GLF_color" OpDecorate %642 BuiltIn FragCoord OpDecorate %659 Location 0 %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 1 %7 = OpTypeInt 32 0 %8 = OpConstant %7 10 %9 = OpTypeArray %6 %8 %18 = OpConstant %6 0 %19 = OpTypePointer Function %6 %27 = OpConstant %6 105 %28 = OpTypeBool %31 = OpConstant %6 1 %46 = OpConstantComposite %9 %18 %18 %18 %18 %18 %18 %18 %18 %18 %18 %57 = OpConstant %6 5 %60 = OpConstant %6 100 %639 = OpTypeFloat 32 %640 = OpTypeVector %639 4 %641 = OpTypePointer Input %640 %642 = OpVariable %641 Input %643 = OpConstant %7 1 %644 = OpTypePointer Input %639 %647 = OpConstant %639 0 %658 = OpTypePointer Output %640 %659 = OpVariable %658 Output %660 = OpConstant %639 1 %661 = OpConstantComposite %640 %660 %647 %647 %660 %663 = OpConstantComposite %640 %647 %647 %647 %647 %668 = OpConstant %7 0 %669 = OpConstantFalse %28 %672 = OpConstantTrue %28 %703 = OpTypePointer Function %9 %722 = OpUndef %6 %4 = OpFunction %2 None %3 %5 = OpLabel %709 = OpVariable %703 Function %704 = OpVariable %703 Function OpStore %704 %46 OpBranch %51 %51 = OpLabel %713 = OpPhi %6 %31 %5 %725 %54 %712 = OpPhi %6 %18 %5 %637 %54 %58 = OpSLessThan %28 %712 %57 %61 = OpSLessThan %28 %713 %60 %62 = OpLogicalAnd %28 %58 %61 OpLoopMerge %53 %54 None OpBranchConditional %62 %52 %53 %52 = OpLabel %64 = OpIAdd %6 %713 %31 OpBranch %66 %66 = OpLabel %725 = OpPhi %6 %64 %52 %728 %69 %724 = OpPhi %6 %18 %52 %635 %69 %72 = OpSLessThan %28 %724 %57 %74 = OpSLessThan %28 %725 %60 %75 = OpLogicalAnd %28 %72 %74 OpLoopMerge %68 %69 None OpBranchConditional %75 %67 %68 %67 = OpLabel %77 = OpIAdd %6 %725 %31 OpBranch %79 %79 = OpLabel %728 = OpPhi %6 %77 %67 %731 %82 %727 = OpPhi %6 %18 %67 %633 %82 %85 = OpSLessThan %28 %727 %57 %87 = OpSLessThan %28 %728 %60 %88 = OpLogicalAnd %28 %85 %87 OpLoopMerge %81 %82 None OpBranchConditional %88 %80 %81 %80 = OpLabel %90 = OpIAdd %6 %728 %31 OpBranch %92 %92 = OpLabel %731 = OpPhi %6 %90 %80 %734 %95 %730 = OpPhi %6 %18 %80 %631 %95 %98 = OpSLessThan %28 %730 %57 %100 = OpSLessThan %28 %731 %60 %101 = OpLogicalAnd %28 %98 %100 OpLoopMerge %94 %95 None OpBranchConditional %101 %93 %94 %93 = OpLabel %103 = OpIAdd %6 %731 %31 OpBranch %105 %105 = OpLabel %734 = OpPhi %6 %103 %93 %737 %108 %733 = OpPhi %6 %18 %93 %629 %108 %111 = OpSLessThan %28 %733 %57 %113 = OpSLessThan %28 %734 %60 %114 = OpLogicalAnd %28 %111 %113 OpLoopMerge %107 %108 None OpBranchConditional %114 %106 %107 %106 = OpLabel %116 = OpIAdd %6 %734 %31 OpBranch %118 %118 = OpLabel %737 = OpPhi %6 %116 %106 %740 %121 %736 = OpPhi %6 %18 %106 %627 %121 %124 = OpSLessThan %28 %736 %57 %126 = OpSLessThan %28 %737 %60 %127 = OpLogicalAnd %28 %124 %126 OpLoopMerge %120 %121 None OpBranchConditional %127 %119 %120 %119 = OpLabel %129 = OpIAdd %6 %737 %31 OpBranch %131 %131 = OpLabel %740 = OpPhi %6 %129 %119 %743 %134 %739 = OpPhi %6 %18 %119 %625 %134 %137 = OpSLessThan %28 %739 %57 %139 = OpSLessThan %28 %740 %60 %140 = OpLogicalAnd %28 %137 %139 OpLoopMerge %133 %134 None OpBranchConditional %140 %132 %133 %132 = OpLabel %142 = OpIAdd %6 %740 %31 OpBranch %144 %144 = OpLabel %743 = OpPhi %6 %142 %132 %746 %147 %742 = OpPhi %6 %18 %132 %623 %147 %150 = OpSLessThan %28 %742 %57 %152 = OpSLessThan %28 %743 %60 %153 = OpLogicalAnd %28 %150 %152 OpLoopMerge %146 %147 None OpBranchConditional %153 %145 %146 %145 = OpLabel %155 = OpIAdd %6 %743 %31 OpBranch %157 %157 = OpLabel %746 = OpPhi %6 %155 %145 %749 %160 %745 = OpPhi %6 %18 %145 %621 %160 %163 = OpSLessThan %28 %745 %57 %165 = OpSLessThan %28 %746 %60 %166 = OpLogicalAnd %28 %163 %165 OpLoopMerge %159 %160 None OpBranchConditional %166 %158 %159 %158 = OpLabel %168 = OpIAdd %6 %746 %31 OpBranch %170 %170 = OpLabel %749 = OpPhi %6 %168 %158 %752 %173 %748 = OpPhi %6 %18 %158 %619 %173 %176 = OpSLessThan %28 %748 %57 %178 = OpSLessThan %28 %749 %60 %179 = OpLogicalAnd %28 %176 %178 OpLoopMerge %172 %173 None OpBranchConditional %179 %171 %172 %171 = OpLabel %181 = OpIAdd %6 %749 %31 OpBranch %183 %183 = OpLabel %752 = OpPhi %6 %181 %171 %755 %186 %751 = OpPhi %6 %18 %171 %617 %186 %189 = OpSLessThan %28 %751 %57 %191 = OpSLessThan %28 %752 %60 %192 = OpLogicalAnd %28 %189 %191 OpLoopMerge %185 %186 None OpBranchConditional %192 %184 %185 %184 = OpLabel %194 = OpIAdd %6 %752 %31 OpBranch %196 %196 = OpLabel %755 = OpPhi %6 %194 %184 %758 %199 %754 = OpPhi %6 %18 %184 %615 %199 %202 = OpSLessThan %28 %754 %57 %204 = OpSLessThan %28 %755 %60 %205 = OpLogicalAnd %28 %202 %204 OpLoopMerge %198 %199 None OpBranchConditional %205 %197 %198 %197 = OpLabel %207 = OpIAdd %6 %755 %31 OpBranch %209 %209 = OpLabel %758 = OpPhi %6 %207 %197 %761 %212 %757 = OpPhi %6 %18 %197 %613 %212 %215 = OpSLessThan %28 %757 %57 %217 = OpSLessThan %28 %758 %60 %218 = OpLogicalAnd %28 %215 %217 OpLoopMerge %211 %212 None OpBranchConditional %218 %210 %211 %210 = OpLabel %220 = OpIAdd %6 %758 %31 OpBranch %222 %222 = OpLabel %761 = OpPhi %6 %220 %210 %764 %225 %760 = OpPhi %6 %18 %210 %611 %225 %228 = OpSLessThan %28 %760 %57 %230 = OpSLessThan %28 %761 %60 %231 = OpLogicalAnd %28 %228 %230 OpLoopMerge %224 %225 None OpBranchConditional %231 %223 %224 %223 = OpLabel %233 = OpIAdd %6 %761 %31 OpBranch %235 %235 = OpLabel %764 = OpPhi %6 %233 %223 %767 %238 %763 = OpPhi %6 %18 %223 %609 %238 %241 = OpSLessThan %28 %763 %57 %243 = OpSLessThan %28 %764 %60 %244 = OpLogicalAnd %28 %241 %243 OpLoopMerge %237 %238 None OpBranchConditional %244 %236 %237 %236 = OpLabel %246 = OpIAdd %6 %764 %31 OpBranch %248 %248 = OpLabel %767 = OpPhi %6 %246 %236 %770 %251 %766 = OpPhi %6 %18 %236 %607 %251 %254 = OpSLessThan %28 %766 %57 %256 = OpSLessThan %28 %767 %60 %257 = OpLogicalAnd %28 %254 %256 OpLoopMerge %250 %251 None OpBranchConditional %257 %249 %250 %249 = OpLabel %259 = OpIAdd %6 %767 %31 OpBranch %261 %261 = OpLabel %770 = OpPhi %6 %259 %249 %773 %264 %769 = OpPhi %6 %18 %249 %605 %264 %267 = OpSLessThan %28 %769 %57 %269 = OpSLessThan %28 %770 %60 %270 = OpLogicalAnd %28 %267 %269 OpLoopMerge %263 %264 None OpBranchConditional %270 %262 %263 %262 = OpLabel %272 = OpIAdd %6 %770 %31 OpBranch %274 %274 = OpLabel %773 = OpPhi %6 %272 %262 %776 %277 %772 = OpPhi %6 %18 %262 %603 %277 %280 = OpSLessThan %28 %772 %57 %282 = OpSLessThan %28 %773 %60 %283 = OpLogicalAnd %28 %280 %282 OpLoopMerge %276 %277 None OpBranchConditional %283 %275 %276 %275 = OpLabel %285 = OpIAdd %6 %773 %31 OpBranch %287 %287 = OpLabel %776 = OpPhi %6 %285 %275 %779 %290 %775 = OpPhi %6 %18 %275 %601 %290 %293 = OpSLessThan %28 %775 %57 %295 = OpSLessThan %28 %776 %60 %296 = OpLogicalAnd %28 %293 %295 OpLoopMerge %289 %290 None OpBranchConditional %296 %288 %289 %288 = OpLabel %298 = OpIAdd %6 %776 %31 OpBranch %300 %300 = OpLabel %779 = OpPhi %6 %298 %288 %782 %303 %778 = OpPhi %6 %18 %288 %599 %303 %306 = OpSLessThan %28 %778 %57 %308 = OpSLessThan %28 %779 %60 %309 = OpLogicalAnd %28 %306 %308 OpLoopMerge %302 %303 None OpBranchConditional %309 %301 %302 %301 = OpLabel %311 = OpIAdd %6 %779 %31 OpBranch %313 %313 = OpLabel %782 = OpPhi %6 %311 %301 %785 %316 %781 = OpPhi %6 %18 %301 %597 %316 %319 = OpSLessThan %28 %781 %57 %321 = OpSLessThan %28 %782 %60 %322 = OpLogicalAnd %28 %319 %321 OpLoopMerge %315 %316 None OpBranchConditional %322 %314 %315 %314 = OpLabel %324 = OpIAdd %6 %782 %31 OpBranch %326 %326 = OpLabel %785 = OpPhi %6 %324 %314 %788 %329 %784 = OpPhi %6 %18 %314 %595 %329 %332 = OpSLessThan %28 %784 %57 %334 = OpSLessThan %28 %785 %60 %335 = OpLogicalAnd %28 %332 %334 OpLoopMerge %328 %329 None OpBranchConditional %335 %327 %328 %327 = OpLabel %337 = OpIAdd %6 %785 %31 OpBranch %339 %339 = OpLabel %788 = OpPhi %6 %337 %327 %791 %342 %787 = OpPhi %6 %18 %327 %593 %342 %345 = OpSLessThan %28 %787 %57 %347 = OpSLessThan %28 %788 %60 %348 = OpLogicalAnd %28 %345 %347 OpLoopMerge %341 %342 None OpBranchConditional %348 %340 %341 %340 = OpLabel %350 = OpIAdd %6 %788 %31 OpBranch %352 %352 = OpLabel %791 = OpPhi %6 %350 %340 %794 %355 %790 = OpPhi %6 %18 %340 %591 %355 %358 = OpSLessThan %28 %790 %57 %360 = OpSLessThan %28 %791 %60 %361 = OpLogicalAnd %28 %358 %360 OpLoopMerge %354 %355 None OpBranchConditional %361 %353 %354 %353 = OpLabel %363 = OpIAdd %6 %791 %31 OpBranch %365 %365 = OpLabel %794 = OpPhi %6 %363 %353 %797 %368 %793 = OpPhi %6 %18 %353 %589 %368 %371 = OpSLessThan %28 %793 %57 %373 = OpSLessThan %28 %794 %60 %374 = OpLogicalAnd %28 %371 %373 OpLoopMerge %367 %368 None OpBranchConditional %374 %366 %367 %366 = OpLabel %376 = OpIAdd %6 %794 %31 OpBranch %378 %378 = OpLabel %797 = OpPhi %6 %376 %366 %800 %381 %796 = OpPhi %6 %18 %366 %587 %381 %384 = OpSLessThan %28 %796 %57 %386 = OpSLessThan %28 %797 %60 %387 = OpLogicalAnd %28 %384 %386 OpLoopMerge %380 %381 None OpBranchConditional %387 %379 %380 %379 = OpLabel %389 = OpIAdd %6 %797 %31 OpBranch %391 %391 = OpLabel %800 = OpPhi %6 %389 %379 %803 %394 %799 = OpPhi %6 %18 %379 %585 %394 %397 = OpSLessThan %28 %799 %57 %399 = OpSLessThan %28 %800 %60 %400 = OpLogicalAnd %28 %397 %399 OpLoopMerge %393 %394 None OpBranchConditional %400 %392 %393 %392 = OpLabel %402 = OpIAdd %6 %800 %31 OpBranch %404 %404 = OpLabel %803 = OpPhi %6 %402 %392 %806 %407 %802 = OpPhi %6 %18 %392 %583 %407 %410 = OpSLessThan %28 %802 %57 %412 = OpSLessThan %28 %803 %60 %413 = OpLogicalAnd %28 %410 %412 OpLoopMerge %406 %407 None OpBranchConditional %413 %405 %406 %405 = OpLabel %415 = OpIAdd %6 %803 %31 OpBranch %417 %417 = OpLabel %806 = OpPhi %6 %415 %405 %809 %420 %805 = OpPhi %6 %18 %405 %581 %420 %423 = OpSLessThan %28 %805 %57 %425 = OpSLessThan %28 %806 %60 %426 = OpLogicalAnd %28 %423 %425 OpLoopMerge %419 %420 None OpBranchConditional %426 %418 %419 %418 = OpLabel %428 = OpIAdd %6 %806 %31 OpBranch %430 %430 = OpLabel %809 = OpPhi %6 %428 %418 %812 %433 %808 = OpPhi %6 %18 %418 %579 %433 %436 = OpSLessThan %28 %808 %57 %438 = OpSLessThan %28 %809 %60 %439 = OpLogicalAnd %28 %436 %438 OpLoopMerge %432 %433 None OpBranchConditional %439 %431 %432 %431 = OpLabel %441 = OpIAdd %6 %809 %31 OpBranch %443 %443 = OpLabel %812 = OpPhi %6 %441 %431 %815 %446 %811 = OpPhi %6 %18 %431 %577 %446 %449 = OpSLessThan %28 %811 %57 %451 = OpSLessThan %28 %812 %60 %452 = OpLogicalAnd %28 %449 %451 OpLoopMerge %445 %446 None OpBranchConditional %452 %444 %445 %444 = OpLabel %454 = OpIAdd %6 %812 %31 OpBranch %456 %456 = OpLabel %815 = OpPhi %6 %454 %444 %818 %459 %814 = OpPhi %6 %18 %444 %575 %459 %462 = OpSLessThan %28 %814 %57 %464 = OpSLessThan %28 %815 %60 %465 = OpLogicalAnd %28 %462 %464 OpLoopMerge %458 %459 None OpBranchConditional %465 %457 %458 %457 = OpLabel %467 = OpIAdd %6 %815 %31 OpBranch %469 %469 = OpLabel %818 = OpPhi %6 %467 %457 %821 %472 %817 = OpPhi %6 %18 %457 %573 %472 %475 = OpSLessThan %28 %817 %57 %477 = OpSLessThan %28 %818 %60 %478 = OpLogicalAnd %28 %475 %477 OpLoopMerge %471 %472 None OpBranchConditional %478 %470 %471 %470 = OpLabel %480 = OpIAdd %6 %818 %31 OpBranch %482 %482 = OpLabel %821 = OpPhi %6 %480 %470 %824 %485 %820 = OpPhi %6 %18 %470 %571 %485 %488 = OpSLessThan %28 %820 %57 %490 = OpSLessThan %28 %821 %60 %491 = OpLogicalAnd %28 %488 %490 OpLoopMerge %484 %485 None OpBranchConditional %491 %483 %484 %483 = OpLabel %493 = OpIAdd %6 %821 %31 OpBranch %495 %495 = OpLabel %824 = OpPhi %6 %493 %483 %827 %498 %823 = OpPhi %6 %18 %483 %569 %498 %501 = OpSLessThan %28 %823 %57 %503 = OpSLessThan %28 %824 %60 %504 = OpLogicalAnd %28 %501 %503 OpLoopMerge %497 %498 None OpBranchConditional %504 %496 %497 %496 = OpLabel %506 = OpIAdd %6 %824 %31 OpBranch %508 %508 = OpLabel %827 = OpPhi %6 %506 %496 %830 %511 %826 = OpPhi %6 %18 %496 %567 %511 %514 = OpSLessThan %28 %826 %57 %516 = OpSLessThan %28 %827 %60 %517 = OpLogicalAnd %28 %514 %516 OpLoopMerge %510 %511 None OpBranchConditional %517 %509 %510 %509 = OpLabel %519 = OpIAdd %6 %827 %31 OpBranch %521 %521 = OpLabel %830 = OpPhi %6 %519 %509 %833 %524 %829 = OpPhi %6 %18 %509 %565 %524 %527 = OpSLessThan %28 %829 %57 %529 = OpSLessThan %28 %830 %60 %530 = OpLogicalAnd %28 %527 %529 OpLoopMerge %523 %524 None OpBranchConditional %530 %522 %523 %522 = OpLabel %532 = OpIAdd %6 %830 %31 OpBranch %534 %534 = OpLabel %833 = OpPhi %6 %532 %522 %545 %537 %832 = OpPhi %6 %18 %522 %563 %537 %540 = OpSLessThan %28 %832 %57 %542 = OpSLessThan %28 %833 %60 %543 = OpLogicalAnd %28 %540 %542 OpLoopMerge %536 %537 None OpBranchConditional %543 %535 %536 %535 = OpLabel %545 = OpIAdd %6 %833 %31 OpBranch %547 %547 = OpLabel %835 = OpPhi %6 %18 %535 %561 %548 %553 = OpSLessThan %28 %835 %57 %555 = OpSLessThan %28 %545 %60 %556 = OpLogicalAnd %28 %553 %555 OpLoopMerge %549 %548 None OpBranchConditional %556 %548 %549 %548 = OpLabel %706 = OpAccessChain %19 %704 %835 OpStore %706 %835 %561 = OpIAdd %6 %835 %31 OpBranch %547 %549 = OpLabel OpBranch %537 %537 = OpLabel %563 = OpIAdd %6 %832 %31 OpBranch %534 %536 = OpLabel OpBranch %524 %524 = OpLabel %565 = OpIAdd %6 %829 %31 OpBranch %521 %523 = OpLabel OpBranch %511 %511 = OpLabel %567 = OpIAdd %6 %826 %31 OpBranch %508 %510 = OpLabel OpBranch %498 %498 = OpLabel %569 = OpIAdd %6 %823 %31 OpBranch %495 %497 = OpLabel OpBranch %485 %485 = OpLabel %571 = OpIAdd %6 %820 %31 OpBranch %482 %484 = OpLabel OpBranch %472 %472 = OpLabel %573 = OpIAdd %6 %817 %31 OpBranch %469 %471 = OpLabel OpBranch %459 %459 = OpLabel %575 = OpIAdd %6 %814 %31 OpBranch %456 %458 = OpLabel OpBranch %446 %446 = OpLabel %577 = OpIAdd %6 %811 %31 OpBranch %443 %445 = OpLabel OpBranch %433 %433 = OpLabel %579 = OpIAdd %6 %808 %31 OpBranch %430 %432 = OpLabel OpBranch %420 %420 = OpLabel %581 = OpIAdd %6 %805 %31 OpBranch %417 %419 = OpLabel OpBranch %407 %407 = OpLabel %583 = OpIAdd %6 %802 %31 OpBranch %404 %406 = OpLabel OpBranch %394 %394 = OpLabel %585 = OpIAdd %6 %799 %31 OpBranch %391 %393 = OpLabel OpBranch %381 %381 = OpLabel %587 = OpIAdd %6 %796 %31 OpBranch %378 %380 = OpLabel OpBranch %368 %368 = OpLabel %589 = OpIAdd %6 %793 %31 OpBranch %365 %367 = OpLabel OpBranch %355 %355 = OpLabel %591 = OpIAdd %6 %790 %31 OpBranch %352 %354 = OpLabel OpBranch %342 %342 = OpLabel %593 = OpIAdd %6 %787 %31 OpBranch %339 %341 = OpLabel OpBranch %329 %329 = OpLabel %595 = OpIAdd %6 %784 %31 OpBranch %326 %328 = OpLabel OpBranch %316 %316 = OpLabel %597 = OpIAdd %6 %781 %31 OpBranch %313 %315 = OpLabel OpBranch %303 %303 = OpLabel %599 = OpIAdd %6 %778 %31 OpBranch %300 %302 = OpLabel OpBranch %290 %290 = OpLabel %601 = OpIAdd %6 %775 %31 OpBranch %287 %289 = OpLabel OpBranch %277 %277 = OpLabel %603 = OpIAdd %6 %772 %31 OpBranch %274 %276 = OpLabel OpBranch %264 %264 = OpLabel %605 = OpIAdd %6 %769 %31 OpBranch %261 %263 = OpLabel OpBranch %251 %251 = OpLabel %607 = OpIAdd %6 %766 %31 OpBranch %248 %250 = OpLabel OpBranch %238 %238 = OpLabel %609 = OpIAdd %6 %763 %31 OpBranch %235 %237 = OpLabel OpBranch %225 %225 = OpLabel %611 = OpIAdd %6 %760 %31 OpBranch %222 %224 = OpLabel OpBranch %212 %212 = OpLabel %613 = OpIAdd %6 %757 %31 OpBranch %209 %211 = OpLabel OpBranch %199 %199 = OpLabel %615 = OpIAdd %6 %754 %31 OpBranch %196 %198 = OpLabel OpBranch %186 %186 = OpLabel %617 = OpIAdd %6 %751 %31 OpBranch %183 %185 = OpLabel OpBranch %173 %173 = OpLabel %619 = OpIAdd %6 %748 %31 OpBranch %170 %172 = OpLabel OpBranch %160 %160 = OpLabel %621 = OpIAdd %6 %745 %31 OpBranch %157 %159 = OpLabel OpBranch %147 %147 = OpLabel %623 = OpIAdd %6 %742 %31 OpBranch %144 %146 = OpLabel OpBranch %134 %134 = OpLabel %625 = OpIAdd %6 %739 %31 OpBranch %131 %133 = OpLabel OpBranch %121 %121 = OpLabel %627 = OpIAdd %6 %736 %31 OpBranch %118 %120 = OpLabel OpBranch %108 %108 = OpLabel %629 = OpIAdd %6 %733 %31 OpBranch %105 %107 = OpLabel OpBranch %95 %95 = OpLabel %631 = OpIAdd %6 %730 %31 OpBranch %92 %94 = OpLabel OpBranch %82 %82 = OpLabel %633 = OpIAdd %6 %727 %31 OpBranch %79 %81 = OpLabel OpBranch %69 %69 = OpLabel %635 = OpIAdd %6 %724 %31 OpBranch %66 %68 = OpLabel OpBranch %54 %54 = OpLabel %637 = OpIAdd %6 %712 %31 OpBranch %51 %53 = OpLabel %645 = OpAccessChain %644 %642 %643 %646 = OpLoad %639 %645 %648 = OpFOrdGreaterThan %28 %646 %647 OpSelectionMerge %650 None OpBranchConditional %648 %649 %650 %649 = OpLabel %707 = OpLoad %9 %704 OpStore %709 %707 OpSelectionMerge %701 None OpSwitch %668 %680 %680 = OpLabel OpBranch %681 %681 = OpLabel %715 = OpPhi %6 %18 %680 %696 %697 %714 = OpPhi %6 %713 %680 %687 %697 %684 = OpSLessThan %28 %714 %27 OpLoopMerge %698 %697 None OpBranchConditional %684 %685 %698 %685 = OpLabel %687 = OpIAdd %6 %714 %31 %711 = OpAccessChain %19 %709 %715 %690 = OpLoad %6 %711 %692 = OpINotEqual %28 %690 %715 OpSelectionMerge %694 None OpBranchConditional %692 %693 %694 %693 = OpLabel OpBranch %698 %694 = OpLabel %696 = OpIAdd %6 %715 %31 OpBranch %697 %697 = OpLabel OpBranch %681 %698 = OpLabel %719 = OpPhi %6 %722 %681 %18 %693 %716 = OpPhi %28 %669 %681 %672 %693 OpSelectionMerge %700 None OpBranchConditional %716 %701 %700 %700 = OpLabel OpBranch %701 %701 = OpLabel %718 = OpPhi %6 %719 %698 %31 %700 OpBranch %650 %650 = OpLabel %723 = OpPhi %6 %18 %53 %718 %701 %655 = OpIEqual %28 %723 %31 OpSelectionMerge %657 None OpBranchConditional %655 %656 %662 %656 = OpLabel OpStore %659 %661 OpBranch %657 %662 = OpLabel OpStore %659 %663 OpBranch %657 %657 = OpLabel OpReturn OpFunctionEnd END # uniforms for variant BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM PIPELINE graphics variant_pipeline ATTACH variant_vertex_shader ATTACH variant_fragment_shader FRAMEBUFFER_SIZE 16 16 BIND BUFFER variant_framebuffer AS color LOCATION 0 END CLEAR_COLOR variant_pipeline 0 0 0 255 CLEAR variant_pipeline RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16 EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255