Generate separate stores for partially swizzled memory stores

Full vector and fully specified vector swizzle stores are not affected by this change, only partial swizzles ie swizzles with fewer components than the vector being stored to.

Previously the vector being stored to loaded and any components not specified in the swizzle were used to create a full store to the vector.

While this change generates more SPIR-V instructions, it is necessary for correctness.

Fixes #2518.
This commit is contained in:
Jeremy Hayes 2021-07-16 15:07:16 -06:00
parent 9158061398
commit 6d5b40f051
50 changed files with 31343 additions and 26594 deletions

View file

@ -1,12 +1,12 @@
spv.Operations.frag
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 583
// Id's are bound by 591
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 11 22 220 296 314 539 580
EntryPoint Fragment 4 "main" 11 22 220 296 314 547 588
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Name 4 "main"
@ -26,13 +26,13 @@ spv.Operations.frag
Name 324 "lsb"
Name 325 "swizzleTemp"
Name 326 "ResType"
Name 359 "b"
Name 396 "ub42"
Name 539 "FragColor"
Name 557 "m1"
Name 564 "m2"
Name 580 "uiv4"
Name 582 "ub"
Name 367 "b"
Name 404 "ub42"
Name 547 "FragColor"
Name 565 "m1"
Name 572 "m2"
Name 588 "uiv4"
Name 590 "ub"
Decorate 11(uv4) Location 1
Decorate 22(ui) Flat
Decorate 22(ui) Location 3
@ -41,9 +41,9 @@ spv.Operations.frag
Decorate 296(uui) Location 5
Decorate 314(uuv4) Flat
Decorate 314(uuv4) Location 4
Decorate 539(FragColor) Location 0
Decorate 580(uiv4) Flat
Decorate 580(uiv4) Location 0
Decorate 547(FragColor) Location 0
Decorate 588(uiv4) Flat
Decorate 588(uiv4) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -74,34 +74,34 @@ spv.Operations.frag
320: TypePointer Function 312(ivec4)
322: TypePointer Function 315(ivec3)
326(ResType): TypeStruct 315(ivec3) 315(ivec3)
338: 141(int) Constant 1
342: 141(int) Constant 2
358: TypePointer Function 186(bool)
396(ub42): 188(ptr) Variable Private
452: 18(int) Constant 2
459: 18(int) Constant 1
489: TypeVector 6(float) 3
508: 6(float) Constant 1073741824
515: 6(float) Constant 1065353216
520: 18(int) Constant 66
526: 18(int) Constant 17
538: TypePointer Output 7(fvec4)
539(FragColor): 538(ptr) Variable Output
555: TypeMatrix 7(fvec4) 4
556: TypePointer Function 555
558: 6(float) Constant 0
559: 7(fvec4) ConstantComposite 515 558 558 558
560: 7(fvec4) ConstantComposite 558 515 558 558
561: 7(fvec4) ConstantComposite 558 558 515 558
562: 7(fvec4) ConstantComposite 558 558 558 515
563: 555 ConstantComposite 559 560 561 562
565: 7(fvec4) ConstantComposite 558 558 558 558
566: 555 ConstantComposite 565 565 565 565
578: TypeVector 18(int) 4
579: TypePointer Input 578(ivec4)
580(uiv4): 579(ptr) Variable Input
581: TypePointer Private 186(bool)
582(ub): 581(ptr) Variable Private
333: 141(int) Constant 1
336: 141(int) Constant 2
366: TypePointer Function 186(bool)
404(ub42): 188(ptr) Variable Private
460: 18(int) Constant 2
467: 18(int) Constant 1
497: TypeVector 6(float) 3
516: 6(float) Constant 1073741824
523: 6(float) Constant 1065353216
528: 18(int) Constant 66
534: 18(int) Constant 17
546: TypePointer Output 7(fvec4)
547(FragColor): 546(ptr) Variable Output
563: TypeMatrix 7(fvec4) 4
564: TypePointer Function 563
566: 6(float) Constant 0
567: 7(fvec4) ConstantComposite 523 566 566 566
568: 7(fvec4) ConstantComposite 566 523 566 566
569: 7(fvec4) ConstantComposite 566 566 523 566
570: 7(fvec4) ConstantComposite 566 566 566 523
571: 563 ConstantComposite 567 568 569 570
573: 7(fvec4) ConstantComposite 566 566 566 566
574: 563 ConstantComposite 573 573 573 573
586: TypeVector 18(int) 4
587: TypePointer Input 586(ivec4)
588(uiv4): 587(ptr) Variable Input
589: TypePointer Private 186(bool)
590(ub): 589(ptr) Variable Private
4(main): 2 Function None 3
5: Label
9(v): 8(ptr) Variable Function
@ -113,11 +113,11 @@ spv.Operations.frag
323(swizzleTemp): 322(ptr) Variable Function
324(lsb): 320(ptr) Variable Function
325(swizzleTemp): 322(ptr) Variable Function
359(b): 358(ptr) Variable Function
541: 8(ptr) Variable Function
557(m1): 556(ptr) Variable Function
564(m2): 556(ptr) Variable Function
568: 556(ptr) Variable Function
367(b): 366(ptr) Variable Function
549: 8(ptr) Variable Function
565(m1): 564(ptr) Variable Function
572(m2): 564(ptr) Variable Function
576: 564(ptr) Variable Function
12: 7(fvec4) Load 11(uv4)
13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
Store 9(v) 13
@ -469,306 +469,318 @@ spv.Operations.frag
329: 315(ivec3) CompositeExtract 327 1
Store 323(swizzleTemp) 329
330: 315(ivec3) Load 323(swizzleTemp)
331: 312(ivec4) Load 321(msb)
332: 312(ivec4) VectorShuffle 331 330 4 5 6 3
Store 321(msb) 332
333: 315(ivec3) Load 325(swizzleTemp)
334: 312(ivec4) Load 324(lsb)
335: 312(ivec4) VectorShuffle 334 333 4 5 6 3
Store 324(lsb) 335
336: 292(ptr) AccessChain 321(msb) 142
337: 141(int) Load 336
339: 292(ptr) AccessChain 321(msb) 338
340: 141(int) Load 339
341: 141(int) IAdd 337 340
343: 292(ptr) AccessChain 321(msb) 342
344: 141(int) Load 343
345: 141(int) IAdd 341 344
346: 141(int) Load 293(u)
347: 141(int) IAdd 346 345
Store 293(u) 347
348: 292(ptr) AccessChain 324(lsb) 142
331: 292(ptr) AccessChain 321(msb) 142
332: 141(int) CompositeExtract 330 0
Store 331 332
334: 292(ptr) AccessChain 321(msb) 333
335: 141(int) CompositeExtract 330 1
Store 334 335
337: 292(ptr) AccessChain 321(msb) 336
338: 141(int) CompositeExtract 330 2
Store 337 338
339: 315(ivec3) Load 325(swizzleTemp)
340: 292(ptr) AccessChain 324(lsb) 142
341: 141(int) CompositeExtract 339 0
Store 340 341
342: 292(ptr) AccessChain 324(lsb) 333
343: 141(int) CompositeExtract 339 1
Store 342 343
344: 292(ptr) AccessChain 324(lsb) 336
345: 141(int) CompositeExtract 339 2
Store 344 345
346: 292(ptr) AccessChain 321(msb) 142
347: 141(int) Load 346
348: 292(ptr) AccessChain 321(msb) 333
349: 141(int) Load 348
350: 292(ptr) AccessChain 324(lsb) 338
351: 141(int) Load 350
352: 141(int) IAdd 349 351
353: 292(ptr) AccessChain 324(lsb) 342
354: 141(int) Load 353
355: 141(int) IAdd 352 354
356: 141(int) Load 293(u)
357: 141(int) IAdd 356 355
Store 293(u) 357
360: 6(float) Load 220(uf)
361: 186(bool) IsNan 360
Store 359(b) 361
362: 6(float) Load 196(f)
363: 186(bool) IsInf 362
Store 359(b) 363
364: 7(fvec4) Load 9(v)
365: 7(fvec4) Load 11(uv4)
366: 187(bvec4) FOrdLessThan 364 365
367: 186(bool) Any 366
Store 359(b) 367
368: 186(bool) Load 359(b)
SelectionMerge 370 None
BranchConditional 368 369 370
369: Label
371: 7(fvec4) Load 9(v)
372: 7(fvec4) Load 11(uv4)
373: 187(bvec4) FOrdLessThanEqual 371 372
374: 186(bool) Any 373
Branch 370
370: Label
375: 186(bool) Phi 368 5 374 369
Store 359(b) 375
376: 186(bool) Load 359(b)
350: 141(int) IAdd 347 349
351: 292(ptr) AccessChain 321(msb) 336
352: 141(int) Load 351
353: 141(int) IAdd 350 352
354: 141(int) Load 293(u)
355: 141(int) IAdd 354 353
Store 293(u) 355
356: 292(ptr) AccessChain 324(lsb) 142
357: 141(int) Load 356
358: 292(ptr) AccessChain 324(lsb) 333
359: 141(int) Load 358
360: 141(int) IAdd 357 359
361: 292(ptr) AccessChain 324(lsb) 336
362: 141(int) Load 361
363: 141(int) IAdd 360 362
364: 141(int) Load 293(u)
365: 141(int) IAdd 364 363
Store 293(u) 365
368: 6(float) Load 220(uf)
369: 186(bool) IsNan 368
Store 367(b) 369
370: 6(float) Load 196(f)
371: 186(bool) IsInf 370
Store 367(b) 371
372: 7(fvec4) Load 9(v)
373: 7(fvec4) Load 11(uv4)
374: 187(bvec4) FOrdLessThan 372 373
375: 186(bool) Any 374
Store 367(b) 375
376: 186(bool) Load 367(b)
SelectionMerge 378 None
BranchConditional 376 377 378
377: Label
379: 7(fvec4) Load 9(v)
380: 7(fvec4) Load 11(uv4)
381: 187(bvec4) FOrdGreaterThan 379 380
381: 187(bvec4) FOrdLessThanEqual 379 380
382: 186(bool) Any 381
Branch 378
378: Label
383: 186(bool) Phi 376 370 382 377
Store 359(b) 383
384: 186(bool) Load 359(b)
383: 186(bool) Phi 376 5 382 377
Store 367(b) 383
384: 186(bool) Load 367(b)
SelectionMerge 386 None
BranchConditional 384 385 386
385: Label
387: 7(fvec4) Load 9(v)
388: 7(fvec4) Load 11(uv4)
389: 187(bvec4) FOrdGreaterThanEqual 387 388
389: 187(bvec4) FOrdGreaterThan 387 388
390: 186(bool) Any 389
Branch 386
386: Label
391: 186(bool) Phi 384 378 390 385
Store 359(b) 391
392: 186(bool) Load 359(b)
Store 367(b) 391
392: 186(bool) Load 367(b)
SelectionMerge 394 None
BranchConditional 392 393 394
393: Label
395: 187(bvec4) Load 189(ub41)
397: 187(bvec4) Load 396(ub42)
398: 187(bvec4) LogicalEqual 395 397
399: 186(bool) Any 398
395: 7(fvec4) Load 9(v)
396: 7(fvec4) Load 11(uv4)
397: 187(bvec4) FOrdGreaterThanEqual 395 396
398: 186(bool) Any 397
Branch 394
394: Label
400: 186(bool) Phi 392 386 399 393
Store 359(b) 400
401: 186(bool) Load 359(b)
SelectionMerge 403 None
BranchConditional 401 402 403
402: Label
404: 187(bvec4) Load 189(ub41)
405: 187(bvec4) Load 396(ub42)
406: 187(bvec4) LogicalNotEqual 404 405
399: 186(bool) Phi 392 386 398 393
Store 367(b) 399
400: 186(bool) Load 367(b)
SelectionMerge 402 None
BranchConditional 400 401 402
401: Label
403: 187(bvec4) Load 189(ub41)
405: 187(bvec4) Load 404(ub42)
406: 187(bvec4) LogicalEqual 403 405
407: 186(bool) Any 406
Branch 403
403: Label
408: 186(bool) Phi 401 394 407 402
Store 359(b) 408
409: 186(bool) Load 359(b)
410: 187(bvec4) Load 189(ub41)
411: 186(bool) Any 410
412: 186(bool) LogicalAnd 409 411
Store 359(b) 412
413: 186(bool) Load 359(b)
414: 187(bvec4) Load 189(ub41)
415: 186(bool) All 414
416: 186(bool) LogicalAnd 413 415
Store 359(b) 416
417: 186(bool) Load 359(b)
SelectionMerge 419 None
BranchConditional 417 418 419
418: Label
420: 187(bvec4) Load 189(ub41)
421: 187(bvec4) LogicalNot 420
422: 186(bool) Any 421
Branch 419
419: Label
423: 186(bool) Phi 417 403 422 418
Store 359(b) 423
424: 18(int) Load 20(i)
425: 18(int) Load 22(ui)
426: 18(int) IAdd 424 425
427: 18(int) Load 20(i)
428: 18(int) IMul 426 427
429: 18(int) Load 22(ui)
430: 18(int) ISub 428 429
431: 18(int) Load 20(i)
432: 18(int) SDiv 430 431
Store 20(i) 432
433: 18(int) Load 20(i)
434: 18(int) Load 22(ui)
435: 18(int) SMod 433 434
Store 20(i) 435
436: 18(int) Load 20(i)
Branch 402
402: Label
408: 186(bool) Phi 400 394 407 401
Store 367(b) 408
409: 186(bool) Load 367(b)
SelectionMerge 411 None
BranchConditional 409 410 411
410: Label
412: 187(bvec4) Load 189(ub41)
413: 187(bvec4) Load 404(ub42)
414: 187(bvec4) LogicalNotEqual 412 413
415: 186(bool) Any 414
Branch 411
411: Label
416: 186(bool) Phi 409 402 415 410
Store 367(b) 416
417: 186(bool) Load 367(b)
418: 187(bvec4) Load 189(ub41)
419: 186(bool) Any 418
420: 186(bool) LogicalAnd 417 419
Store 367(b) 420
421: 186(bool) Load 367(b)
422: 187(bvec4) Load 189(ub41)
423: 186(bool) All 422
424: 186(bool) LogicalAnd 421 423
Store 367(b) 424
425: 186(bool) Load 367(b)
SelectionMerge 427 None
BranchConditional 425 426 427
426: Label
428: 187(bvec4) Load 189(ub41)
429: 187(bvec4) LogicalNot 428
430: 186(bool) Any 429
Branch 427
427: Label
431: 186(bool) Phi 425 411 430 426
Store 367(b) 431
432: 18(int) Load 20(i)
433: 18(int) Load 22(ui)
434: 18(int) IAdd 432 433
435: 18(int) Load 20(i)
436: 18(int) IMul 434 435
437: 18(int) Load 22(ui)
438: 186(bool) IEqual 436 437
439: 186(bool) LogicalNot 438
SelectionMerge 441 None
BranchConditional 439 440 441
440: Label
442: 18(int) Load 20(i)
443: 18(int) Load 22(ui)
444: 186(bool) INotEqual 442 443
SelectionMerge 446 None
BranchConditional 444 445 446
445: Label
447: 18(int) Load 20(i)
448: 18(int) Load 22(ui)
449: 186(bool) IEqual 447 448
Branch 446
446: Label
450: 186(bool) Phi 444 440 449 445
451: 18(int) Load 20(i)
453: 186(bool) INotEqual 451 452
454: 186(bool) LogicalNotEqual 450 453
Branch 441
441: Label
455: 186(bool) Phi 438 419 454 446
SelectionMerge 457 None
BranchConditional 455 456 457
456: Label
458: 18(int) Load 20(i)
460: 18(int) IAdd 458 459
Store 20(i) 460
Branch 457
457: Label
461: 6(float) Load 220(uf)
462: 6(float) Load 220(uf)
463: 6(float) FAdd 461 462
464: 6(float) Load 220(uf)
465: 6(float) FMul 463 464
466: 6(float) Load 220(uf)
467: 6(float) FSub 465 466
468: 6(float) Load 220(uf)
469: 6(float) FDiv 467 468
Store 196(f) 469
470: 7(fvec4) Load 9(v)
471: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 470
472: 6(float) Load 196(f)
473: 6(float) FAdd 472 471
Store 196(f) 473
474: 7(fvec4) Load 9(v)
475: 7(fvec4) Load 9(v)
476: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 474 475
477: 6(float) Load 196(f)
478: 6(float) FAdd 477 476
Store 196(f) 478
479: 7(fvec4) Load 9(v)
480: 7(fvec4) Load 9(v)
481: 6(float) Dot 479 480
482: 6(float) Load 196(f)
483: 6(float) FAdd 482 481
Store 196(f) 483
484: 6(float) Load 196(f)
485: 6(float) Load 220(uf)
486: 6(float) FMul 484 485
487: 6(float) Load 196(f)
488: 6(float) FAdd 487 486
Store 196(f) 488
490: 7(fvec4) Load 9(v)
491: 489(fvec3) VectorShuffle 490 490 0 1 2
492: 7(fvec4) Load 9(v)
493: 489(fvec3) VectorShuffle 492 492 0 1 2
494: 489(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 491 493
495: 6(float) CompositeExtract 494 0
496: 6(float) Load 196(f)
497: 6(float) FAdd 496 495
Store 196(f) 497
498: 6(float) Load 196(f)
499: 6(float) Load 220(uf)
500: 186(bool) FOrdEqual 498 499
501: 186(bool) LogicalNot 500
SelectionMerge 503 None
BranchConditional 501 502 503
502: Label
504: 6(float) Load 196(f)
505: 6(float) Load 220(uf)
506: 186(bool) FUnordNotEqual 504 505
507: 6(float) Load 196(f)
509: 186(bool) FUnordNotEqual 507 508
510: 186(bool) LogicalAnd 506 509
Branch 503
503: Label
511: 186(bool) Phi 500 457 510 502
SelectionMerge 513 None
BranchConditional 511 512 513
512: Label
514: 6(float) Load 196(f)
516: 6(float) FAdd 514 515
Store 196(f) 516
Branch 513
513: Label
517: 18(int) Load 22(ui)
518: 18(int) Load 20(i)
519: 18(int) BitwiseAnd 518 517
Store 20(i) 519
521: 18(int) Load 20(i)
522: 18(int) BitwiseOr 521 520
Store 20(i) 522
523: 18(int) Load 22(ui)
524: 18(int) Load 20(i)
525: 18(int) BitwiseXor 524 523
Store 20(i) 525
527: 18(int) Load 20(i)
528: 18(int) SMod 527 526
Store 20(i) 528
438: 18(int) ISub 436 437
439: 18(int) Load 20(i)
440: 18(int) SDiv 438 439
Store 20(i) 440
441: 18(int) Load 20(i)
442: 18(int) Load 22(ui)
443: 18(int) SMod 441 442
Store 20(i) 443
444: 18(int) Load 20(i)
445: 18(int) Load 22(ui)
446: 186(bool) IEqual 444 445
447: 186(bool) LogicalNot 446
SelectionMerge 449 None
BranchConditional 447 448 449
448: Label
450: 18(int) Load 20(i)
451: 18(int) Load 22(ui)
452: 186(bool) INotEqual 450 451
SelectionMerge 454 None
BranchConditional 452 453 454
453: Label
455: 18(int) Load 20(i)
456: 18(int) Load 22(ui)
457: 186(bool) IEqual 455 456
Branch 454
454: Label
458: 186(bool) Phi 452 448 457 453
459: 18(int) Load 20(i)
461: 186(bool) INotEqual 459 460
462: 186(bool) LogicalNotEqual 458 461
Branch 449
449: Label
463: 186(bool) Phi 446 427 462 454
SelectionMerge 465 None
BranchConditional 463 464 465
464: Label
466: 18(int) Load 20(i)
468: 18(int) IAdd 466 467
Store 20(i) 468
Branch 465
465: Label
469: 6(float) Load 220(uf)
470: 6(float) Load 220(uf)
471: 6(float) FAdd 469 470
472: 6(float) Load 220(uf)
473: 6(float) FMul 471 472
474: 6(float) Load 220(uf)
475: 6(float) FSub 473 474
476: 6(float) Load 220(uf)
477: 6(float) FDiv 475 476
Store 196(f) 477
478: 7(fvec4) Load 9(v)
479: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 478
480: 6(float) Load 196(f)
481: 6(float) FAdd 480 479
Store 196(f) 481
482: 7(fvec4) Load 9(v)
483: 7(fvec4) Load 9(v)
484: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 482 483
485: 6(float) Load 196(f)
486: 6(float) FAdd 485 484
Store 196(f) 486
487: 7(fvec4) Load 9(v)
488: 7(fvec4) Load 9(v)
489: 6(float) Dot 487 488
490: 6(float) Load 196(f)
491: 6(float) FAdd 490 489
Store 196(f) 491
492: 6(float) Load 196(f)
493: 6(float) Load 220(uf)
494: 6(float) FMul 492 493
495: 6(float) Load 196(f)
496: 6(float) FAdd 495 494
Store 196(f) 496
498: 7(fvec4) Load 9(v)
499: 497(fvec3) VectorShuffle 498 498 0 1 2
500: 7(fvec4) Load 9(v)
501: 497(fvec3) VectorShuffle 500 500 0 1 2
502: 497(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 499 501
503: 6(float) CompositeExtract 502 0
504: 6(float) Load 196(f)
505: 6(float) FAdd 504 503
Store 196(f) 505
506: 6(float) Load 196(f)
507: 6(float) Load 220(uf)
508: 186(bool) FOrdEqual 506 507
509: 186(bool) LogicalNot 508
SelectionMerge 511 None
BranchConditional 509 510 511
510: Label
512: 6(float) Load 196(f)
513: 6(float) Load 220(uf)
514: 186(bool) FUnordNotEqual 512 513
515: 6(float) Load 196(f)
517: 186(bool) FUnordNotEqual 515 516
518: 186(bool) LogicalAnd 514 517
Branch 511
511: Label
519: 186(bool) Phi 508 465 518 510
SelectionMerge 521 None
BranchConditional 519 520 521
520: Label
522: 6(float) Load 196(f)
524: 6(float) FAdd 522 523
Store 196(f) 524
Branch 521
521: Label
525: 18(int) Load 22(ui)
526: 18(int) Load 20(i)
527: 18(int) BitwiseAnd 526 525
Store 20(i) 527
529: 18(int) Load 20(i)
530: 18(int) ShiftRightArithmetic 529 452
530: 18(int) BitwiseOr 529 528
Store 20(i) 530
531: 18(int) Load 22(ui)
532: 18(int) Load 20(i)
533: 18(int) ShiftLeftLogical 532 531
533: 18(int) BitwiseXor 532 531
Store 20(i) 533
534: 18(int) Load 20(i)
535: 18(int) Not 534
Store 20(i) 535
536: 186(bool) Load 359(b)
537: 186(bool) LogicalNot 536
Store 359(b) 537
540: 186(bool) Load 359(b)
SelectionMerge 543 None
BranchConditional 540 542 552
542: Label
544: 18(int) Load 20(i)
545: 6(float) ConvertSToF 544
546: 7(fvec4) CompositeConstruct 545 545 545 545
547: 6(float) Load 196(f)
548: 7(fvec4) CompositeConstruct 547 547 547 547
549: 7(fvec4) FAdd 546 548
550: 7(fvec4) Load 9(v)
551: 7(fvec4) FAdd 549 550
Store 541 551
Branch 543
552: Label
553: 7(fvec4) Load 9(v)
Store 541 553
Branch 543
543: Label
554: 7(fvec4) Load 541
Store 539(FragColor) 554
Store 557(m1) 563
Store 564(m2) 566
567: 186(bool) Load 359(b)
SelectionMerge 570 None
BranchConditional 567 569 572
569: Label
571: 555 Load 557(m1)
Store 568 571
Branch 570
572: Label
573: 555 Load 564(m2)
Store 568 573
Branch 570
570: Label
574: 8(ptr) AccessChain 568 459
575: 7(fvec4) Load 574
576: 7(fvec4) Load 539(FragColor)
577: 7(fvec4) FAdd 576 575
Store 539(FragColor) 577
535: 18(int) Load 20(i)
536: 18(int) SMod 535 534
Store 20(i) 536
537: 18(int) Load 20(i)
538: 18(int) ShiftRightArithmetic 537 460
Store 20(i) 538
539: 18(int) Load 22(ui)
540: 18(int) Load 20(i)
541: 18(int) ShiftLeftLogical 540 539
Store 20(i) 541
542: 18(int) Load 20(i)
543: 18(int) Not 542
Store 20(i) 543
544: 186(bool) Load 367(b)
545: 186(bool) LogicalNot 544
Store 367(b) 545
548: 186(bool) Load 367(b)
SelectionMerge 551 None
BranchConditional 548 550 560
550: Label
552: 18(int) Load 20(i)
553: 6(float) ConvertSToF 552
554: 7(fvec4) CompositeConstruct 553 553 553 553
555: 6(float) Load 196(f)
556: 7(fvec4) CompositeConstruct 555 555 555 555
557: 7(fvec4) FAdd 554 556
558: 7(fvec4) Load 9(v)
559: 7(fvec4) FAdd 557 558
Store 549 559
Branch 551
560: Label
561: 7(fvec4) Load 9(v)
Store 549 561
Branch 551
551: Label
562: 7(fvec4) Load 549
Store 547(FragColor) 562
Store 565(m1) 571
Store 572(m2) 574
575: 186(bool) Load 367(b)
SelectionMerge 578 None
BranchConditional 575 577 580
577: Label
579: 563 Load 565(m1)
Store 576 579
Branch 578
580: Label
581: 563 Load 572(m2)
Store 576 581
Branch 578
578: Label
582: 8(ptr) AccessChain 576 467
583: 7(fvec4) Load 582
584: 7(fvec4) Load 547(FragColor)
585: 7(fvec4) FAdd 584 583
Store 547(FragColor) 585
Return
FunctionEnd