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

@ -2,7 +2,7 @@ spv.float16.frag
Validation failed
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 534
// Id's are bound by 542
Capability Shader
Capability Float16
@ -80,87 +80,87 @@ Validation failed
Name 445 "f16v2"
Name 463 "f16v"
Name 465 "if16v"
Name 514 "S"
MemberName 514(S) 0 "x"
MemberName 514(S) 1 "y"
MemberName 514(S) 2 "z"
Name 516 "B1"
MemberName 516(B1) 0 "a"
MemberName 516(B1) 1 "b"
MemberName 516(B1) 2 "c"
MemberName 516(B1) 3 "d"
MemberName 516(B1) 4 "e"
MemberName 516(B1) 5 "f"
MemberName 516(B1) 6 "g"
MemberName 516(B1) 7 "h"
Name 518 ""
Name 521 "S"
MemberName 521(S) 0 "x"
MemberName 521(S) 1 "y"
MemberName 521(S) 2 "z"
Name 523 "B2"
MemberName 523(B2) 0 "o"
MemberName 523(B2) 1 "p"
MemberName 523(B2) 2 "q"
MemberName 523(B2) 3 "r"
MemberName 523(B2) 4 "s"
MemberName 523(B2) 5 "t"
MemberName 523(B2) 6 "u"
MemberName 523(B2) 7 "v"
Name 525 ""
Name 526 "sf16"
Name 527 "sf"
Name 528 "sd"
Name 529 "f16_to_f"
Name 531 "f16_to_d"
Name 532 "f_to_f16"
Name 533 "d_to_f16"
Name 522 "S"
MemberName 522(S) 0 "x"
MemberName 522(S) 1 "y"
MemberName 522(S) 2 "z"
Name 524 "B1"
MemberName 524(B1) 0 "a"
MemberName 524(B1) 1 "b"
MemberName 524(B1) 2 "c"
MemberName 524(B1) 3 "d"
MemberName 524(B1) 4 "e"
MemberName 524(B1) 5 "f"
MemberName 524(B1) 6 "g"
MemberName 524(B1) 7 "h"
Name 526 ""
Name 529 "S"
MemberName 529(S) 0 "x"
MemberName 529(S) 1 "y"
MemberName 529(S) 2 "z"
Name 531 "B2"
MemberName 531(B2) 0 "o"
MemberName 531(B2) 1 "p"
MemberName 531(B2) 2 "q"
MemberName 531(B2) 3 "r"
MemberName 531(B2) 4 "s"
MemberName 531(B2) 5 "t"
MemberName 531(B2) 6 "u"
MemberName 531(B2) 7 "v"
Name 533 ""
Name 534 "sf16"
Name 535 "sf"
Name 536 "sd"
Name 537 "f16_to_f"
Name 539 "f16_to_d"
Name 540 "f_to_f16"
Name 541 "d_to_f16"
Decorate 465(if16v) Location 0
Decorate 512 ArrayStride 16
Decorate 513 ArrayStride 32
MemberDecorate 514(S) 0 Offset 0
MemberDecorate 514(S) 1 Offset 4
MemberDecorate 514(S) 2 Offset 8
Decorate 515 ArrayStride 16
MemberDecorate 516(B1) 0 Offset 0
MemberDecorate 516(B1) 1 Offset 4
MemberDecorate 516(B1) 2 Offset 8
MemberDecorate 516(B1) 3 Offset 16
MemberDecorate 516(B1) 4 ColMajor
MemberDecorate 516(B1) 4 Offset 48
MemberDecorate 516(B1) 4 MatrixStride 16
MemberDecorate 516(B1) 5 ColMajor
MemberDecorate 516(B1) 5 Offset 80
MemberDecorate 516(B1) 5 MatrixStride 16
MemberDecorate 516(B1) 6 Offset 144
MemberDecorate 516(B1) 7 Offset 160
Decorate 516(B1) Block
Decorate 518 DescriptorSet 0
Decorate 518 Binding 0
Decorate 519 ArrayStride 2
Decorate 520 ArrayStride 12
MemberDecorate 521(S) 0 Offset 0
MemberDecorate 521(S) 1 Offset 4
MemberDecorate 521(S) 2 Offset 8
Decorate 522 ArrayStride 16
MemberDecorate 523(B2) 0 Offset 0
MemberDecorate 523(B2) 1 Offset 4
MemberDecorate 523(B2) 2 Offset 8
MemberDecorate 523(B2) 3 Offset 14
MemberDecorate 523(B2) 4 RowMajor
MemberDecorate 523(B2) 4 Offset 20
MemberDecorate 523(B2) 4 MatrixStride 4
MemberDecorate 523(B2) 5 RowMajor
MemberDecorate 523(B2) 5 Offset 32
MemberDecorate 523(B2) 5 MatrixStride 4
MemberDecorate 523(B2) 6 Offset 56
MemberDecorate 523(B2) 7 Offset 72
Decorate 523(B2) BufferBlock
Decorate 525 DescriptorSet 0
Decorate 525 Binding 0
Decorate 526(sf16) SpecId 100
Decorate 527(sf) SpecId 101
Decorate 528(sd) SpecId 102
Decorate 520 ArrayStride 16
Decorate 521 ArrayStride 32
MemberDecorate 522(S) 0 Offset 0
MemberDecorate 522(S) 1 Offset 4
MemberDecorate 522(S) 2 Offset 8
Decorate 523 ArrayStride 16
MemberDecorate 524(B1) 0 Offset 0
MemberDecorate 524(B1) 1 Offset 4
MemberDecorate 524(B1) 2 Offset 8
MemberDecorate 524(B1) 3 Offset 16
MemberDecorate 524(B1) 4 ColMajor
MemberDecorate 524(B1) 4 Offset 48
MemberDecorate 524(B1) 4 MatrixStride 16
MemberDecorate 524(B1) 5 ColMajor
MemberDecorate 524(B1) 5 Offset 80
MemberDecorate 524(B1) 5 MatrixStride 16
MemberDecorate 524(B1) 6 Offset 144
MemberDecorate 524(B1) 7 Offset 160
Decorate 524(B1) Block
Decorate 526 DescriptorSet 0
Decorate 526 Binding 0
Decorate 527 ArrayStride 2
Decorate 528 ArrayStride 12
MemberDecorate 529(S) 0 Offset 0
MemberDecorate 529(S) 1 Offset 4
MemberDecorate 529(S) 2 Offset 8
Decorate 530 ArrayStride 16
MemberDecorate 531(B2) 0 Offset 0
MemberDecorate 531(B2) 1 Offset 4
MemberDecorate 531(B2) 2 Offset 8
MemberDecorate 531(B2) 3 Offset 14
MemberDecorate 531(B2) 4 RowMajor
MemberDecorate 531(B2) 4 Offset 20
MemberDecorate 531(B2) 4 MatrixStride 4
MemberDecorate 531(B2) 5 RowMajor
MemberDecorate 531(B2) 5 Offset 32
MemberDecorate 531(B2) 5 MatrixStride 4
MemberDecorate 531(B2) 6 Offset 56
MemberDecorate 531(B2) 7 Offset 72
Decorate 531(B2) BufferBlock
Decorate 533 DescriptorSet 0
Decorate 533 Binding 0
Decorate 534(sf16) SpecId 100
Decorate 535(sf) SpecId 101
Decorate 536(sd) SpecId 102
2: TypeVoid
3: TypeFunction 2
28: TypeFloat 16
@ -218,32 +218,32 @@ Validation failed
464: TypePointer Input 151(f16vec3)
465(if16v): 464(ptr) Variable Input
466: TypePointer Input 28(float16_t)
503: 183(int) Constant 1
508:28(float16_t) Constant 14336
509: 29(f16vec2) ConstantComposite 508 508
511: 33(int) Constant 2
512: TypeArray 28(float16_t) 511
513: TypeArray 406 511
514(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3)
515: TypeArray 514(S) 511
516(B1): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 512 406 513 514(S) 515
517: TypePointer Uniform 516(B1)
518: 517(ptr) Variable Uniform
519: TypeArray 28(float16_t) 511
520: TypeArray 406 511
521(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3)
522: TypeArray 521(S) 511
523(B2): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 519 406 520 521(S) 522
524: TypePointer Uniform 523(B2)
525: 524(ptr) Variable Uniform
526(sf16):28(float16_t) SpecConstant 12288
527(sf): 164(float) SpecConstant 1048576000
528(sd):172(float64_t) SpecConstant 0 1071644672
529(f16_to_f): 164(float) SpecConstantOp 115 526(sf16)
530: 164(float) SpecConstantOp 115 526(sf16)
531(f16_to_d):172(float64_t) SpecConstantOp 115 530
532(f_to_f16):28(float16_t) SpecConstantOp 115 527(sf)
533(d_to_f16):28(float16_t) SpecConstantOp 115 528(sd)
509: 183(int) Constant 1
516:28(float16_t) Constant 14336
517: 29(f16vec2) ConstantComposite 516 516
519: 33(int) Constant 2
520: TypeArray 28(float16_t) 519
521: TypeArray 406 519
522(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3)
523: TypeArray 522(S) 519
524(B1): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 520 406 521 522(S) 523
525: TypePointer Uniform 524(B1)
526: 525(ptr) Variable Uniform
527: TypeArray 28(float16_t) 519
528: TypeArray 406 519
529(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3)
530: TypeArray 529(S) 519
531(B2): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 527 406 528 529(S) 530
532: TypePointer Uniform 531(B2)
533: 532(ptr) Variable Uniform
534(sf16):28(float16_t) SpecConstant 12288
535(sf): 164(float) SpecConstant 1048576000
536(sd):172(float64_t) SpecConstant 0 1071644672
537(f16_to_f): 164(float) SpecConstantOp 115 534(sf16)
538: 164(float) SpecConstantOp 115 534(sf16)
539(f16_to_d):172(float64_t) SpecConstantOp 115 538
540(f_to_f16):28(float16_t) SpecConstantOp 115 535(sf)
541(d_to_f16):28(float16_t) SpecConstantOp 115 536(sd)
4(main): 2 Function None 3
5: Label
Return
@ -801,45 +801,57 @@ Validation failed
475:151(f16vec3) Load 465(if16v)
476: 29(f16vec2) VectorShuffle 475 475 0 1
477: 29(f16vec2) DPdxFine 476
478:151(f16vec3) Load 463(f16v)
479:151(f16vec3) VectorShuffle 478 477 3 4 2
Store 463(f16v) 479
480:151(f16vec3) Load 465(if16v)
481: 29(f16vec2) VectorShuffle 480 480 0 1
482: 29(f16vec2) DPdyFine 481
483:151(f16vec3) Load 463(f16v)
484:151(f16vec3) VectorShuffle 483 482 3 4 2
Store 463(f16v) 484
485:151(f16vec3) Load 465(if16v)
486:151(f16vec3) DPdxCoarse 485
Store 463(f16v) 486
487:151(f16vec3) Load 465(if16v)
488:151(f16vec3) DPdxCoarse 487
Store 463(f16v) 488
489: 466(ptr) AccessChain 465(if16v) 34
490:28(float16_t) Load 489
491:28(float16_t) Fwidth 490
492: 35(ptr) AccessChain 463(f16v) 34
Store 492 491
493:151(f16vec3) Load 465(if16v)
494: 29(f16vec2) VectorShuffle 493 493 0 1
495: 29(f16vec2) FwidthFine 494
496:151(f16vec3) Load 463(f16v)
497:151(f16vec3) VectorShuffle 496 495 3 4 2
Store 463(f16v) 497
498:151(f16vec3) Load 465(if16v)
499:151(f16vec3) FwidthCoarse 498
Store 463(f16v) 499
500: 466(ptr) AccessChain 465(if16v) 34
501:28(float16_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 500
502: 35(ptr) AccessChain 463(f16v) 34
Store 502 501
504:151(f16vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 465(if16v) 503
505: 29(f16vec2) VectorShuffle 504 504 0 1
506:151(f16vec3) Load 463(f16v)
507:151(f16vec3) VectorShuffle 506 505 3 4 2
Store 463(f16v) 507
510:151(f16vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 465(if16v) 509
Store 463(f16v) 510
478: 35(ptr) AccessChain 463(f16v) 34
479:28(float16_t) CompositeExtract 477 0
Store 478 479
480: 35(ptr) AccessChain 463(f16v) 90
481:28(float16_t) CompositeExtract 477 1
Store 480 481
482:151(f16vec3) Load 465(if16v)
483: 29(f16vec2) VectorShuffle 482 482 0 1
484: 29(f16vec2) DPdyFine 483
485: 35(ptr) AccessChain 463(f16v) 34
486:28(float16_t) CompositeExtract 484 0
Store 485 486
487: 35(ptr) AccessChain 463(f16v) 90
488:28(float16_t) CompositeExtract 484 1
Store 487 488
489:151(f16vec3) Load 465(if16v)
490:151(f16vec3) DPdxCoarse 489
Store 463(f16v) 490
491:151(f16vec3) Load 465(if16v)
492:151(f16vec3) DPdxCoarse 491
Store 463(f16v) 492
493: 466(ptr) AccessChain 465(if16v) 34
494:28(float16_t) Load 493
495:28(float16_t) Fwidth 494
496: 35(ptr) AccessChain 463(f16v) 34
Store 496 495
497:151(f16vec3) Load 465(if16v)
498: 29(f16vec2) VectorShuffle 497 497 0 1
499: 29(f16vec2) FwidthFine 498
500: 35(ptr) AccessChain 463(f16v) 34
501:28(float16_t) CompositeExtract 499 0
Store 500 501
502: 35(ptr) AccessChain 463(f16v) 90
503:28(float16_t) CompositeExtract 499 1
Store 502 503
504:151(f16vec3) Load 465(if16v)
505:151(f16vec3) FwidthCoarse 504
Store 463(f16v) 505
506: 466(ptr) AccessChain 465(if16v) 34
507:28(float16_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 506
508: 35(ptr) AccessChain 463(f16v) 34
Store 508 507
510:151(f16vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 465(if16v) 509
511: 29(f16vec2) VectorShuffle 510 510 0 1
512: 35(ptr) AccessChain 463(f16v) 34
513:28(float16_t) CompositeExtract 511 0
Store 512 513
514: 35(ptr) AccessChain 463(f16v) 90
515:28(float16_t) CompositeExtract 511 1
Store 514 515
518:151(f16vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 465(if16v) 517
Store 463(f16v) 518
Return
FunctionEnd