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
|
|
@ -2,7 +2,7 @@ spv.float64.frag
|
|||
Validation failed
|
||||
// Module Version 10300
|
||||
// Generated by (magic number): 8000a
|
||||
// Id's are bound by 524
|
||||
// Id's are bound by 532
|
||||
|
||||
Capability Shader
|
||||
Capability Float16
|
||||
|
|
@ -83,53 +83,53 @@ Validation failed
|
|||
Name 441 "f64v2"
|
||||
Name 459 "f64v"
|
||||
Name 461 "if64v"
|
||||
Name 510 "S"
|
||||
MemberName 510(S) 0 "x"
|
||||
MemberName 510(S) 1 "y"
|
||||
MemberName 510(S) 2 "z"
|
||||
Name 512 "B1"
|
||||
MemberName 512(B1) 0 "a"
|
||||
MemberName 512(B1) 1 "b"
|
||||
MemberName 512(B1) 2 "c"
|
||||
MemberName 512(B1) 3 "d"
|
||||
MemberName 512(B1) 4 "e"
|
||||
MemberName 512(B1) 5 "f"
|
||||
MemberName 512(B1) 6 "g"
|
||||
MemberName 512(B1) 7 "h"
|
||||
Name 514 ""
|
||||
Name 515 "sf16"
|
||||
Name 517 "sf"
|
||||
Name 518 "sd"
|
||||
Name 519 "f16_to_f"
|
||||
Name 521 "f16_to_d"
|
||||
Name 522 "f_to_f16"
|
||||
Name 523 "d_to_f16"
|
||||
Name 518 "S"
|
||||
MemberName 518(S) 0 "x"
|
||||
MemberName 518(S) 1 "y"
|
||||
MemberName 518(S) 2 "z"
|
||||
Name 520 "B1"
|
||||
MemberName 520(B1) 0 "a"
|
||||
MemberName 520(B1) 1 "b"
|
||||
MemberName 520(B1) 2 "c"
|
||||
MemberName 520(B1) 3 "d"
|
||||
MemberName 520(B1) 4 "e"
|
||||
MemberName 520(B1) 5 "f"
|
||||
MemberName 520(B1) 6 "g"
|
||||
MemberName 520(B1) 7 "h"
|
||||
Name 522 ""
|
||||
Name 523 "sf16"
|
||||
Name 525 "sf"
|
||||
Name 526 "sd"
|
||||
Name 527 "f16_to_f"
|
||||
Name 529 "f16_to_d"
|
||||
Name 530 "f_to_f16"
|
||||
Name 531 "d_to_f16"
|
||||
Decorate 461(if64v) Flat
|
||||
Decorate 461(if64v) Location 0
|
||||
Decorate 508 ArrayStride 16
|
||||
Decorate 509 ArrayStride 64
|
||||
MemberDecorate 510(S) 0 Offset 0
|
||||
MemberDecorate 510(S) 1 Offset 16
|
||||
MemberDecorate 510(S) 2 Offset 32
|
||||
Decorate 511 ArrayStride 64
|
||||
MemberDecorate 512(B1) 0 Offset 0
|
||||
MemberDecorate 512(B1) 1 Offset 16
|
||||
MemberDecorate 512(B1) 2 Offset 32
|
||||
MemberDecorate 512(B1) 3 Offset 64
|
||||
MemberDecorate 512(B1) 4 ColMajor
|
||||
MemberDecorate 512(B1) 4 Offset 96
|
||||
MemberDecorate 512(B1) 4 MatrixStride 32
|
||||
MemberDecorate 512(B1) 5 ColMajor
|
||||
MemberDecorate 512(B1) 5 Offset 160
|
||||
MemberDecorate 512(B1) 5 MatrixStride 32
|
||||
MemberDecorate 512(B1) 6 Offset 288
|
||||
MemberDecorate 512(B1) 7 Offset 352
|
||||
Decorate 512(B1) Block
|
||||
Decorate 514 DescriptorSet 0
|
||||
Decorate 514 Binding 0
|
||||
Decorate 515(sf16) SpecId 100
|
||||
Decorate 517(sf) SpecId 101
|
||||
Decorate 518(sd) SpecId 102
|
||||
Decorate 516 ArrayStride 16
|
||||
Decorate 517 ArrayStride 64
|
||||
MemberDecorate 518(S) 0 Offset 0
|
||||
MemberDecorate 518(S) 1 Offset 16
|
||||
MemberDecorate 518(S) 2 Offset 32
|
||||
Decorate 519 ArrayStride 64
|
||||
MemberDecorate 520(B1) 0 Offset 0
|
||||
MemberDecorate 520(B1) 1 Offset 16
|
||||
MemberDecorate 520(B1) 2 Offset 32
|
||||
MemberDecorate 520(B1) 3 Offset 64
|
||||
MemberDecorate 520(B1) 4 ColMajor
|
||||
MemberDecorate 520(B1) 4 Offset 96
|
||||
MemberDecorate 520(B1) 4 MatrixStride 32
|
||||
MemberDecorate 520(B1) 5 ColMajor
|
||||
MemberDecorate 520(B1) 5 Offset 160
|
||||
MemberDecorate 520(B1) 5 MatrixStride 32
|
||||
MemberDecorate 520(B1) 6 Offset 288
|
||||
MemberDecorate 520(B1) 7 Offset 352
|
||||
Decorate 520(B1) Block
|
||||
Decorate 522 DescriptorSet 0
|
||||
Decorate 522 Binding 0
|
||||
Decorate 523(sf16) SpecId 100
|
||||
Decorate 525(sf) SpecId 101
|
||||
Decorate 526(sd) SpecId 102
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
26: TypeFloat 64
|
||||
|
|
@ -195,26 +195,26 @@ Validation failed
|
|||
460: TypePointer Input 149(f64vec3)
|
||||
461(if64v): 460(ptr) Variable Input
|
||||
462: TypePointer Input 26(float64_t)
|
||||
499: 182(int) Constant 1
|
||||
504:26(float64_t) Constant 0 1071644672
|
||||
505: 27(f64vec2) ConstantComposite 504 504
|
||||
507: 31(int) Constant 2
|
||||
508: TypeArray 26(float64_t) 507
|
||||
509: TypeArray 402 507
|
||||
510(S): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3)
|
||||
511: TypeArray 510(S) 507
|
||||
512(B1): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) 508 402 509 510(S) 511
|
||||
513: TypePointer Uniform 512(B1)
|
||||
514: 513(ptr) Variable Uniform
|
||||
515(sf16):162(float16_t) SpecConstant 12288
|
||||
516: TypeFloat 32
|
||||
517(sf): 516(float) SpecConstant 1048576000
|
||||
518(sd):26(float64_t) SpecConstant 0 1071644672
|
||||
519(f16_to_f): 516(float) SpecConstantOp 115 515(sf16)
|
||||
520: 516(float) SpecConstantOp 115 515(sf16)
|
||||
521(f16_to_d):26(float64_t) SpecConstantOp 115 520
|
||||
522(f_to_f16):162(float16_t) SpecConstantOp 115 517(sf)
|
||||
523(d_to_f16):162(float16_t) SpecConstantOp 115 518(sd)
|
||||
505: 182(int) Constant 1
|
||||
512:26(float64_t) Constant 0 1071644672
|
||||
513: 27(f64vec2) ConstantComposite 512 512
|
||||
515: 31(int) Constant 2
|
||||
516: TypeArray 26(float64_t) 515
|
||||
517: TypeArray 402 515
|
||||
518(S): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3)
|
||||
519: TypeArray 518(S) 515
|
||||
520(B1): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) 516 402 517 518(S) 519
|
||||
521: TypePointer Uniform 520(B1)
|
||||
522: 521(ptr) Variable Uniform
|
||||
523(sf16):162(float16_t) SpecConstant 12288
|
||||
524: TypeFloat 32
|
||||
525(sf): 524(float) SpecConstant 1048576000
|
||||
526(sd):26(float64_t) SpecConstant 0 1071644672
|
||||
527(f16_to_f): 524(float) SpecConstantOp 115 523(sf16)
|
||||
528: 524(float) SpecConstantOp 115 523(sf16)
|
||||
529(f16_to_d):26(float64_t) SpecConstantOp 115 528
|
||||
530(f_to_f16):162(float16_t) SpecConstantOp 115 525(sf)
|
||||
531(d_to_f16):162(float16_t) SpecConstantOp 115 526(sd)
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
Return
|
||||
|
|
@ -754,45 +754,57 @@ Validation failed
|
|||
471:149(f64vec3) Load 461(if64v)
|
||||
472: 27(f64vec2) VectorShuffle 471 471 0 1
|
||||
473: 27(f64vec2) DPdxFine 472
|
||||
474:149(f64vec3) Load 459(f64v)
|
||||
475:149(f64vec3) VectorShuffle 474 473 3 4 2
|
||||
Store 459(f64v) 475
|
||||
476:149(f64vec3) Load 461(if64v)
|
||||
477: 27(f64vec2) VectorShuffle 476 476 0 1
|
||||
478: 27(f64vec2) DPdyFine 477
|
||||
479:149(f64vec3) Load 459(f64v)
|
||||
480:149(f64vec3) VectorShuffle 479 478 3 4 2
|
||||
Store 459(f64v) 480
|
||||
481:149(f64vec3) Load 461(if64v)
|
||||
482:149(f64vec3) DPdxCoarse 481
|
||||
Store 459(f64v) 482
|
||||
483:149(f64vec3) Load 461(if64v)
|
||||
484:149(f64vec3) DPdxCoarse 483
|
||||
Store 459(f64v) 484
|
||||
485: 462(ptr) AccessChain 461(if64v) 32
|
||||
486:26(float64_t) Load 485
|
||||
487:26(float64_t) Fwidth 486
|
||||
488: 33(ptr) AccessChain 459(f64v) 32
|
||||
Store 488 487
|
||||
489:149(f64vec3) Load 461(if64v)
|
||||
490: 27(f64vec2) VectorShuffle 489 489 0 1
|
||||
491: 27(f64vec2) FwidthFine 490
|
||||
492:149(f64vec3) Load 459(f64v)
|
||||
493:149(f64vec3) VectorShuffle 492 491 3 4 2
|
||||
Store 459(f64v) 493
|
||||
494:149(f64vec3) Load 461(if64v)
|
||||
495:149(f64vec3) FwidthCoarse 494
|
||||
Store 459(f64v) 495
|
||||
496: 462(ptr) AccessChain 461(if64v) 32
|
||||
497:26(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 496
|
||||
498: 33(ptr) AccessChain 459(f64v) 32
|
||||
Store 498 497
|
||||
500:149(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 461(if64v) 499
|
||||
501: 27(f64vec2) VectorShuffle 500 500 0 1
|
||||
502:149(f64vec3) Load 459(f64v)
|
||||
503:149(f64vec3) VectorShuffle 502 501 3 4 2
|
||||
Store 459(f64v) 503
|
||||
506:149(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 461(if64v) 505
|
||||
Store 459(f64v) 506
|
||||
474: 33(ptr) AccessChain 459(f64v) 32
|
||||
475:26(float64_t) CompositeExtract 473 0
|
||||
Store 474 475
|
||||
476: 33(ptr) AccessChain 459(f64v) 88
|
||||
477:26(float64_t) CompositeExtract 473 1
|
||||
Store 476 477
|
||||
478:149(f64vec3) Load 461(if64v)
|
||||
479: 27(f64vec2) VectorShuffle 478 478 0 1
|
||||
480: 27(f64vec2) DPdyFine 479
|
||||
481: 33(ptr) AccessChain 459(f64v) 32
|
||||
482:26(float64_t) CompositeExtract 480 0
|
||||
Store 481 482
|
||||
483: 33(ptr) AccessChain 459(f64v) 88
|
||||
484:26(float64_t) CompositeExtract 480 1
|
||||
Store 483 484
|
||||
485:149(f64vec3) Load 461(if64v)
|
||||
486:149(f64vec3) DPdxCoarse 485
|
||||
Store 459(f64v) 486
|
||||
487:149(f64vec3) Load 461(if64v)
|
||||
488:149(f64vec3) DPdxCoarse 487
|
||||
Store 459(f64v) 488
|
||||
489: 462(ptr) AccessChain 461(if64v) 32
|
||||
490:26(float64_t) Load 489
|
||||
491:26(float64_t) Fwidth 490
|
||||
492: 33(ptr) AccessChain 459(f64v) 32
|
||||
Store 492 491
|
||||
493:149(f64vec3) Load 461(if64v)
|
||||
494: 27(f64vec2) VectorShuffle 493 493 0 1
|
||||
495: 27(f64vec2) FwidthFine 494
|
||||
496: 33(ptr) AccessChain 459(f64v) 32
|
||||
497:26(float64_t) CompositeExtract 495 0
|
||||
Store 496 497
|
||||
498: 33(ptr) AccessChain 459(f64v) 88
|
||||
499:26(float64_t) CompositeExtract 495 1
|
||||
Store 498 499
|
||||
500:149(f64vec3) Load 461(if64v)
|
||||
501:149(f64vec3) FwidthCoarse 500
|
||||
Store 459(f64v) 501
|
||||
502: 462(ptr) AccessChain 461(if64v) 32
|
||||
503:26(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 502
|
||||
504: 33(ptr) AccessChain 459(f64v) 32
|
||||
Store 504 503
|
||||
506:149(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 461(if64v) 505
|
||||
507: 27(f64vec2) VectorShuffle 506 506 0 1
|
||||
508: 33(ptr) AccessChain 459(f64v) 32
|
||||
509:26(float64_t) CompositeExtract 507 0
|
||||
Store 508 509
|
||||
510: 33(ptr) AccessChain 459(f64v) 88
|
||||
511:26(float64_t) CompositeExtract 507 1
|
||||
Store 510 511
|
||||
514:149(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 461(if64v) 513
|
||||
Store 459(f64v) 514
|
||||
Return
|
||||
FunctionEnd
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue