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
17 changed files with 3325 additions and 1561 deletions

View File

@@ -25,15 +25,53 @@ triangle order = ccw
0:26 Function Definition: main( ( temp void)
0:26 Function Parameters:
0:? Sequence
0:26 move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'InvocationId' ( in uint InvocationID)
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Sequence
0:26 move second child to first child ( temp 3-component vector of float)
0:26 cpoint: direct index for structure ( temp 3-component vector of float)
0:26 direct index ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Constant:
0:26 0 (const int)
0:26 Constant:
0:26 0 (const int)
0:26 direct index (layout( location=0) in 3-component vector of float)
0:? 'ip.cpoint' (layout( location=0) in 3-element array of 3-component vector of float)
0:26 Constant:
0:26 0 (const int)
0:26 move second child to first child ( temp 3-component vector of float)
0:26 cpoint: direct index for structure ( temp 3-component vector of float)
0:26 direct index ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:
0:26 0 (const int)
0:26 direct index (layout( location=0) in 3-component vector of float)
0:? 'ip.cpoint' (layout( location=0) in 3-element array of 3-component vector of float)
0:26 Constant:
0:26 1 (const int)
0:26 move second child to first child ( temp 3-component vector of float)
0:26 cpoint: direct index for structure ( temp 3-component vector of float)
0:26 direct index ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Constant:
0:26 2 (const int)
0:26 Constant:
0:26 0 (const int)
0:26 direct index (layout( location=0) in 3-component vector of float)
0:? 'ip.cpoint' (layout( location=0) in 3-element array of 3-component vector of float)
0:26 Constant:
0:26 2 (const int)
0:26 Sequence
0:26 move second child to first child ( temp 3-component vector of float)
0:26 indirect index (layout( location=0) out 3-component vector of float)
0:? '@entryPointOutput.cpoint' (layout( location=0) out 3-element array of 3-component vector of float)
0:? 'InvocationId' ( in uint InvocationID)
0:26 cpoint: direct index for structure ( temp 3-component vector of float)
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Constant:
0:26 0 (const int)
0:? Barrier ( temp void)
0:? Test condition and select ( temp void)
0:? Condition
@@ -47,8 +85,8 @@ triangle order = ccw
0:33 Function Definition: PCF( ( temp void)
0:33 Function Parameters:
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
0:? '@entryPointOutput.cpoint' (layout( location=0) out 3-element array of 3-component vector of float)
0:? 'ip.cpoint' (layout( location=0) in 3-element array of 3-component vector of float)
0:? 'InvocationId' ( in uint InvocationID)
@@ -81,15 +119,53 @@ triangle order = ccw
0:26 Function Definition: main( ( temp void)
0:26 Function Parameters:
0:? Sequence
0:26 move second child to first child ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'InvocationId' ( in uint InvocationID)
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Sequence
0:26 move second child to first child ( temp 3-component vector of float)
0:26 cpoint: direct index for structure ( temp 3-component vector of float)
0:26 direct index ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Constant:
0:26 0 (const int)
0:26 Constant:
0:26 0 (const int)
0:26 direct index (layout( location=0) in 3-component vector of float)
0:? 'ip.cpoint' (layout( location=0) in 3-element array of 3-component vector of float)
0:26 Constant:
0:26 0 (const int)
0:26 move second child to first child ( temp 3-component vector of float)
0:26 cpoint: direct index for structure ( temp 3-component vector of float)
0:26 direct index ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:
0:26 0 (const int)
0:26 direct index (layout( location=0) in 3-component vector of float)
0:? 'ip.cpoint' (layout( location=0) in 3-element array of 3-component vector of float)
0:26 Constant:
0:26 1 (const int)
0:26 move second child to first child ( temp 3-component vector of float)
0:26 cpoint: direct index for structure ( temp 3-component vector of float)
0:26 direct index ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Constant:
0:26 2 (const int)
0:26 Constant:
0:26 0 (const int)
0:26 direct index (layout( location=0) in 3-component vector of float)
0:? 'ip.cpoint' (layout( location=0) in 3-element array of 3-component vector of float)
0:26 Constant:
0:26 2 (const int)
0:26 Sequence
0:26 move second child to first child ( temp 3-component vector of float)
0:26 indirect index (layout( location=0) out 3-component vector of float)
0:? '@entryPointOutput.cpoint' (layout( location=0) out 3-element array of 3-component vector of float)
0:? 'InvocationId' ( in uint InvocationID)
0:26 cpoint: direct index for structure ( temp 3-component vector of float)
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
0:26 Constant:
0:26 0 (const int)
0:? Barrier ( temp void)
0:? Test condition and select ( temp void)
0:? Condition
@@ -103,18 +179,18 @@ triangle order = ccw
0:33 Function Definition: PCF( ( temp void)
0:33 Function Parameters:
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
0:? '@entryPointOutput.cpoint' (layout( location=0) out 3-element array of 3-component vector of float)
0:? 'ip.cpoint' (layout( location=0) in 3-element array of 3-component vector of float)
0:? 'InvocationId' ( in uint InvocationID)
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 55
// Id's are bound by 67
Capability Tessellation
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationControl 4 "main" 33 37 39
EntryPoint TessellationControl 4 "main" 34 48 50
ExecutionMode 4 OutputVertices 3
ExecutionMode 4 Triangles
ExecutionMode 4 SpacingFractionalEven
@@ -130,13 +206,13 @@ triangle order = ccw
Name 18 "PCF("
Name 21 "output"
Name 31 "ip"
Name 33 "ip"
Name 37 "@entryPointOutput"
Name 39 "InvocationId"
Name 41 "param"
Decorate 33(ip) Location 0
Decorate 37(@entryPointOutput) Location 0
Decorate 39(InvocationId) BuiltIn InvocationId
Name 34 "ip.cpoint"
Name 48 "@entryPointOutput.cpoint"
Name 50 "InvocationId"
Name 52 "param"
Decorate 34(ip.cpoint) Location 0
Decorate 48(@entryPointOutput.cpoint) Location 0
Decorate 50(InvocationId) BuiltIn InvocationId
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -152,39 +228,53 @@ triangle order = ccw
22: TypeInt 32 1
23: 22(int) Constant 0
24: TypePointer Function 7(fvec3)
32: TypePointer Input 11
33(ip): 32(ptr) Variable Input
35: TypeArray 13(HS_OUT) 10
36: TypePointer Output 35
37(@entryPointOutput): 36(ptr) Variable Output
38: TypePointer Input 9(int)
39(InvocationId): 38(ptr) Variable Input
44: TypePointer Output 13(HS_OUT)
46: 9(int) Constant 2
47: 9(int) Constant 4
48: 9(int) Constant 0
50: TypeBool
32: TypeArray 7(fvec3) 10
33: TypePointer Input 32
34(ip.cpoint): 33(ptr) Variable Input
35: TypePointer Input 7(fvec3)
39: 22(int) Constant 1
43: 22(int) Constant 2
47: TypePointer Output 32
48(@entryPointOutput.cpoint): 47(ptr) Variable Output
49: TypePointer Input 9(int)
50(InvocationId): 49(ptr) Variable Input
56: TypePointer Output 7(fvec3)
58: 9(int) Constant 2
59: 9(int) Constant 4
60: 9(int) Constant 0
62: TypeBool
4(main): 2 Function None 3
5: Label
31(ip): 12(ptr) Variable Function
41(param): 12(ptr) Variable Function
34: 11 Load 33(ip)
Store 31(ip) 34
40: 9(int) Load 39(InvocationId)
42: 11 Load 31(ip)
Store 41(param) 42
43: 13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[3];) 41(param)
45: 44(ptr) AccessChain 37(@entryPointOutput) 40
Store 45 43
ControlBarrier 46 47 48
49: 9(int) Load 39(InvocationId)
51: 50(bool) IEqual 49 23
SelectionMerge 53 None
BranchConditional 51 52 53
52: Label
54: 2 FunctionCall 18(PCF()
Branch 53
53: Label
52(param): 12(ptr) Variable Function
36: 35(ptr) AccessChain 34(ip.cpoint) 23
37: 7(fvec3) Load 36
38: 24(ptr) AccessChain 31(ip) 23 23
Store 38 37
40: 35(ptr) AccessChain 34(ip.cpoint) 39
41: 7(fvec3) Load 40
42: 24(ptr) AccessChain 31(ip) 39 23
Store 42 41
44: 35(ptr) AccessChain 34(ip.cpoint) 43
45: 7(fvec3) Load 44
46: 24(ptr) AccessChain 31(ip) 43 23
Store 46 45
51: 9(int) Load 50(InvocationId)
53: 11 Load 31(ip)
Store 52(param) 53
54: 13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[3];) 52(param)
55: 7(fvec3) CompositeExtract 54 0
57: 56(ptr) AccessChain 48(@entryPointOutput.cpoint) 51
Store 57 55
ControlBarrier 58 59 60
61: 9(int) Load 50(InvocationId)
63: 62(bool) IEqual 61 23
SelectionMerge 65 None
BranchConditional 63 64 65
64: Label
66: 2 FunctionCall 18(PCF()
Branch 65
65: Label
Return
FunctionEnd
16(@main(struct-VS_OUT-vf31[3];): 13(HS_OUT) Function None 14