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

@ -42,9 +42,34 @@ output primitive = triangle_strip
0:14 Function Definition: main( ( temp void)
0:14 Function Parameters:
0:? Sequence
0:14 move second child to first child ( temp 3-element array of structure{})
0:? 'input' ( temp 3-element array of structure{})
0:? 'input' ( in 3-element array of structure{})
0:14 Sequence
0:14 move second child to first child ( temp structure{})
0:14 direct index ( temp structure{})
0:? 'input' ( temp 3-element array of structure{})
0:14 Constant:
0:14 0 (const int)
0:14 direct index ( in structure{})
0:? 'input' ( in 3-element array of structure{})
0:14 Constant:
0:14 0 (const int)
0:14 move second child to first child ( temp structure{})
0:14 direct index ( temp structure{})
0:? 'input' ( temp 3-element array of structure{})
0:14 Constant:
0:14 1 (const int)
0:14 direct index ( in structure{})
0:? 'input' ( in 3-element array of structure{})
0:14 Constant:
0:14 1 (const int)
0:14 move second child to first child ( temp structure{})
0:14 direct index ( temp structure{})
0:? 'input' ( temp 3-element array of structure{})
0:14 Constant:
0:14 2 (const int)
0:14 direct index ( in structure{})
0:? 'input' ( in 3-element array of structure{})
0:14 Constant:
0:14 2 (const int)
0:14 Function Call: @main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1; ( temp void)
0:? 'input' ( temp 3-element array of structure{})
0:? 'TriStream' ( temp structure{})
@ -97,9 +122,34 @@ output primitive = triangle_strip
0:14 Function Definition: main( ( temp void)
0:14 Function Parameters:
0:? Sequence
0:14 move second child to first child ( temp 3-element array of structure{})
0:? 'input' ( temp 3-element array of structure{})
0:? 'input' ( in 3-element array of structure{})
0:14 Sequence
0:14 move second child to first child ( temp structure{})
0:14 direct index ( temp structure{})
0:? 'input' ( temp 3-element array of structure{})
0:14 Constant:
0:14 0 (const int)
0:14 direct index ( in structure{})
0:? 'input' ( in 3-element array of structure{})
0:14 Constant:
0:14 0 (const int)
0:14 move second child to first child ( temp structure{})
0:14 direct index ( temp structure{})
0:? 'input' ( temp 3-element array of structure{})
0:14 Constant:
0:14 1 (const int)
0:14 direct index ( in structure{})
0:? 'input' ( in 3-element array of structure{})
0:14 Constant:
0:14 1 (const int)
0:14 move second child to first child ( temp structure{})
0:14 direct index ( temp structure{})
0:? 'input' ( temp 3-element array of structure{})
0:14 Constant:
0:14 2 (const int)
0:14 direct index ( in structure{})
0:? 'input' ( in 3-element array of structure{})
0:14 Constant:
0:14 2 (const int)
0:14 Function Call: @main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1; ( temp void)
0:? 'input' ( temp 3-element array of structure{})
0:? 'TriStream' ( temp structure{})
@ -108,7 +158,7 @@ output primitive = triangle_strip
Validation failed
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 57
// Id's are bound by 66
Capability Geometry
1: ExtInstImport "GLSL.std.450"
@ -136,9 +186,9 @@ Validation failed
Name 44 "param"
Name 47 "input"
Name 49 "input"
Name 51 "TriStream"
Name 52 "param"
Name 54 "param"
Name 60 "TriStream"
Name 61 "param"
Name 63 "param"
2: TypeVoid
3: TypeFunction 2
6(GSPS_INPUT): TypeStruct
@ -157,19 +207,30 @@ Validation failed
40: 25(int) Constant 2
48: TypePointer Input 15
49(input): 48(ptr) Variable Input
50: TypePointer Input 6(GSPS_INPUT)
4(main): 2 Function None 3
5: Label
47(input): 16(ptr) Variable Function
51(TriStream): 7(ptr) Variable Function
52(param): 16(ptr) Variable Function
54(param): 7(ptr) Variable Function
50: 15 Load 49(input)
Store 47(input) 50
53: 15 Load 47(input)
Store 52(param) 53
55: 2 FunctionCall 20(@main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1;) 52(param) 54(param)
56:6(GSPS_INPUT) Load 54(param)
Store 51(TriStream) 56
60(TriStream): 7(ptr) Variable Function
61(param): 16(ptr) Variable Function
63(param): 7(ptr) Variable Function
51: 50(ptr) AccessChain 49(input) 26
52:6(GSPS_INPUT) Load 51
53: 7(ptr) AccessChain 47(input) 26
Store 53 52
54: 50(ptr) AccessChain 49(input) 33
55:6(GSPS_INPUT) Load 54
56: 7(ptr) AccessChain 47(input) 33
Store 56 55
57: 50(ptr) AccessChain 49(input) 40
58:6(GSPS_INPUT) Load 57
59: 7(ptr) AccessChain 47(input) 40
Store 59 58
62: 15 Load 47(input)
Store 61(param) 62
64: 2 FunctionCall 20(@main(struct-GSPS_INPUT1[3];struct-GSPS_INPUT1;) 61(param) 63(param)
65:6(GSPS_INPUT) Load 63(param)
Store 60(TriStream) 65
Return
FunctionEnd
11(EmitVertex(struct-GSPS_INPUT1;struct-GSPS_INPUT1;): 2 Function None 8