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,7 +1,7 @@
spv.float32.frag
// Module Version 10300
// Generated by (magic number): 8000a
// Id's are bound by 533
// Id's are bound by 541
Capability Shader
Capability Float16
@ -83,52 +83,52 @@ spv.float32.frag
Name 451 "f32v2"
Name 469 "f32v"
Name 471 "if32v"
Name 520 "S"
MemberName 520(S) 0 "x"
MemberName 520(S) 1 "y"
MemberName 520(S) 2 "z"
Name 522 "B1"
MemberName 522(B1) 0 "a"
MemberName 522(B1) 1 "b"
MemberName 522(B1) 2 "c"
MemberName 522(B1) 3 "d"
MemberName 522(B1) 4 "e"
MemberName 522(B1) 5 "f"
MemberName 522(B1) 6 "g"
MemberName 522(B1) 7 "h"
Name 524 ""
Name 525 "sf16"
Name 526 "sf"
Name 527 "sd"
Name 528 "f16_to_f"
Name 530 "f16_to_d"
Name 531 "f_to_f16"
Name 532 "d_to_f16"
Name 528 "S"
MemberName 528(S) 0 "x"
MemberName 528(S) 1 "y"
MemberName 528(S) 2 "z"
Name 530 "B1"
MemberName 530(B1) 0 "a"
MemberName 530(B1) 1 "b"
MemberName 530(B1) 2 "c"
MemberName 530(B1) 3 "d"
MemberName 530(B1) 4 "e"
MemberName 530(B1) 5 "f"
MemberName 530(B1) 6 "g"
MemberName 530(B1) 7 "h"
Name 532 ""
Name 533 "sf16"
Name 534 "sf"
Name 535 "sd"
Name 536 "f16_to_f"
Name 538 "f16_to_d"
Name 539 "f_to_f16"
Name 540 "d_to_f16"
Decorate 471(if32v) Location 0
Decorate 518 ArrayStride 16
Decorate 519 ArrayStride 32
MemberDecorate 520(S) 0 Offset 0
MemberDecorate 520(S) 1 Offset 8
MemberDecorate 520(S) 2 Offset 16
Decorate 521 ArrayStride 32
MemberDecorate 522(B1) 0 Offset 0
MemberDecorate 522(B1) 1 Offset 8
MemberDecorate 522(B1) 2 Offset 16
MemberDecorate 522(B1) 3 Offset 32
MemberDecorate 522(B1) 4 ColMajor
MemberDecorate 522(B1) 4 Offset 64
MemberDecorate 522(B1) 4 MatrixStride 16
MemberDecorate 522(B1) 5 ColMajor
MemberDecorate 522(B1) 5 Offset 96
MemberDecorate 522(B1) 5 MatrixStride 16
MemberDecorate 522(B1) 6 Offset 160
MemberDecorate 522(B1) 7 Offset 192
Decorate 522(B1) Block
Decorate 524 DescriptorSet 0
Decorate 524 Binding 0
Decorate 525(sf16) SpecId 100
Decorate 526(sf) SpecId 101
Decorate 527(sd) SpecId 102
Decorate 526 ArrayStride 16
Decorate 527 ArrayStride 32
MemberDecorate 528(S) 0 Offset 0
MemberDecorate 528(S) 1 Offset 8
MemberDecorate 528(S) 2 Offset 16
Decorate 529 ArrayStride 32
MemberDecorate 530(B1) 0 Offset 0
MemberDecorate 530(B1) 1 Offset 8
MemberDecorate 530(B1) 2 Offset 16
MemberDecorate 530(B1) 3 Offset 32
MemberDecorate 530(B1) 4 ColMajor
MemberDecorate 530(B1) 4 Offset 64
MemberDecorate 530(B1) 4 MatrixStride 16
MemberDecorate 530(B1) 5 ColMajor
MemberDecorate 530(B1) 5 Offset 96
MemberDecorate 530(B1) 5 MatrixStride 16
MemberDecorate 530(B1) 6 Offset 160
MemberDecorate 530(B1) 7 Offset 192
Decorate 530(B1) Block
Decorate 532 DescriptorSet 0
Decorate 532 Binding 0
Decorate 533(sf16) SpecId 100
Decorate 534(sf) SpecId 101
Decorate 535(sd) SpecId 102
2: TypeVoid
3: TypeFunction 2
26: TypeFloat 32
@ -197,25 +197,25 @@ spv.float32.frag
470: TypePointer Input 153(fvec3)
471(if32v): 470(ptr) Variable Input
472: TypePointer Input 26(float)
509: 192(int) Constant 1
514: 26(float) Constant 1056964608
515: 27(fvec2) ConstantComposite 514 514
517: 31(int) Constant 2
518: TypeArray 26(float) 517
519: TypeArray 412 517
520(S): TypeStruct 26(float) 27(fvec2) 153(fvec3)
521: TypeArray 520(S) 517
522(B1): TypeStruct 26(float) 27(fvec2) 153(fvec3) 518 412 519 520(S) 521
523: TypePointer Uniform 522(B1)
524: 523(ptr) Variable Uniform
525(sf16):172(float16_t) SpecConstant 12288
526(sf): 26(float) SpecConstant 1048576000
527(sd):149(float64_t) SpecConstant 0 1071644672
528(f16_to_f): 26(float) SpecConstantOp 115 525(sf16)
529: 26(float) SpecConstantOp 115 525(sf16)
530(f16_to_d):149(float64_t) SpecConstantOp 115 529
531(f_to_f16):172(float16_t) SpecConstantOp 115 526(sf)
532(d_to_f16):172(float16_t) SpecConstantOp 115 527(sd)
515: 192(int) Constant 1
522: 26(float) Constant 1056964608
523: 27(fvec2) ConstantComposite 522 522
525: 31(int) Constant 2
526: TypeArray 26(float) 525
527: TypeArray 412 525
528(S): TypeStruct 26(float) 27(fvec2) 153(fvec3)
529: TypeArray 528(S) 525
530(B1): TypeStruct 26(float) 27(fvec2) 153(fvec3) 526 412 527 528(S) 529
531: TypePointer Uniform 530(B1)
532: 531(ptr) Variable Uniform
533(sf16):172(float16_t) SpecConstant 12288
534(sf): 26(float) SpecConstant 1048576000
535(sd):149(float64_t) SpecConstant 0 1071644672
536(f16_to_f): 26(float) SpecConstantOp 115 533(sf16)
537: 26(float) SpecConstantOp 115 533(sf16)
538(f16_to_d):149(float64_t) SpecConstantOp 115 537
539(f_to_f16):172(float16_t) SpecConstantOp 115 534(sf)
540(d_to_f16):172(float16_t) SpecConstantOp 115 535(sd)
4(main): 2 Function None 3
5: Label
Return
@ -765,45 +765,57 @@ spv.float32.frag
481: 153(fvec3) Load 471(if32v)
482: 27(fvec2) VectorShuffle 481 481 0 1
483: 27(fvec2) DPdxFine 482
484: 153(fvec3) Load 469(f32v)
485: 153(fvec3) VectorShuffle 484 483 3 4 2
Store 469(f32v) 485
486: 153(fvec3) Load 471(if32v)
487: 27(fvec2) VectorShuffle 486 486 0 1
488: 27(fvec2) DPdyFine 487
489: 153(fvec3) Load 469(f32v)
490: 153(fvec3) VectorShuffle 489 488 3 4 2
Store 469(f32v) 490
491: 153(fvec3) Load 471(if32v)
492: 153(fvec3) DPdxCoarse 491
Store 469(f32v) 492
493: 153(fvec3) Load 471(if32v)
494: 153(fvec3) DPdxCoarse 493
Store 469(f32v) 494
495: 472(ptr) AccessChain 471(if32v) 32
496: 26(float) Load 495
497: 26(float) Fwidth 496
498: 33(ptr) AccessChain 469(f32v) 32
Store 498 497
499: 153(fvec3) Load 471(if32v)
500: 27(fvec2) VectorShuffle 499 499 0 1
501: 27(fvec2) FwidthFine 500
502: 153(fvec3) Load 469(f32v)
503: 153(fvec3) VectorShuffle 502 501 3 4 2
Store 469(f32v) 503
504: 153(fvec3) Load 471(if32v)
505: 153(fvec3) FwidthCoarse 504
Store 469(f32v) 505
506: 472(ptr) AccessChain 471(if32v) 32
507: 26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 506
508: 33(ptr) AccessChain 469(f32v) 32
Store 508 507
510: 153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 471(if32v) 509
511: 27(fvec2) VectorShuffle 510 510 0 1
512: 153(fvec3) Load 469(f32v)
513: 153(fvec3) VectorShuffle 512 511 3 4 2
Store 469(f32v) 513
516: 153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 471(if32v) 515
Store 469(f32v) 516
484: 33(ptr) AccessChain 469(f32v) 32
485: 26(float) CompositeExtract 483 0
Store 484 485
486: 33(ptr) AccessChain 469(f32v) 88
487: 26(float) CompositeExtract 483 1
Store 486 487
488: 153(fvec3) Load 471(if32v)
489: 27(fvec2) VectorShuffle 488 488 0 1
490: 27(fvec2) DPdyFine 489
491: 33(ptr) AccessChain 469(f32v) 32
492: 26(float) CompositeExtract 490 0
Store 491 492
493: 33(ptr) AccessChain 469(f32v) 88
494: 26(float) CompositeExtract 490 1
Store 493 494
495: 153(fvec3) Load 471(if32v)
496: 153(fvec3) DPdxCoarse 495
Store 469(f32v) 496
497: 153(fvec3) Load 471(if32v)
498: 153(fvec3) DPdxCoarse 497
Store 469(f32v) 498
499: 472(ptr) AccessChain 471(if32v) 32
500: 26(float) Load 499
501: 26(float) Fwidth 500
502: 33(ptr) AccessChain 469(f32v) 32
Store 502 501
503: 153(fvec3) Load 471(if32v)
504: 27(fvec2) VectorShuffle 503 503 0 1
505: 27(fvec2) FwidthFine 504
506: 33(ptr) AccessChain 469(f32v) 32
507: 26(float) CompositeExtract 505 0
Store 506 507
508: 33(ptr) AccessChain 469(f32v) 88
509: 26(float) CompositeExtract 505 1
Store 508 509
510: 153(fvec3) Load 471(if32v)
511: 153(fvec3) FwidthCoarse 510
Store 469(f32v) 511
512: 472(ptr) AccessChain 471(if32v) 32
513: 26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 512
514: 33(ptr) AccessChain 469(f32v) 32
Store 514 513
516: 153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 471(if32v) 515
517: 27(fvec2) VectorShuffle 516 516 0 1
518: 33(ptr) AccessChain 469(f32v) 32
519: 26(float) CompositeExtract 517 0
Store 518 519
520: 33(ptr) AccessChain 469(f32v) 88
521: 26(float) CompositeExtract 517 1
Store 520 521
524: 153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 471(if32v) 523
Store 469(f32v) 524
Return
FunctionEnd