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# '-O' 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# #define _GLF_MAKE_IN_BOUNDS_INT(IDX, SZ) clamp(IDX, 0, SZ - 1) 36# #define LOOP for (int i = 0; i < 1; i++) 37# 38# precision highp float; 39# precision highp int; 40# 41# const int _GLF_global_loop_bound = 100; 42# int _GLF_global_loop_count = 0; 43# 44# layout(location = 0) out vec4 _GLF_color; 45# 46# void main() 47# { 48# float arr[10] = float[10](1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0); 49# int index = 0; 50# 51# while(_GLF_global_loop_count < _GLF_global_loop_bound) 52# { 53# // The inner loop will be iterated just once. 54# LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { 55# LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { 56# LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { 57# LOOP { LOOP { LOOP { LOOP { LOOP 58# { 59# _GLF_global_loop_count ++; 60# } 61# } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } 62# 63# // In the end all elemenst of arr have a value of 2.0. 64# arr[_GLF_MAKE_IN_BOUNDS_INT(index, 10)] = float[10](2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0)[_GLF_MAKE_IN_BOUNDS_INT(index, 10)]; 65# index++; 66# } 67# 68# // The selected indices don't matter as all have the same data of 2.0. 69# vec2 v = vec2(arr[_GLF_MAKE_IN_BOUNDS_INT(int(gl_FragCoord.x), 10)], arr[_GLF_MAKE_IN_BOUNDS_INT(int(gl_FragCoord.y), 10)]); 70# 71# // Always true. 72# if (v.x == 2.0 && v.y == 2.0) 73# _GLF_color = vec4(1, 0, 0, 1); 74# else 75# _GLF_color = vec4(0); 76# 77# } 78SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 79; SPIR-V 80; Version: 1.0 81; Generator: Khronos Glslang Reference Front End; 10 82; Bound: 583 83; Schema: 0 84 OpCapability Shader 85 %1 = OpExtInstImport "GLSL.std.450" 86 OpMemoryModel Logical GLSL450 87 OpEntryPoint Fragment %4 "main" %431 %460 88 OpExecutionMode %4 OriginUpperLeft 89 OpSource ESSL 320 90 OpName %4 "main" 91 OpName %15 "arr" 92 OpName %419 "indexable" 93 OpName %431 "gl_FragCoord" 94 OpName %460 "_GLF_color" 95 OpDecorate %431 BuiltIn FragCoord 96 OpDecorate %460 Location 0 97 %2 = OpTypeVoid 98 %3 = OpTypeFunction %2 99 %6 = OpTypeInt 32 1 100 %9 = OpConstant %6 0 101 %10 = OpTypeFloat 32 102 %11 = OpTypeInt 32 0 103 %12 = OpConstant %11 10 104 %13 = OpTypeArray %10 %12 105 %14 = OpTypePointer Function %13 106 %16 = OpConstant %10 1 107 %17 = OpConstantComposite %13 %16 %16 %16 %16 %16 %16 %16 %16 %16 %16 108 %26 = OpConstant %6 100 109 %27 = OpTypeBool 110 %36 = OpConstant %6 1 111 %413 = OpConstant %6 9 112 %415 = OpConstant %10 2 113 %416 = OpConstantComposite %13 %415 %415 %415 %415 %415 %415 %415 %415 %415 %415 114 %420 = OpTypePointer Function %10 115 %429 = OpTypeVector %10 4 116 %430 = OpTypePointer Input %429 117 %431 = OpVariable %430 Input 118 %432 = OpConstant %11 0 119 %433 = OpTypePointer Input %10 120 %440 = OpConstant %11 1 121 %459 = OpTypePointer Output %429 122 %460 = OpVariable %459 Output 123 %461 = OpConstant %10 0 124 %462 = OpConstantComposite %429 %16 %461 %461 %16 125 %464 = OpConstantComposite %429 %461 %461 %461 %461 126 %4 = OpFunction %2 None %3 127 %5 = OpLabel 128 %15 = OpVariable %14 Function 129 %419 = OpVariable %14 Function 130 OpStore %15 %17 131 OpBranch %20 132 %20 = OpLabel 133 %470 = OpPhi %6 %9 %5 %425 %23 134 %467 = OpPhi %6 %9 %5 %582 %23 135 %28 = OpSLessThan %27 %467 %26 136 OpLoopMerge %22 %23 None 137 OpBranchConditional %28 %21 %22 138 %21 = OpLabel 139 OpBranch %30 140 %30 = OpLabel 141 %468 = OpPhi %6 %9 %21 %411 %33 142 %582 = OpPhi %6 %467 %21 %581 %33 143 %37 = OpSLessThan %27 %468 %36 144 OpLoopMerge %32 %33 None 145 OpBranchConditional %37 %31 %32 146 %31 = OpLabel 147 OpBranch %39 148 %39 = OpLabel 149 %471 = OpPhi %6 %9 %31 %409 %42 150 %581 = OpPhi %6 %582 %31 %580 %42 151 %45 = OpSLessThan %27 %471 %36 152 OpLoopMerge %41 %42 None 153 OpBranchConditional %45 %40 %41 154 %40 = OpLabel 155 OpBranch %47 156 %47 = OpLabel 157 %473 = OpPhi %6 %9 %40 %407 %50 158 %580 = OpPhi %6 %581 %40 %579 %50 159 %53 = OpSLessThan %27 %473 %36 160 OpLoopMerge %49 %50 None 161 OpBranchConditional %53 %48 %49 162 %48 = OpLabel 163 OpBranch %55 164 %55 = OpLabel 165 %475 = OpPhi %6 %9 %48 %405 %58 166 %579 = OpPhi %6 %580 %48 %578 %58 167 %61 = OpSLessThan %27 %475 %36 168 OpLoopMerge %57 %58 None 169 OpBranchConditional %61 %56 %57 170 %56 = OpLabel 171 OpBranch %63 172 %63 = OpLabel 173 %477 = OpPhi %6 %9 %56 %403 %66 174 %578 = OpPhi %6 %579 %56 %577 %66 175 %69 = OpSLessThan %27 %477 %36 176 OpLoopMerge %65 %66 None 177 OpBranchConditional %69 %64 %65 178 %64 = OpLabel 179 OpBranch %71 180 %71 = OpLabel 181 %479 = OpPhi %6 %9 %64 %401 %74 182 %577 = OpPhi %6 %578 %64 %576 %74 183 %77 = OpSLessThan %27 %479 %36 184 OpLoopMerge %73 %74 None 185 OpBranchConditional %77 %72 %73 186 %72 = OpLabel 187 OpBranch %79 188 %79 = OpLabel 189 %481 = OpPhi %6 %9 %72 %399 %82 190 %576 = OpPhi %6 %577 %72 %575 %82 191 %85 = OpSLessThan %27 %481 %36 192 OpLoopMerge %81 %82 None 193 OpBranchConditional %85 %80 %81 194 %80 = OpLabel 195 OpBranch %87 196 %87 = OpLabel 197 %483 = OpPhi %6 %9 %80 %397 %90 198 %575 = OpPhi %6 %576 %80 %574 %90 199 %93 = OpSLessThan %27 %483 %36 200 OpLoopMerge %89 %90 None 201 OpBranchConditional %93 %88 %89 202 %88 = OpLabel 203 OpBranch %95 204 %95 = OpLabel 205 %485 = OpPhi %6 %9 %88 %395 %98 206 %574 = OpPhi %6 %575 %88 %573 %98 207 %101 = OpSLessThan %27 %485 %36 208 OpLoopMerge %97 %98 None 209 OpBranchConditional %101 %96 %97 210 %96 = OpLabel 211 OpBranch %103 212 %103 = OpLabel 213 %487 = OpPhi %6 %9 %96 %393 %106 214 %573 = OpPhi %6 %574 %96 %572 %106 215 %109 = OpSLessThan %27 %487 %36 216 OpLoopMerge %105 %106 None 217 OpBranchConditional %109 %104 %105 218 %104 = OpLabel 219 OpBranch %111 220 %111 = OpLabel 221 %489 = OpPhi %6 %9 %104 %391 %114 222 %572 = OpPhi %6 %573 %104 %571 %114 223 %117 = OpSLessThan %27 %489 %36 224 OpLoopMerge %113 %114 None 225 OpBranchConditional %117 %112 %113 226 %112 = OpLabel 227 OpBranch %119 228 %119 = OpLabel 229 %491 = OpPhi %6 %9 %112 %389 %122 230 %571 = OpPhi %6 %572 %112 %570 %122 231 %125 = OpSLessThan %27 %491 %36 232 OpLoopMerge %121 %122 None 233 OpBranchConditional %125 %120 %121 234 %120 = OpLabel 235 OpBranch %127 236 %127 = OpLabel 237 %493 = OpPhi %6 %9 %120 %387 %130 238 %570 = OpPhi %6 %571 %120 %569 %130 239 %133 = OpSLessThan %27 %493 %36 240 OpLoopMerge %129 %130 None 241 OpBranchConditional %133 %128 %129 242 %128 = OpLabel 243 OpBranch %135 244 %135 = OpLabel 245 %495 = OpPhi %6 %9 %128 %385 %138 246 %569 = OpPhi %6 %570 %128 %568 %138 247 %141 = OpSLessThan %27 %495 %36 248 OpLoopMerge %137 %138 None 249 OpBranchConditional %141 %136 %137 250 %136 = OpLabel 251 OpBranch %143 252 %143 = OpLabel 253 %497 = OpPhi %6 %9 %136 %383 %146 254 %568 = OpPhi %6 %569 %136 %567 %146 255 %149 = OpSLessThan %27 %497 %36 256 OpLoopMerge %145 %146 None 257 OpBranchConditional %149 %144 %145 258 %144 = OpLabel 259 OpBranch %151 260 %151 = OpLabel 261 %499 = OpPhi %6 %9 %144 %381 %154 262 %567 = OpPhi %6 %568 %144 %566 %154 263 %157 = OpSLessThan %27 %499 %36 264 OpLoopMerge %153 %154 None 265 OpBranchConditional %157 %152 %153 266 %152 = OpLabel 267 OpBranch %159 268 %159 = OpLabel 269 %501 = OpPhi %6 %9 %152 %379 %162 270 %566 = OpPhi %6 %567 %152 %565 %162 271 %165 = OpSLessThan %27 %501 %36 272 OpLoopMerge %161 %162 None 273 OpBranchConditional %165 %160 %161 274 %160 = OpLabel 275 OpBranch %167 276 %167 = OpLabel 277 %503 = OpPhi %6 %9 %160 %377 %170 278 %565 = OpPhi %6 %566 %160 %564 %170 279 %173 = OpSLessThan %27 %503 %36 280 OpLoopMerge %169 %170 None 281 OpBranchConditional %173 %168 %169 282 %168 = OpLabel 283 OpBranch %175 284 %175 = OpLabel 285 %505 = OpPhi %6 %9 %168 %375 %178 286 %564 = OpPhi %6 %565 %168 %563 %178 287 %181 = OpSLessThan %27 %505 %36 288 OpLoopMerge %177 %178 None 289 OpBranchConditional %181 %176 %177 290 %176 = OpLabel 291 OpBranch %183 292 %183 = OpLabel 293 %507 = OpPhi %6 %9 %176 %373 %186 294 %563 = OpPhi %6 %564 %176 %562 %186 295 %189 = OpSLessThan %27 %507 %36 296 OpLoopMerge %185 %186 None 297 OpBranchConditional %189 %184 %185 298 %184 = OpLabel 299 OpBranch %191 300 %191 = OpLabel 301 %509 = OpPhi %6 %9 %184 %371 %194 302 %562 = OpPhi %6 %563 %184 %561 %194 303 %197 = OpSLessThan %27 %509 %36 304 OpLoopMerge %193 %194 None 305 OpBranchConditional %197 %192 %193 306 %192 = OpLabel 307 OpBranch %199 308 %199 = OpLabel 309 %511 = OpPhi %6 %9 %192 %369 %202 310 %561 = OpPhi %6 %562 %192 %560 %202 311 %205 = OpSLessThan %27 %511 %36 312 OpLoopMerge %201 %202 None 313 OpBranchConditional %205 %200 %201 314 %200 = OpLabel 315 OpBranch %207 316 %207 = OpLabel 317 %513 = OpPhi %6 %9 %200 %367 %210 318 %560 = OpPhi %6 %561 %200 %559 %210 319 %213 = OpSLessThan %27 %513 %36 320 OpLoopMerge %209 %210 None 321 OpBranchConditional %213 %208 %209 322 %208 = OpLabel 323 OpBranch %215 324 %215 = OpLabel 325 %515 = OpPhi %6 %9 %208 %365 %218 326 %559 = OpPhi %6 %560 %208 %558 %218 327 %221 = OpSLessThan %27 %515 %36 328 OpLoopMerge %217 %218 None 329 OpBranchConditional %221 %216 %217 330 %216 = OpLabel 331 OpBranch %223 332 %223 = OpLabel 333 %517 = OpPhi %6 %9 %216 %363 %226 334 %558 = OpPhi %6 %559 %216 %557 %226 335 %229 = OpSLessThan %27 %517 %36 336 OpLoopMerge %225 %226 None 337 OpBranchConditional %229 %224 %225 338 %224 = OpLabel 339 OpBranch %231 340 %231 = OpLabel 341 %519 = OpPhi %6 %9 %224 %361 %234 342 %557 = OpPhi %6 %558 %224 %556 %234 343 %237 = OpSLessThan %27 %519 %36 344 OpLoopMerge %233 %234 None 345 OpBranchConditional %237 %232 %233 346 %232 = OpLabel 347 OpBranch %239 348 %239 = OpLabel 349 %521 = OpPhi %6 %9 %232 %359 %242 350 %556 = OpPhi %6 %557 %232 %555 %242 351 %245 = OpSLessThan %27 %521 %36 352 OpLoopMerge %241 %242 None 353 OpBranchConditional %245 %240 %241 354 %240 = OpLabel 355 OpBranch %247 356 %247 = OpLabel 357 %523 = OpPhi %6 %9 %240 %357 %250 358 %555 = OpPhi %6 %556 %240 %554 %250 359 %253 = OpSLessThan %27 %523 %36 360 OpLoopMerge %249 %250 None 361 OpBranchConditional %253 %248 %249 362 %248 = OpLabel 363 OpBranch %255 364 %255 = OpLabel 365 %525 = OpPhi %6 %9 %248 %355 %258 366 %554 = OpPhi %6 %555 %248 %553 %258 367 %261 = OpSLessThan %27 %525 %36 368 OpLoopMerge %257 %258 None 369 OpBranchConditional %261 %256 %257 370 %256 = OpLabel 371 OpBranch %263 372 %263 = OpLabel 373 %527 = OpPhi %6 %9 %256 %353 %266 374 %553 = OpPhi %6 %554 %256 %552 %266 375 %269 = OpSLessThan %27 %527 %36 376 OpLoopMerge %265 %266 None 377 OpBranchConditional %269 %264 %265 378 %264 = OpLabel 379 OpBranch %271 380 %271 = OpLabel 381 %529 = OpPhi %6 %9 %264 %351 %274 382 %552 = OpPhi %6 %553 %264 %551 %274 383 %277 = OpSLessThan %27 %529 %36 384 OpLoopMerge %273 %274 None 385 OpBranchConditional %277 %272 %273 386 %272 = OpLabel 387 OpBranch %279 388 %279 = OpLabel 389 %531 = OpPhi %6 %9 %272 %349 %282 390 %551 = OpPhi %6 %552 %272 %550 %282 391 %285 = OpSLessThan %27 %531 %36 392 OpLoopMerge %281 %282 None 393 OpBranchConditional %285 %280 %281 394 %280 = OpLabel 395 OpBranch %287 396 %287 = OpLabel 397 %533 = OpPhi %6 %9 %280 %347 %290 398 %550 = OpPhi %6 %551 %280 %549 %290 399 %293 = OpSLessThan %27 %533 %36 400 OpLoopMerge %289 %290 None 401 OpBranchConditional %293 %288 %289 402 %288 = OpLabel 403 OpBranch %295 404 %295 = OpLabel 405 %535 = OpPhi %6 %9 %288 %345 %298 406 %549 = OpPhi %6 %550 %288 %548 %298 407 %301 = OpSLessThan %27 %535 %36 408 OpLoopMerge %297 %298 None 409 OpBranchConditional %301 %296 %297 410 %296 = OpLabel 411 OpBranch %303 412 %303 = OpLabel 413 %537 = OpPhi %6 %9 %296 %343 %306 414 %548 = OpPhi %6 %549 %296 %547 %306 415 %309 = OpSLessThan %27 %537 %36 416 OpLoopMerge %305 %306 None 417 OpBranchConditional %309 %304 %305 418 %304 = OpLabel 419 OpBranch %311 420 %311 = OpLabel 421 %539 = OpPhi %6 %9 %304 %341 %314 422 %547 = OpPhi %6 %548 %304 %546 %314 423 %317 = OpSLessThan %27 %539 %36 424 OpLoopMerge %313 %314 None 425 OpBranchConditional %317 %312 %313 426 %312 = OpLabel 427 OpBranch %319 428 %319 = OpLabel 429 %541 = OpPhi %6 %9 %312 %339 %322 430 %546 = OpPhi %6 %547 %312 %545 %322 431 %325 = OpSLessThan %27 %541 %36 432 OpLoopMerge %321 %322 None 433 OpBranchConditional %325 %320 %321 434 %320 = OpLabel 435 OpBranch %327 436 %327 = OpLabel 437 %545 = OpPhi %6 %546 %320 %335 %328 438 %543 = OpPhi %6 %9 %320 %337 %328 439 %333 = OpSLessThan %27 %543 %36 440 OpLoopMerge %329 %328 None 441 OpBranchConditional %333 %328 %329 442 %328 = OpLabel 443 %335 = OpIAdd %6 %545 %36 444 %337 = OpIAdd %6 %543 %36 445 OpBranch %327 446 %329 = OpLabel 447 OpBranch %322 448 %322 = OpLabel 449 %339 = OpIAdd %6 %541 %36 450 OpBranch %319 451 %321 = OpLabel 452 OpBranch %314 453 %314 = OpLabel 454 %341 = OpIAdd %6 %539 %36 455 OpBranch %311 456 %313 = OpLabel 457 OpBranch %306 458 %306 = OpLabel 459 %343 = OpIAdd %6 %537 %36 460 OpBranch %303 461 %305 = OpLabel 462 OpBranch %298 463 %298 = OpLabel 464 %345 = OpIAdd %6 %535 %36 465 OpBranch %295 466 %297 = OpLabel 467 OpBranch %290 468 %290 = OpLabel 469 %347 = OpIAdd %6 %533 %36 470 OpBranch %287 471 %289 = OpLabel 472 OpBranch %282 473 %282 = OpLabel 474 %349 = OpIAdd %6 %531 %36 475 OpBranch %279 476 %281 = OpLabel 477 OpBranch %274 478 %274 = OpLabel 479 %351 = OpIAdd %6 %529 %36 480 OpBranch %271 481 %273 = OpLabel 482 OpBranch %266 483 %266 = OpLabel 484 %353 = OpIAdd %6 %527 %36 485 OpBranch %263 486 %265 = OpLabel 487 OpBranch %258 488 %258 = OpLabel 489 %355 = OpIAdd %6 %525 %36 490 OpBranch %255 491 %257 = OpLabel 492 OpBranch %250 493 %250 = OpLabel 494 %357 = OpIAdd %6 %523 %36 495 OpBranch %247 496 %249 = OpLabel 497 OpBranch %242 498 %242 = OpLabel 499 %359 = OpIAdd %6 %521 %36 500 OpBranch %239 501 %241 = OpLabel 502 OpBranch %234 503 %234 = OpLabel 504 %361 = OpIAdd %6 %519 %36 505 OpBranch %231 506 %233 = OpLabel 507 OpBranch %226 508 %226 = OpLabel 509 %363 = OpIAdd %6 %517 %36 510 OpBranch %223 511 %225 = OpLabel 512 OpBranch %218 513 %218 = OpLabel 514 %365 = OpIAdd %6 %515 %36 515 OpBranch %215 516 %217 = OpLabel 517 OpBranch %210 518 %210 = OpLabel 519 %367 = OpIAdd %6 %513 %36 520 OpBranch %207 521 %209 = OpLabel 522 OpBranch %202 523 %202 = OpLabel 524 %369 = OpIAdd %6 %511 %36 525 OpBranch %199 526 %201 = OpLabel 527 OpBranch %194 528 %194 = OpLabel 529 %371 = OpIAdd %6 %509 %36 530 OpBranch %191 531 %193 = OpLabel 532 OpBranch %186 533 %186 = OpLabel 534 %373 = OpIAdd %6 %507 %36 535 OpBranch %183 536 %185 = OpLabel 537 OpBranch %178 538 %178 = OpLabel 539 %375 = OpIAdd %6 %505 %36 540 OpBranch %175 541 %177 = OpLabel 542 OpBranch %170 543 %170 = OpLabel 544 %377 = OpIAdd %6 %503 %36 545 OpBranch %167 546 %169 = OpLabel 547 OpBranch %162 548 %162 = OpLabel 549 %379 = OpIAdd %6 %501 %36 550 OpBranch %159 551 %161 = OpLabel 552 OpBranch %154 553 %154 = OpLabel 554 %381 = OpIAdd %6 %499 %36 555 OpBranch %151 556 %153 = OpLabel 557 OpBranch %146 558 %146 = OpLabel 559 %383 = OpIAdd %6 %497 %36 560 OpBranch %143 561 %145 = OpLabel 562 OpBranch %138 563 %138 = OpLabel 564 %385 = OpIAdd %6 %495 %36 565 OpBranch %135 566 %137 = OpLabel 567 OpBranch %130 568 %130 = OpLabel 569 %387 = OpIAdd %6 %493 %36 570 OpBranch %127 571 %129 = OpLabel 572 OpBranch %122 573 %122 = OpLabel 574 %389 = OpIAdd %6 %491 %36 575 OpBranch %119 576 %121 = OpLabel 577 OpBranch %114 578 %114 = OpLabel 579 %391 = OpIAdd %6 %489 %36 580 OpBranch %111 581 %113 = OpLabel 582 OpBranch %106 583 %106 = OpLabel 584 %393 = OpIAdd %6 %487 %36 585 OpBranch %103 586 %105 = OpLabel 587 OpBranch %98 588 %98 = OpLabel 589 %395 = OpIAdd %6 %485 %36 590 OpBranch %95 591 %97 = OpLabel 592 OpBranch %90 593 %90 = OpLabel 594 %397 = OpIAdd %6 %483 %36 595 OpBranch %87 596 %89 = OpLabel 597 OpBranch %82 598 %82 = OpLabel 599 %399 = OpIAdd %6 %481 %36 600 OpBranch %79 601 %81 = OpLabel 602 OpBranch %74 603 %74 = OpLabel 604 %401 = OpIAdd %6 %479 %36 605 OpBranch %71 606 %73 = OpLabel 607 OpBranch %66 608 %66 = OpLabel 609 %403 = OpIAdd %6 %477 %36 610 OpBranch %63 611 %65 = OpLabel 612 OpBranch %58 613 %58 = OpLabel 614 %405 = OpIAdd %6 %475 %36 615 OpBranch %55 616 %57 = OpLabel 617 OpBranch %50 618 %50 = OpLabel 619 %407 = OpIAdd %6 %473 %36 620 OpBranch %47 621 %49 = OpLabel 622 OpBranch %42 623 %42 = OpLabel 624 %409 = OpIAdd %6 %471 %36 625 OpBranch %39 626 %41 = OpLabel 627 OpBranch %33 628 %33 = OpLabel 629 %411 = OpIAdd %6 %468 %36 630 OpBranch %30 631 %32 = OpLabel 632 %414 = OpExtInst %6 %1 SClamp %470 %9 %413 633 OpStore %419 %416 634 %421 = OpAccessChain %420 %419 %414 635 %422 = OpLoad %10 %421 636 %423 = OpAccessChain %420 %15 %414 637 OpStore %423 %422 638 %425 = OpIAdd %6 %470 %36 639 OpBranch %23 640 %23 = OpLabel 641 OpBranch %20 642 %22 = OpLabel 643 %434 = OpAccessChain %433 %431 %432 644 %435 = OpLoad %10 %434 645 %436 = OpConvertFToS %6 %435 646 %437 = OpExtInst %6 %1 SClamp %436 %9 %413 647 %438 = OpAccessChain %420 %15 %437 648 %439 = OpLoad %10 %438 649 %441 = OpAccessChain %433 %431 %440 650 %442 = OpLoad %10 %441 651 %443 = OpConvertFToS %6 %442 652 %444 = OpExtInst %6 %1 SClamp %443 %9 %413 653 %445 = OpAccessChain %420 %15 %444 654 %446 = OpLoad %10 %445 655 %450 = OpFOrdEqual %27 %439 %415 656 OpSelectionMerge %452 None 657 OpBranchConditional %450 %451 %452 658 %451 = OpLabel 659 %455 = OpFOrdEqual %27 %446 %415 660 OpBranch %452 661 %452 = OpLabel 662 %456 = OpPhi %27 %450 %22 %455 %451 663 OpSelectionMerge %458 None 664 OpBranchConditional %456 %457 %463 665 %457 = OpLabel 666 OpStore %460 %462 667 OpBranch %458 668 %463 = OpLabel 669 OpStore %460 %464 670 OpBranch %458 671 %458 = OpLabel 672 OpReturn 673 OpFunctionEnd 674END 675 676 677BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 678 679PIPELINE graphics variant_pipeline 680 ATTACH variant_vertex_shader 681 ATTACH variant_fragment_shader 682 FRAMEBUFFER_SIZE 256 256 683 BIND BUFFER variant_framebuffer AS color LOCATION 0 684END 685CLEAR_COLOR variant_pipeline 0 0 0 255 686 687CLEAR variant_pipeline 688RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 689 690EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 691