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:
parent
9158061398
commit
6d5b40f051
50 changed files with 31343 additions and 26594 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue