Flatten all interface variables (#2217)

Specifically, add flattening of arrayed io for geometry and
tesselation shaders. Previously some interface structs just had
builtins split out which caused some interfaces to not be exactly
the same as that of flattened adjacent stages, affecting validation
and correctness.

This obviates builtin splitting. That will be removed in a followup
commit. It was left in for this commit to better exhibit the functional
changes that were made.

Fixes #1660.
This commit is contained in:
greg-lunarg 2020-05-18 02:13:10 -06:00 committed by GitHub
parent 1a906168cd
commit 7c753a7253
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 3325 additions and 1561 deletions

View file

@ -56,9 +56,79 @@ triangle order = none
0:22 Function Definition: main( ( temp void)
0:22 Function Parameters:
0:? Sequence
0:22 move second child to first child ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Sequence
0:22 move second child to first child ( temp 4-component vector of float)
0:22 pos: direct index for structure ( temp 4-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 0 (const int)
0:22 Constant:
0:22 0 (const int)
0:22 direct index (layout( location=0) in 4-component vector of float)
0:? 'i.pos' (layout( location=0) in 3-element array of 4-component vector of float)
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp 3-component vector of float)
0:22 norm: direct index for structure ( temp 3-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 0 (const int)
0:22 Constant:
0:22 1 (const int)
0:22 direct index (layout( location=1) in 3-component vector of float)
0:? 'i.norm' (layout( location=1) in 3-element array of 3-component vector of float)
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp 4-component vector of float)
0:22 pos: direct index for structure ( temp 4-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 1 (const int)
0:22 Constant:
0:22 0 (const int)
0:22 direct index (layout( location=0) in 4-component vector of float)
0:? 'i.pos' (layout( location=0) in 3-element array of 4-component vector of float)
0:22 Constant:
0:22 1 (const int)
0:22 move second child to first child ( temp 3-component vector of float)
0:22 norm: direct index for structure ( temp 3-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 1 (const int)
0:22 Constant:
0:22 1 (const int)
0:22 direct index (layout( location=1) in 3-component vector of float)
0:? 'i.norm' (layout( location=1) in 3-element array of 3-component vector of float)
0:22 Constant:
0:22 1 (const int)
0:22 move second child to first child ( temp 4-component vector of float)
0:22 pos: direct index for structure ( temp 4-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 2 (const int)
0:22 Constant:
0:22 0 (const int)
0:22 direct index (layout( location=0) in 4-component vector of float)
0:? 'i.pos' (layout( location=0) in 3-element array of 4-component vector of float)
0:22 Constant:
0:22 2 (const int)
0:22 move second child to first child ( temp 3-component vector of float)
0:22 norm: direct index for structure ( temp 3-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 2 (const int)
0:22 Constant:
0:22 1 (const int)
0:22 direct index (layout( location=1) in 3-component vector of float)
0:? 'i.norm' (layout( location=1) in 3-element array of 3-component vector of float)
0:22 Constant:
0:22 2 (const int)
0:22 move second child to first child ( temp float)
0:? 'f' ( temp float)
0:? 'f' (layout( location=2) patch in float)
@ -134,7 +204,8 @@ triangle order = none
0:? Linker Objects
0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i.pos' (layout( location=0) in 3-element array of 4-component vector of float)
0:? 'i.norm' (layout( location=1) in 3-element array of 3-component vector of float)
0:? 'f' (layout( location=2) patch in float)
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
@ -201,9 +272,79 @@ triangle order = none
0:22 Function Definition: main( ( temp void)
0:22 Function Parameters:
0:? Sequence
0:22 move second child to first child ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Sequence
0:22 move second child to first child ( temp 4-component vector of float)
0:22 pos: direct index for structure ( temp 4-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 0 (const int)
0:22 Constant:
0:22 0 (const int)
0:22 direct index (layout( location=0) in 4-component vector of float)
0:? 'i.pos' (layout( location=0) in 3-element array of 4-component vector of float)
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp 3-component vector of float)
0:22 norm: direct index for structure ( temp 3-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 0 (const int)
0:22 Constant:
0:22 1 (const int)
0:22 direct index (layout( location=1) in 3-component vector of float)
0:? 'i.norm' (layout( location=1) in 3-element array of 3-component vector of float)
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child ( temp 4-component vector of float)
0:22 pos: direct index for structure ( temp 4-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 1 (const int)
0:22 Constant:
0:22 0 (const int)
0:22 direct index (layout( location=0) in 4-component vector of float)
0:? 'i.pos' (layout( location=0) in 3-element array of 4-component vector of float)
0:22 Constant:
0:22 1 (const int)
0:22 move second child to first child ( temp 3-component vector of float)
0:22 norm: direct index for structure ( temp 3-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 1 (const int)
0:22 Constant:
0:22 1 (const int)
0:22 direct index (layout( location=1) in 3-component vector of float)
0:? 'i.norm' (layout( location=1) in 3-element array of 3-component vector of float)
0:22 Constant:
0:22 1 (const int)
0:22 move second child to first child ( temp 4-component vector of float)
0:22 pos: direct index for structure ( temp 4-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 2 (const int)
0:22 Constant:
0:22 0 (const int)
0:22 direct index (layout( location=0) in 4-component vector of float)
0:? 'i.pos' (layout( location=0) in 3-element array of 4-component vector of float)
0:22 Constant:
0:22 2 (const int)
0:22 move second child to first child ( temp 3-component vector of float)
0:22 norm: direct index for structure ( temp 3-component vector of float)
0:22 direct index ( temp structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i' ( temp 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:22 Constant:
0:22 2 (const int)
0:22 Constant:
0:22 1 (const int)
0:22 direct index (layout( location=1) in 3-component vector of float)
0:? 'i.norm' (layout( location=1) in 3-element array of 3-component vector of float)
0:22 Constant:
0:22 2 (const int)
0:22 move second child to first child ( temp float)
0:? 'f' ( temp float)
0:? 'f' (layout( location=2) patch in float)
@ -279,7 +420,8 @@ triangle order = none
0:? Linker Objects
0:? '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
0:? '@entryPointOutput.norm' (layout( location=1) out 3-component vector of float)
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float pos, temp 3-component vector of float norm})
0:? 'i.pos' (layout( location=0) in 3-element array of 4-component vector of float)
0:? 'i.norm' (layout( location=1) in 3-element array of 3-component vector of float)
0:? 'f' (layout( location=2) patch in float)
0:? 'tesscoord' ( patch in 3-component vector of float TessCoord)
0:? 'pcf_data.flTessFactor' ( patch in 4-element array of float TessLevelOuter)
@ -287,12 +429,12 @@ triangle order = none
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 103
// Id's are bound by 125
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationEvaluation 4 "main" 54 58 62 68 82 96 100
EntryPoint TessellationEvaluation 4 "main" 55 62 82 85 91 104 118 122
ExecutionMode 4 Triangles
Source HLSL 500
Name 4 "main"
@ -312,31 +454,33 @@ triangle order = none
Name 23 "pcf_data"
Name 27 "o"
Name 52 "i"
Name 54 "i"
Name 56 "f"
Name 58 "f"
Name 60 "tesscoord"
Name 62 "tesscoord"
Name 64 "pcf_data"
Name 68 "pcf_data.flTessFactor"
Name 82 "pcf_data.flInsideTessFactor"
Name 86 "flattenTemp"
Name 88 "param"
Name 90 "param"
Name 92 "param"
Name 96 "@entryPointOutput.pos"
Name 100 "@entryPointOutput.norm"
Decorate 54(i) Location 0
Decorate 58(f) Patch
Decorate 58(f) Location 2
Decorate 62(tesscoord) Patch
Decorate 62(tesscoord) BuiltIn TessCoord
Decorate 68(pcf_data.flTessFactor) Patch
Decorate 68(pcf_data.flTessFactor) BuiltIn TessLevelOuter
Decorate 82(pcf_data.flInsideTessFactor) Patch
Decorate 82(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner
Decorate 96(@entryPointOutput.pos) Location 0
Decorate 100(@entryPointOutput.norm) Location 1
Name 55 "i.pos"
Name 62 "i.norm"
Name 80 "f"
Name 82 "f"
Name 84 "tesscoord"
Name 85 "tesscoord"
Name 87 "pcf_data"
Name 91 "pcf_data.flTessFactor"
Name 104 "pcf_data.flInsideTessFactor"
Name 108 "flattenTemp"
Name 110 "param"
Name 112 "param"
Name 114 "param"
Name 118 "@entryPointOutput.pos"
Name 122 "@entryPointOutput.norm"
Decorate 55(i.pos) Location 0
Decorate 62(i.norm) Location 1
Decorate 82(f) Patch
Decorate 82(f) Location 2
Decorate 85(tesscoord) Patch
Decorate 85(tesscoord) BuiltIn TessCoord
Decorate 91(pcf_data.flTessFactor) Patch
Decorate 91(pcf_data.flTessFactor) BuiltIn TessLevelOuter
Decorate 104(pcf_data.flInsideTessFactor) Patch
Decorate 104(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner
Decorate 118(@entryPointOutput.pos) Location 0
Decorate 122(@entryPointOutput.norm) Location 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -361,72 +505,99 @@ triangle order = none
40: 28(int) Constant 1
42: 10(int) Constant 1
51: TypePointer Function 12
53: TypePointer Input 12
54(i): 53(ptr) Variable Input
57: TypePointer Input 6(float)
58(f): 57(ptr) Variable Input
61: TypePointer Input 8(fvec3)
62(tesscoord): 61(ptr) Variable Input
65: 10(int) Constant 4
66: TypeArray 6(float) 65
67: TypePointer Input 66
68(pcf_data.flTessFactor): 67(ptr) Variable Input
75: 28(int) Constant 2
79: 10(int) Constant 2
80: TypeArray 6(float) 79
81: TypePointer Input 80
82(pcf_data.flInsideTessFactor): 81(ptr) Variable Input
95: TypePointer Output 7(fvec4)
96(@entryPointOutput.pos): 95(ptr) Variable Output
99: TypePointer Output 8(fvec3)
100(@entryPointOutput.norm): 99(ptr) Variable Output
53: TypeArray 7(fvec4) 11
54: TypePointer Input 53
55(i.pos): 54(ptr) Variable Input
56: TypePointer Input 7(fvec4)
60: TypeArray 8(fvec3) 11
61: TypePointer Input 60
62(i.norm): 61(ptr) Variable Input
63: TypePointer Input 8(fvec3)
73: 28(int) Constant 2
81: TypePointer Input 6(float)
82(f): 81(ptr) Variable Input
85(tesscoord): 63(ptr) Variable Input
88: 10(int) Constant 4
89: TypeArray 6(float) 88
90: TypePointer Input 89
91(pcf_data.flTessFactor): 90(ptr) Variable Input
101: 10(int) Constant 2
102: TypeArray 6(float) 101
103: TypePointer Input 102
104(pcf_data.flInsideTessFactor): 103(ptr) Variable Input
117: TypePointer Output 7(fvec4)
118(@entryPointOutput.pos): 117(ptr) Variable Output
121: TypePointer Output 8(fvec3)
122(@entryPointOutput.norm): 121(ptr) Variable Output
4(main): 2 Function None 3
5: Label
52(i): 51(ptr) Variable Function
56(f): 13(ptr) Variable Function
60(tesscoord): 14(ptr) Variable Function
64(pcf_data): 17(ptr) Variable Function
86(flattenTemp): 26(ptr) Variable Function
88(param): 13(ptr) Variable Function
90(param): 14(ptr) Variable Function
92(param): 17(ptr) Variable Function
55: 12 Load 54(i)
Store 52(i) 55
59: 6(float) Load 58(f)
Store 56(f) 59
63: 8(fvec3) Load 62(tesscoord)
Store 60(tesscoord) 63
69: 57(ptr) AccessChain 68(pcf_data.flTessFactor) 29
70: 6(float) Load 69
71: 13(ptr) AccessChain 64(pcf_data) 29 29
Store 71 70
72: 57(ptr) AccessChain 68(pcf_data.flTessFactor) 40
73: 6(float) Load 72
74: 13(ptr) AccessChain 64(pcf_data) 29 40
Store 74 73
76: 57(ptr) AccessChain 68(pcf_data.flTessFactor) 75
77: 6(float) Load 76
78: 13(ptr) AccessChain 64(pcf_data) 29 75
Store 78 77
83: 57(ptr) AccessChain 82(pcf_data.flInsideTessFactor) 29
84: 6(float) Load 83
85: 13(ptr) AccessChain 64(pcf_data) 40
Store 85 84
87: 12 Load 52(i)
89: 6(float) Load 56(f)
Store 88(param) 89
91: 8(fvec3) Load 60(tesscoord)
Store 90(param) 91
93:16(pcf_in_t) Load 64(pcf_data)
Store 92(param) 93
94: 18(gs_in_t) FunctionCall 24(@main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11;) 87 88(param) 90(param) 92(param)
Store 86(flattenTemp) 94
97: 38(ptr) AccessChain 86(flattenTemp) 29
98: 7(fvec4) Load 97
Store 96(@entryPointOutput.pos) 98
101: 14(ptr) AccessChain 86(flattenTemp) 40
102: 8(fvec3) Load 101
Store 100(@entryPointOutput.norm) 102
80(f): 13(ptr) Variable Function
84(tesscoord): 14(ptr) Variable Function
87(pcf_data): 17(ptr) Variable Function
108(flattenTemp): 26(ptr) Variable Function
110(param): 13(ptr) Variable Function
112(param): 14(ptr) Variable Function
114(param): 17(ptr) Variable Function
57: 56(ptr) AccessChain 55(i.pos) 29
58: 7(fvec4) Load 57
59: 38(ptr) AccessChain 52(i) 29 29
Store 59 58
64: 63(ptr) AccessChain 62(i.norm) 29
65: 8(fvec3) Load 64
66: 14(ptr) AccessChain 52(i) 29 40
Store 66 65
67: 56(ptr) AccessChain 55(i.pos) 40
68: 7(fvec4) Load 67
69: 38(ptr) AccessChain 52(i) 40 29
Store 69 68
70: 63(ptr) AccessChain 62(i.norm) 40
71: 8(fvec3) Load 70
72: 14(ptr) AccessChain 52(i) 40 40
Store 72 71
74: 56(ptr) AccessChain 55(i.pos) 73
75: 7(fvec4) Load 74
76: 38(ptr) AccessChain 52(i) 73 29
Store 76 75
77: 63(ptr) AccessChain 62(i.norm) 73
78: 8(fvec3) Load 77
79: 14(ptr) AccessChain 52(i) 73 40
Store 79 78
83: 6(float) Load 82(f)
Store 80(f) 83
86: 8(fvec3) Load 85(tesscoord)
Store 84(tesscoord) 86
92: 81(ptr) AccessChain 91(pcf_data.flTessFactor) 29
93: 6(float) Load 92
94: 13(ptr) AccessChain 87(pcf_data) 29 29
Store 94 93
95: 81(ptr) AccessChain 91(pcf_data.flTessFactor) 40
96: 6(float) Load 95
97: 13(ptr) AccessChain 87(pcf_data) 29 40
Store 97 96
98: 81(ptr) AccessChain 91(pcf_data.flTessFactor) 73
99: 6(float) Load 98
100: 13(ptr) AccessChain 87(pcf_data) 29 73
Store 100 99
105: 81(ptr) AccessChain 104(pcf_data.flInsideTessFactor) 29
106: 6(float) Load 105
107: 13(ptr) AccessChain 87(pcf_data) 40
Store 107 106
109: 12 Load 52(i)
111: 6(float) Load 80(f)
Store 110(param) 111
113: 8(fvec3) Load 84(tesscoord)
Store 112(param) 113
115:16(pcf_in_t) Load 87(pcf_data)
Store 114(param) 115
116: 18(gs_in_t) FunctionCall 24(@main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11;) 109 110(param) 112(param) 114(param)
Store 108(flattenTemp) 116
119: 38(ptr) AccessChain 108(flattenTemp) 29
120: 7(fvec4) Load 119
Store 118(@entryPointOutput.pos) 120
123: 14(ptr) AccessChain 108(flattenTemp) 40
124: 8(fvec3) Load 123
Store 122(@entryPointOutput.norm) 124
Return
FunctionEnd
24(@main(struct-ds_in_t-vf4-vf31[3];f1;vf3;struct-pcf_in_t-f1[3]-f11;): 18(gs_in_t) Function None 19