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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user