1#!amber 2 3# Copyright 2021 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 coverage-gap found by the GraphicsFuzz project. 19 20# Short description: A fragment shader that covers specific BRW code paths 21 22# The test passes because the shader always writes red. 23 24# Optimized using spirv-opt with the following arguments: 25# '-Os' 26# spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af 27 28 29 30SHADER vertex variant_vertex_shader PASSTHROUGH 31 32# variant_fragment_shader is derived from the following GLSL: 33# #version 320 es 34# 35# precision highp float; 36# precision highp int; 37# 38# const int _GLF_global_loop_bound = 100; 39# int _GLF_global_loop_count = 0; 40# 41# layout(location = 0) out vec4 _GLF_color; 42# 43# struct S 44# { 45# int data[10]; 46# }; 47# 48# int func(S obj) 49# { 50# int x = 0; 51# 52# // Five more iterations as the global loop count has already 53# // reached its limit. 54# while(_GLF_global_loop_count < _GLF_global_loop_bound + 5) 55# { 56# _GLF_global_loop_count ++; 57# 58# // Checks if the first five elements are set to the 59# // correct value inside the inner loop in the main 60# // function. Return zero if the check fails. 61# if (obj.data[x] != x) 62# return 0; 63# 64# x++; 65# } 66# 67# // Return 1 when the check passes. 68# return 1; 69# } 70# 71# // Global loop counter incrementation cannot be inside the for loop (along with i++) for the coverage points to trigger. 72# #define LOOP _GLF_global_loop_count++; for(int i = 0; i < 5 && _GLF_global_loop_count < _GLF_global_loop_bound; i++) 73# 74# void main() 75# { 76# S obj = S(int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); 77# 78# LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { 79# LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { 80# LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { 81# // Sets the first five elements to 0, 1, 2, 3, 4. 82# obj.data[i] = i; 83# } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } 84# 85# int a = 0; 86# // Always true. 87# if(gl_FragCoord.y > 0.0) 88# a = func(obj); 89# 90# // Always true. 91# if (a == 1) 92# _GLF_color = vec4(1, 0, 0, 1); 93# else 94# _GLF_color = vec4(0); 95# } 96SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 97; SPIR-V 98; Version: 1.0 99; Generator: Khronos Glslang Reference Front End; 10 100; Bound: 836 101; Schema: 0 102 OpCapability Shader 103 %1 = OpExtInstImport "GLSL.std.450" 104 OpMemoryModel Logical GLSL450 105 OpEntryPoint Fragment %4 "main" %642 %659 106 OpExecutionMode %4 OriginUpperLeft 107 OpSource ESSL 320 108 OpName %4 "main" 109 OpName %642 "gl_FragCoord" 110 OpName %659 "_GLF_color" 111 OpDecorate %642 BuiltIn FragCoord 112 OpDecorate %659 Location 0 113 %2 = OpTypeVoid 114 %3 = OpTypeFunction %2 115 %6 = OpTypeInt 32 1 116 %7 = OpTypeInt 32 0 117 %8 = OpConstant %7 10 118 %9 = OpTypeArray %6 %8 119 %18 = OpConstant %6 0 120 %19 = OpTypePointer Function %6 121 %27 = OpConstant %6 105 122 %28 = OpTypeBool 123 %31 = OpConstant %6 1 124 %46 = OpConstantComposite %9 %18 %18 %18 %18 %18 %18 %18 %18 %18 %18 125 %57 = OpConstant %6 5 126 %60 = OpConstant %6 100 127 %639 = OpTypeFloat 32 128 %640 = OpTypeVector %639 4 129 %641 = OpTypePointer Input %640 130 %642 = OpVariable %641 Input 131 %643 = OpConstant %7 1 132 %644 = OpTypePointer Input %639 133 %647 = OpConstant %639 0 134 %658 = OpTypePointer Output %640 135 %659 = OpVariable %658 Output 136 %660 = OpConstant %639 1 137 %661 = OpConstantComposite %640 %660 %647 %647 %660 138 %663 = OpConstantComposite %640 %647 %647 %647 %647 139 %668 = OpConstant %7 0 140 %669 = OpConstantFalse %28 141 %672 = OpConstantTrue %28 142 %703 = OpTypePointer Function %9 143 %722 = OpUndef %6 144 %4 = OpFunction %2 None %3 145 %5 = OpLabel 146 %709 = OpVariable %703 Function 147 %704 = OpVariable %703 Function 148 OpStore %704 %46 149 OpBranch %51 150 %51 = OpLabel 151 %713 = OpPhi %6 %31 %5 %725 %54 152 %712 = OpPhi %6 %18 %5 %637 %54 153 %58 = OpSLessThan %28 %712 %57 154 %61 = OpSLessThan %28 %713 %60 155 %62 = OpLogicalAnd %28 %58 %61 156 OpLoopMerge %53 %54 None 157 OpBranchConditional %62 %52 %53 158 %52 = OpLabel 159 %64 = OpIAdd %6 %713 %31 160 OpBranch %66 161 %66 = OpLabel 162 %725 = OpPhi %6 %64 %52 %728 %69 163 %724 = OpPhi %6 %18 %52 %635 %69 164 %72 = OpSLessThan %28 %724 %57 165 %74 = OpSLessThan %28 %725 %60 166 %75 = OpLogicalAnd %28 %72 %74 167 OpLoopMerge %68 %69 None 168 OpBranchConditional %75 %67 %68 169 %67 = OpLabel 170 %77 = OpIAdd %6 %725 %31 171 OpBranch %79 172 %79 = OpLabel 173 %728 = OpPhi %6 %77 %67 %731 %82 174 %727 = OpPhi %6 %18 %67 %633 %82 175 %85 = OpSLessThan %28 %727 %57 176 %87 = OpSLessThan %28 %728 %60 177 %88 = OpLogicalAnd %28 %85 %87 178 OpLoopMerge %81 %82 None 179 OpBranchConditional %88 %80 %81 180 %80 = OpLabel 181 %90 = OpIAdd %6 %728 %31 182 OpBranch %92 183 %92 = OpLabel 184 %731 = OpPhi %6 %90 %80 %734 %95 185 %730 = OpPhi %6 %18 %80 %631 %95 186 %98 = OpSLessThan %28 %730 %57 187 %100 = OpSLessThan %28 %731 %60 188 %101 = OpLogicalAnd %28 %98 %100 189 OpLoopMerge %94 %95 None 190 OpBranchConditional %101 %93 %94 191 %93 = OpLabel 192 %103 = OpIAdd %6 %731 %31 193 OpBranch %105 194 %105 = OpLabel 195 %734 = OpPhi %6 %103 %93 %737 %108 196 %733 = OpPhi %6 %18 %93 %629 %108 197 %111 = OpSLessThan %28 %733 %57 198 %113 = OpSLessThan %28 %734 %60 199 %114 = OpLogicalAnd %28 %111 %113 200 OpLoopMerge %107 %108 None 201 OpBranchConditional %114 %106 %107 202 %106 = OpLabel 203 %116 = OpIAdd %6 %734 %31 204 OpBranch %118 205 %118 = OpLabel 206 %737 = OpPhi %6 %116 %106 %740 %121 207 %736 = OpPhi %6 %18 %106 %627 %121 208 %124 = OpSLessThan %28 %736 %57 209 %126 = OpSLessThan %28 %737 %60 210 %127 = OpLogicalAnd %28 %124 %126 211 OpLoopMerge %120 %121 None 212 OpBranchConditional %127 %119 %120 213 %119 = OpLabel 214 %129 = OpIAdd %6 %737 %31 215 OpBranch %131 216 %131 = OpLabel 217 %740 = OpPhi %6 %129 %119 %743 %134 218 %739 = OpPhi %6 %18 %119 %625 %134 219 %137 = OpSLessThan %28 %739 %57 220 %139 = OpSLessThan %28 %740 %60 221 %140 = OpLogicalAnd %28 %137 %139 222 OpLoopMerge %133 %134 None 223 OpBranchConditional %140 %132 %133 224 %132 = OpLabel 225 %142 = OpIAdd %6 %740 %31 226 OpBranch %144 227 %144 = OpLabel 228 %743 = OpPhi %6 %142 %132 %746 %147 229 %742 = OpPhi %6 %18 %132 %623 %147 230 %150 = OpSLessThan %28 %742 %57 231 %152 = OpSLessThan %28 %743 %60 232 %153 = OpLogicalAnd %28 %150 %152 233 OpLoopMerge %146 %147 None 234 OpBranchConditional %153 %145 %146 235 %145 = OpLabel 236 %155 = OpIAdd %6 %743 %31 237 OpBranch %157 238 %157 = OpLabel 239 %746 = OpPhi %6 %155 %145 %749 %160 240 %745 = OpPhi %6 %18 %145 %621 %160 241 %163 = OpSLessThan %28 %745 %57 242 %165 = OpSLessThan %28 %746 %60 243 %166 = OpLogicalAnd %28 %163 %165 244 OpLoopMerge %159 %160 None 245 OpBranchConditional %166 %158 %159 246 %158 = OpLabel 247 %168 = OpIAdd %6 %746 %31 248 OpBranch %170 249 %170 = OpLabel 250 %749 = OpPhi %6 %168 %158 %752 %173 251 %748 = OpPhi %6 %18 %158 %619 %173 252 %176 = OpSLessThan %28 %748 %57 253 %178 = OpSLessThan %28 %749 %60 254 %179 = OpLogicalAnd %28 %176 %178 255 OpLoopMerge %172 %173 None 256 OpBranchConditional %179 %171 %172 257 %171 = OpLabel 258 %181 = OpIAdd %6 %749 %31 259 OpBranch %183 260 %183 = OpLabel 261 %752 = OpPhi %6 %181 %171 %755 %186 262 %751 = OpPhi %6 %18 %171 %617 %186 263 %189 = OpSLessThan %28 %751 %57 264 %191 = OpSLessThan %28 %752 %60 265 %192 = OpLogicalAnd %28 %189 %191 266 OpLoopMerge %185 %186 None 267 OpBranchConditional %192 %184 %185 268 %184 = OpLabel 269 %194 = OpIAdd %6 %752 %31 270 OpBranch %196 271 %196 = OpLabel 272 %755 = OpPhi %6 %194 %184 %758 %199 273 %754 = OpPhi %6 %18 %184 %615 %199 274 %202 = OpSLessThan %28 %754 %57 275 %204 = OpSLessThan %28 %755 %60 276 %205 = OpLogicalAnd %28 %202 %204 277 OpLoopMerge %198 %199 None 278 OpBranchConditional %205 %197 %198 279 %197 = OpLabel 280 %207 = OpIAdd %6 %755 %31 281 OpBranch %209 282 %209 = OpLabel 283 %758 = OpPhi %6 %207 %197 %761 %212 284 %757 = OpPhi %6 %18 %197 %613 %212 285 %215 = OpSLessThan %28 %757 %57 286 %217 = OpSLessThan %28 %758 %60 287 %218 = OpLogicalAnd %28 %215 %217 288 OpLoopMerge %211 %212 None 289 OpBranchConditional %218 %210 %211 290 %210 = OpLabel 291 %220 = OpIAdd %6 %758 %31 292 OpBranch %222 293 %222 = OpLabel 294 %761 = OpPhi %6 %220 %210 %764 %225 295 %760 = OpPhi %6 %18 %210 %611 %225 296 %228 = OpSLessThan %28 %760 %57 297 %230 = OpSLessThan %28 %761 %60 298 %231 = OpLogicalAnd %28 %228 %230 299 OpLoopMerge %224 %225 None 300 OpBranchConditional %231 %223 %224 301 %223 = OpLabel 302 %233 = OpIAdd %6 %761 %31 303 OpBranch %235 304 %235 = OpLabel 305 %764 = OpPhi %6 %233 %223 %767 %238 306 %763 = OpPhi %6 %18 %223 %609 %238 307 %241 = OpSLessThan %28 %763 %57 308 %243 = OpSLessThan %28 %764 %60 309 %244 = OpLogicalAnd %28 %241 %243 310 OpLoopMerge %237 %238 None 311 OpBranchConditional %244 %236 %237 312 %236 = OpLabel 313 %246 = OpIAdd %6 %764 %31 314 OpBranch %248 315 %248 = OpLabel 316 %767 = OpPhi %6 %246 %236 %770 %251 317 %766 = OpPhi %6 %18 %236 %607 %251 318 %254 = OpSLessThan %28 %766 %57 319 %256 = OpSLessThan %28 %767 %60 320 %257 = OpLogicalAnd %28 %254 %256 321 OpLoopMerge %250 %251 None 322 OpBranchConditional %257 %249 %250 323 %249 = OpLabel 324 %259 = OpIAdd %6 %767 %31 325 OpBranch %261 326 %261 = OpLabel 327 %770 = OpPhi %6 %259 %249 %773 %264 328 %769 = OpPhi %6 %18 %249 %605 %264 329 %267 = OpSLessThan %28 %769 %57 330 %269 = OpSLessThan %28 %770 %60 331 %270 = OpLogicalAnd %28 %267 %269 332 OpLoopMerge %263 %264 None 333 OpBranchConditional %270 %262 %263 334 %262 = OpLabel 335 %272 = OpIAdd %6 %770 %31 336 OpBranch %274 337 %274 = OpLabel 338 %773 = OpPhi %6 %272 %262 %776 %277 339 %772 = OpPhi %6 %18 %262 %603 %277 340 %280 = OpSLessThan %28 %772 %57 341 %282 = OpSLessThan %28 %773 %60 342 %283 = OpLogicalAnd %28 %280 %282 343 OpLoopMerge %276 %277 None 344 OpBranchConditional %283 %275 %276 345 %275 = OpLabel 346 %285 = OpIAdd %6 %773 %31 347 OpBranch %287 348 %287 = OpLabel 349 %776 = OpPhi %6 %285 %275 %779 %290 350 %775 = OpPhi %6 %18 %275 %601 %290 351 %293 = OpSLessThan %28 %775 %57 352 %295 = OpSLessThan %28 %776 %60 353 %296 = OpLogicalAnd %28 %293 %295 354 OpLoopMerge %289 %290 None 355 OpBranchConditional %296 %288 %289 356 %288 = OpLabel 357 %298 = OpIAdd %6 %776 %31 358 OpBranch %300 359 %300 = OpLabel 360 %779 = OpPhi %6 %298 %288 %782 %303 361 %778 = OpPhi %6 %18 %288 %599 %303 362 %306 = OpSLessThan %28 %778 %57 363 %308 = OpSLessThan %28 %779 %60 364 %309 = OpLogicalAnd %28 %306 %308 365 OpLoopMerge %302 %303 None 366 OpBranchConditional %309 %301 %302 367 %301 = OpLabel 368 %311 = OpIAdd %6 %779 %31 369 OpBranch %313 370 %313 = OpLabel 371 %782 = OpPhi %6 %311 %301 %785 %316 372 %781 = OpPhi %6 %18 %301 %597 %316 373 %319 = OpSLessThan %28 %781 %57 374 %321 = OpSLessThan %28 %782 %60 375 %322 = OpLogicalAnd %28 %319 %321 376 OpLoopMerge %315 %316 None 377 OpBranchConditional %322 %314 %315 378 %314 = OpLabel 379 %324 = OpIAdd %6 %782 %31 380 OpBranch %326 381 %326 = OpLabel 382 %785 = OpPhi %6 %324 %314 %788 %329 383 %784 = OpPhi %6 %18 %314 %595 %329 384 %332 = OpSLessThan %28 %784 %57 385 %334 = OpSLessThan %28 %785 %60 386 %335 = OpLogicalAnd %28 %332 %334 387 OpLoopMerge %328 %329 None 388 OpBranchConditional %335 %327 %328 389 %327 = OpLabel 390 %337 = OpIAdd %6 %785 %31 391 OpBranch %339 392 %339 = OpLabel 393 %788 = OpPhi %6 %337 %327 %791 %342 394 %787 = OpPhi %6 %18 %327 %593 %342 395 %345 = OpSLessThan %28 %787 %57 396 %347 = OpSLessThan %28 %788 %60 397 %348 = OpLogicalAnd %28 %345 %347 398 OpLoopMerge %341 %342 None 399 OpBranchConditional %348 %340 %341 400 %340 = OpLabel 401 %350 = OpIAdd %6 %788 %31 402 OpBranch %352 403 %352 = OpLabel 404 %791 = OpPhi %6 %350 %340 %794 %355 405 %790 = OpPhi %6 %18 %340 %591 %355 406 %358 = OpSLessThan %28 %790 %57 407 %360 = OpSLessThan %28 %791 %60 408 %361 = OpLogicalAnd %28 %358 %360 409 OpLoopMerge %354 %355 None 410 OpBranchConditional %361 %353 %354 411 %353 = OpLabel 412 %363 = OpIAdd %6 %791 %31 413 OpBranch %365 414 %365 = OpLabel 415 %794 = OpPhi %6 %363 %353 %797 %368 416 %793 = OpPhi %6 %18 %353 %589 %368 417 %371 = OpSLessThan %28 %793 %57 418 %373 = OpSLessThan %28 %794 %60 419 %374 = OpLogicalAnd %28 %371 %373 420 OpLoopMerge %367 %368 None 421 OpBranchConditional %374 %366 %367 422 %366 = OpLabel 423 %376 = OpIAdd %6 %794 %31 424 OpBranch %378 425 %378 = OpLabel 426 %797 = OpPhi %6 %376 %366 %800 %381 427 %796 = OpPhi %6 %18 %366 %587 %381 428 %384 = OpSLessThan %28 %796 %57 429 %386 = OpSLessThan %28 %797 %60 430 %387 = OpLogicalAnd %28 %384 %386 431 OpLoopMerge %380 %381 None 432 OpBranchConditional %387 %379 %380 433 %379 = OpLabel 434 %389 = OpIAdd %6 %797 %31 435 OpBranch %391 436 %391 = OpLabel 437 %800 = OpPhi %6 %389 %379 %803 %394 438 %799 = OpPhi %6 %18 %379 %585 %394 439 %397 = OpSLessThan %28 %799 %57 440 %399 = OpSLessThan %28 %800 %60 441 %400 = OpLogicalAnd %28 %397 %399 442 OpLoopMerge %393 %394 None 443 OpBranchConditional %400 %392 %393 444 %392 = OpLabel 445 %402 = OpIAdd %6 %800 %31 446 OpBranch %404 447 %404 = OpLabel 448 %803 = OpPhi %6 %402 %392 %806 %407 449 %802 = OpPhi %6 %18 %392 %583 %407 450 %410 = OpSLessThan %28 %802 %57 451 %412 = OpSLessThan %28 %803 %60 452 %413 = OpLogicalAnd %28 %410 %412 453 OpLoopMerge %406 %407 None 454 OpBranchConditional %413 %405 %406 455 %405 = OpLabel 456 %415 = OpIAdd %6 %803 %31 457 OpBranch %417 458 %417 = OpLabel 459 %806 = OpPhi %6 %415 %405 %809 %420 460 %805 = OpPhi %6 %18 %405 %581 %420 461 %423 = OpSLessThan %28 %805 %57 462 %425 = OpSLessThan %28 %806 %60 463 %426 = OpLogicalAnd %28 %423 %425 464 OpLoopMerge %419 %420 None 465 OpBranchConditional %426 %418 %419 466 %418 = OpLabel 467 %428 = OpIAdd %6 %806 %31 468 OpBranch %430 469 %430 = OpLabel 470 %809 = OpPhi %6 %428 %418 %812 %433 471 %808 = OpPhi %6 %18 %418 %579 %433 472 %436 = OpSLessThan %28 %808 %57 473 %438 = OpSLessThan %28 %809 %60 474 %439 = OpLogicalAnd %28 %436 %438 475 OpLoopMerge %432 %433 None 476 OpBranchConditional %439 %431 %432 477 %431 = OpLabel 478 %441 = OpIAdd %6 %809 %31 479 OpBranch %443 480 %443 = OpLabel 481 %812 = OpPhi %6 %441 %431 %815 %446 482 %811 = OpPhi %6 %18 %431 %577 %446 483 %449 = OpSLessThan %28 %811 %57 484 %451 = OpSLessThan %28 %812 %60 485 %452 = OpLogicalAnd %28 %449 %451 486 OpLoopMerge %445 %446 None 487 OpBranchConditional %452 %444 %445 488 %444 = OpLabel 489 %454 = OpIAdd %6 %812 %31 490 OpBranch %456 491 %456 = OpLabel 492 %815 = OpPhi %6 %454 %444 %818 %459 493 %814 = OpPhi %6 %18 %444 %575 %459 494 %462 = OpSLessThan %28 %814 %57 495 %464 = OpSLessThan %28 %815 %60 496 %465 = OpLogicalAnd %28 %462 %464 497 OpLoopMerge %458 %459 None 498 OpBranchConditional %465 %457 %458 499 %457 = OpLabel 500 %467 = OpIAdd %6 %815 %31 501 OpBranch %469 502 %469 = OpLabel 503 %818 = OpPhi %6 %467 %457 %821 %472 504 %817 = OpPhi %6 %18 %457 %573 %472 505 %475 = OpSLessThan %28 %817 %57 506 %477 = OpSLessThan %28 %818 %60 507 %478 = OpLogicalAnd %28 %475 %477 508 OpLoopMerge %471 %472 None 509 OpBranchConditional %478 %470 %471 510 %470 = OpLabel 511 %480 = OpIAdd %6 %818 %31 512 OpBranch %482 513 %482 = OpLabel 514 %821 = OpPhi %6 %480 %470 %824 %485 515 %820 = OpPhi %6 %18 %470 %571 %485 516 %488 = OpSLessThan %28 %820 %57 517 %490 = OpSLessThan %28 %821 %60 518 %491 = OpLogicalAnd %28 %488 %490 519 OpLoopMerge %484 %485 None 520 OpBranchConditional %491 %483 %484 521 %483 = OpLabel 522 %493 = OpIAdd %6 %821 %31 523 OpBranch %495 524 %495 = OpLabel 525 %824 = OpPhi %6 %493 %483 %827 %498 526 %823 = OpPhi %6 %18 %483 %569 %498 527 %501 = OpSLessThan %28 %823 %57 528 %503 = OpSLessThan %28 %824 %60 529 %504 = OpLogicalAnd %28 %501 %503 530 OpLoopMerge %497 %498 None 531 OpBranchConditional %504 %496 %497 532 %496 = OpLabel 533 %506 = OpIAdd %6 %824 %31 534 OpBranch %508 535 %508 = OpLabel 536 %827 = OpPhi %6 %506 %496 %830 %511 537 %826 = OpPhi %6 %18 %496 %567 %511 538 %514 = OpSLessThan %28 %826 %57 539 %516 = OpSLessThan %28 %827 %60 540 %517 = OpLogicalAnd %28 %514 %516 541 OpLoopMerge %510 %511 None 542 OpBranchConditional %517 %509 %510 543 %509 = OpLabel 544 %519 = OpIAdd %6 %827 %31 545 OpBranch %521 546 %521 = OpLabel 547 %830 = OpPhi %6 %519 %509 %833 %524 548 %829 = OpPhi %6 %18 %509 %565 %524 549 %527 = OpSLessThan %28 %829 %57 550 %529 = OpSLessThan %28 %830 %60 551 %530 = OpLogicalAnd %28 %527 %529 552 OpLoopMerge %523 %524 None 553 OpBranchConditional %530 %522 %523 554 %522 = OpLabel 555 %532 = OpIAdd %6 %830 %31 556 OpBranch %534 557 %534 = OpLabel 558 %833 = OpPhi %6 %532 %522 %545 %537 559 %832 = OpPhi %6 %18 %522 %563 %537 560 %540 = OpSLessThan %28 %832 %57 561 %542 = OpSLessThan %28 %833 %60 562 %543 = OpLogicalAnd %28 %540 %542 563 OpLoopMerge %536 %537 None 564 OpBranchConditional %543 %535 %536 565 %535 = OpLabel 566 %545 = OpIAdd %6 %833 %31 567 OpBranch %547 568 %547 = OpLabel 569 %835 = OpPhi %6 %18 %535 %561 %548 570 %553 = OpSLessThan %28 %835 %57 571 %555 = OpSLessThan %28 %545 %60 572 %556 = OpLogicalAnd %28 %553 %555 573 OpLoopMerge %549 %548 None 574 OpBranchConditional %556 %548 %549 575 %548 = OpLabel 576 %706 = OpAccessChain %19 %704 %835 577 OpStore %706 %835 578 %561 = OpIAdd %6 %835 %31 579 OpBranch %547 580 %549 = OpLabel 581 OpBranch %537 582 %537 = OpLabel 583 %563 = OpIAdd %6 %832 %31 584 OpBranch %534 585 %536 = OpLabel 586 OpBranch %524 587 %524 = OpLabel 588 %565 = OpIAdd %6 %829 %31 589 OpBranch %521 590 %523 = OpLabel 591 OpBranch %511 592 %511 = OpLabel 593 %567 = OpIAdd %6 %826 %31 594 OpBranch %508 595 %510 = OpLabel 596 OpBranch %498 597 %498 = OpLabel 598 %569 = OpIAdd %6 %823 %31 599 OpBranch %495 600 %497 = OpLabel 601 OpBranch %485 602 %485 = OpLabel 603 %571 = OpIAdd %6 %820 %31 604 OpBranch %482 605 %484 = OpLabel 606 OpBranch %472 607 %472 = OpLabel 608 %573 = OpIAdd %6 %817 %31 609 OpBranch %469 610 %471 = OpLabel 611 OpBranch %459 612 %459 = OpLabel 613 %575 = OpIAdd %6 %814 %31 614 OpBranch %456 615 %458 = OpLabel 616 OpBranch %446 617 %446 = OpLabel 618 %577 = OpIAdd %6 %811 %31 619 OpBranch %443 620 %445 = OpLabel 621 OpBranch %433 622 %433 = OpLabel 623 %579 = OpIAdd %6 %808 %31 624 OpBranch %430 625 %432 = OpLabel 626 OpBranch %420 627 %420 = OpLabel 628 %581 = OpIAdd %6 %805 %31 629 OpBranch %417 630 %419 = OpLabel 631 OpBranch %407 632 %407 = OpLabel 633 %583 = OpIAdd %6 %802 %31 634 OpBranch %404 635 %406 = OpLabel 636 OpBranch %394 637 %394 = OpLabel 638 %585 = OpIAdd %6 %799 %31 639 OpBranch %391 640 %393 = OpLabel 641 OpBranch %381 642 %381 = OpLabel 643 %587 = OpIAdd %6 %796 %31 644 OpBranch %378 645 %380 = OpLabel 646 OpBranch %368 647 %368 = OpLabel 648 %589 = OpIAdd %6 %793 %31 649 OpBranch %365 650 %367 = OpLabel 651 OpBranch %355 652 %355 = OpLabel 653 %591 = OpIAdd %6 %790 %31 654 OpBranch %352 655 %354 = OpLabel 656 OpBranch %342 657 %342 = OpLabel 658 %593 = OpIAdd %6 %787 %31 659 OpBranch %339 660 %341 = OpLabel 661 OpBranch %329 662 %329 = OpLabel 663 %595 = OpIAdd %6 %784 %31 664 OpBranch %326 665 %328 = OpLabel 666 OpBranch %316 667 %316 = OpLabel 668 %597 = OpIAdd %6 %781 %31 669 OpBranch %313 670 %315 = OpLabel 671 OpBranch %303 672 %303 = OpLabel 673 %599 = OpIAdd %6 %778 %31 674 OpBranch %300 675 %302 = OpLabel 676 OpBranch %290 677 %290 = OpLabel 678 %601 = OpIAdd %6 %775 %31 679 OpBranch %287 680 %289 = OpLabel 681 OpBranch %277 682 %277 = OpLabel 683 %603 = OpIAdd %6 %772 %31 684 OpBranch %274 685 %276 = OpLabel 686 OpBranch %264 687 %264 = OpLabel 688 %605 = OpIAdd %6 %769 %31 689 OpBranch %261 690 %263 = OpLabel 691 OpBranch %251 692 %251 = OpLabel 693 %607 = OpIAdd %6 %766 %31 694 OpBranch %248 695 %250 = OpLabel 696 OpBranch %238 697 %238 = OpLabel 698 %609 = OpIAdd %6 %763 %31 699 OpBranch %235 700 %237 = OpLabel 701 OpBranch %225 702 %225 = OpLabel 703 %611 = OpIAdd %6 %760 %31 704 OpBranch %222 705 %224 = OpLabel 706 OpBranch %212 707 %212 = OpLabel 708 %613 = OpIAdd %6 %757 %31 709 OpBranch %209 710 %211 = OpLabel 711 OpBranch %199 712 %199 = OpLabel 713 %615 = OpIAdd %6 %754 %31 714 OpBranch %196 715 %198 = OpLabel 716 OpBranch %186 717 %186 = OpLabel 718 %617 = OpIAdd %6 %751 %31 719 OpBranch %183 720 %185 = OpLabel 721 OpBranch %173 722 %173 = OpLabel 723 %619 = OpIAdd %6 %748 %31 724 OpBranch %170 725 %172 = OpLabel 726 OpBranch %160 727 %160 = OpLabel 728 %621 = OpIAdd %6 %745 %31 729 OpBranch %157 730 %159 = OpLabel 731 OpBranch %147 732 %147 = OpLabel 733 %623 = OpIAdd %6 %742 %31 734 OpBranch %144 735 %146 = OpLabel 736 OpBranch %134 737 %134 = OpLabel 738 %625 = OpIAdd %6 %739 %31 739 OpBranch %131 740 %133 = OpLabel 741 OpBranch %121 742 %121 = OpLabel 743 %627 = OpIAdd %6 %736 %31 744 OpBranch %118 745 %120 = OpLabel 746 OpBranch %108 747 %108 = OpLabel 748 %629 = OpIAdd %6 %733 %31 749 OpBranch %105 750 %107 = OpLabel 751 OpBranch %95 752 %95 = OpLabel 753 %631 = OpIAdd %6 %730 %31 754 OpBranch %92 755 %94 = OpLabel 756 OpBranch %82 757 %82 = OpLabel 758 %633 = OpIAdd %6 %727 %31 759 OpBranch %79 760 %81 = OpLabel 761 OpBranch %69 762 %69 = OpLabel 763 %635 = OpIAdd %6 %724 %31 764 OpBranch %66 765 %68 = OpLabel 766 OpBranch %54 767 %54 = OpLabel 768 %637 = OpIAdd %6 %712 %31 769 OpBranch %51 770 %53 = OpLabel 771 %645 = OpAccessChain %644 %642 %643 772 %646 = OpLoad %639 %645 773 %648 = OpFOrdGreaterThan %28 %646 %647 774 OpSelectionMerge %650 None 775 OpBranchConditional %648 %649 %650 776 %649 = OpLabel 777 %707 = OpLoad %9 %704 778 OpStore %709 %707 779 OpSelectionMerge %701 None 780 OpSwitch %668 %680 781 %680 = OpLabel 782 OpBranch %681 783 %681 = OpLabel 784 %715 = OpPhi %6 %18 %680 %696 %697 785 %714 = OpPhi %6 %713 %680 %687 %697 786 %684 = OpSLessThan %28 %714 %27 787 OpLoopMerge %698 %697 None 788 OpBranchConditional %684 %685 %698 789 %685 = OpLabel 790 %687 = OpIAdd %6 %714 %31 791 %711 = OpAccessChain %19 %709 %715 792 %690 = OpLoad %6 %711 793 %692 = OpINotEqual %28 %690 %715 794 OpSelectionMerge %694 None 795 OpBranchConditional %692 %693 %694 796 %693 = OpLabel 797 OpBranch %698 798 %694 = OpLabel 799 %696 = OpIAdd %6 %715 %31 800 OpBranch %697 801 %697 = OpLabel 802 OpBranch %681 803 %698 = OpLabel 804 %719 = OpPhi %6 %722 %681 %18 %693 805 %716 = OpPhi %28 %669 %681 %672 %693 806 OpSelectionMerge %700 None 807 OpBranchConditional %716 %701 %700 808 %700 = OpLabel 809 OpBranch %701 810 %701 = OpLabel 811 %718 = OpPhi %6 %719 %698 %31 %700 812 OpBranch %650 813 %650 = OpLabel 814 %723 = OpPhi %6 %18 %53 %718 %701 815 %655 = OpIEqual %28 %723 %31 816 OpSelectionMerge %657 None 817 OpBranchConditional %655 %656 %662 818 %656 = OpLabel 819 OpStore %659 %661 820 OpBranch %657 821 %662 = OpLabel 822 OpStore %659 %663 823 OpBranch %657 824 %657 = OpLabel 825 OpReturn 826 OpFunctionEnd 827END 828 829 830BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 831 832PIPELINE graphics variant_pipeline 833 ATTACH variant_vertex_shader 834 ATTACH variant_fragment_shader 835 FRAMEBUFFER_SIZE 256 256 836 BIND BUFFER variant_framebuffer AS color LOCATION 0 837END 838CLEAR_COLOR variant_pipeline 0 0 0 255 839 840CLEAR variant_pipeline 841RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 842 843EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 844