
This commit adds support for copying nested hierarchical types of split types. E.g, a struct of a struct containing both user and builtin interstage IO variables. When copying split types, if any subtree does NOT contain builtin interstage IO, we can copy the whole subtree with one assignment, which saves a bunch of AST verbosity for memberwise copies of that subtree.
296 lines
15 KiB
Plaintext
296 lines
15 KiB
Plaintext
hlsl.struct.split.array.geom
|
|
Shader version: 450
|
|
invocations = -1
|
|
max_vertices = 4
|
|
input primitive = points
|
|
output primitive = triangle_strip
|
|
0:? Sequence
|
|
0:13 Function Definition: main(u1[1];struct-PSInput-vf4-vf2-vf3-u11; (temp void)
|
|
0:13 Function Parameters:
|
|
0:13 'v' (layout(location=0 ) in 1-element array of uint)
|
|
0:13 'OutputStream' (out structure{temp 4-component vector of float Position Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:? Sequence
|
|
0:16 Sequence
|
|
0:16 move second child to first child (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:16 'Out' (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:16 Constant:
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0 (const uint)
|
|
0:18 Sequence
|
|
0:18 move second child to first child (temp int)
|
|
0:18 'x' (temp int)
|
|
0:18 Constant:
|
|
0:18 0 (const int)
|
|
0:18 Loop with condition tested first
|
|
0:18 Loop Condition
|
|
0:18 Compare Less Than (temp bool)
|
|
0:18 'x' (temp int)
|
|
0:18 Constant:
|
|
0:18 2 (const int)
|
|
0:18 Loop Body
|
|
0:19 Sequence
|
|
0:19 move second child to first child (temp int)
|
|
0:19 'y' (temp int)
|
|
0:19 Constant:
|
|
0:19 0 (const int)
|
|
0:19 Loop with condition tested first
|
|
0:19 Loop Condition
|
|
0:19 Compare Less Than (temp bool)
|
|
0:19 'y' (temp int)
|
|
0:19 Constant:
|
|
0:19 2 (const int)
|
|
0:19 Loop Body
|
|
0:20 move second child to first child (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:20 indirect index (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:20 indirect index (temp 3-element array of structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:20 'Verts' (temp 2-element array of 3-element array of structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:20 'x' (temp int)
|
|
0:20 'y' (temp int)
|
|
0:20 'Out' (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:19 Loop Terminal Expression
|
|
0:19 Pre-Increment (temp int)
|
|
0:19 'y' (temp int)
|
|
0:18 Loop Terminal Expression
|
|
0:18 Pre-Increment (temp int)
|
|
0:18 'x' (temp int)
|
|
0:? Linker Objects
|
|
0:? 'v' (layout(location=0 ) in 1-element array of uint)
|
|
0:? 'OutputStream' (layout(location=0 ) out structure{temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:? 'OutputStream.Pos' (out 4-component vector of float Position)
|
|
|
|
|
|
Linked geometry stage:
|
|
|
|
|
|
Shader version: 450
|
|
invocations = 1
|
|
max_vertices = 4
|
|
input primitive = points
|
|
output primitive = triangle_strip
|
|
0:? Sequence
|
|
0:13 Function Definition: main(u1[1];struct-PSInput-vf4-vf2-vf3-u11; (temp void)
|
|
0:13 Function Parameters:
|
|
0:13 'v' (layout(location=0 ) in 1-element array of uint)
|
|
0:13 'OutputStream' (out structure{temp 4-component vector of float Position Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:? Sequence
|
|
0:16 Sequence
|
|
0:16 move second child to first child (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:16 'Out' (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:16 Constant:
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0.000000
|
|
0:16 0 (const uint)
|
|
0:18 Sequence
|
|
0:18 move second child to first child (temp int)
|
|
0:18 'x' (temp int)
|
|
0:18 Constant:
|
|
0:18 0 (const int)
|
|
0:18 Loop with condition tested first
|
|
0:18 Loop Condition
|
|
0:18 Compare Less Than (temp bool)
|
|
0:18 'x' (temp int)
|
|
0:18 Constant:
|
|
0:18 2 (const int)
|
|
0:18 Loop Body
|
|
0:19 Sequence
|
|
0:19 move second child to first child (temp int)
|
|
0:19 'y' (temp int)
|
|
0:19 Constant:
|
|
0:19 0 (const int)
|
|
0:19 Loop with condition tested first
|
|
0:19 Loop Condition
|
|
0:19 Compare Less Than (temp bool)
|
|
0:19 'y' (temp int)
|
|
0:19 Constant:
|
|
0:19 2 (const int)
|
|
0:19 Loop Body
|
|
0:20 move second child to first child (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:20 indirect index (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:20 indirect index (temp 3-element array of structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:20 'Verts' (temp 2-element array of 3-element array of structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:20 'x' (temp int)
|
|
0:20 'y' (temp int)
|
|
0:20 'Out' (temp structure{temp 4-component vector of float Pos, temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:19 Loop Terminal Expression
|
|
0:19 Pre-Increment (temp int)
|
|
0:19 'y' (temp int)
|
|
0:18 Loop Terminal Expression
|
|
0:18 Pre-Increment (temp int)
|
|
0:18 'x' (temp int)
|
|
0:? Linker Objects
|
|
0:? 'v' (layout(location=0 ) in 1-element array of uint)
|
|
0:? 'OutputStream' (layout(location=0 ) out structure{temp 2-component vector of float TexCoord, temp 3-component vector of float TerrainPos, temp uint VertexID})
|
|
0:? 'OutputStream.Pos' (out 4-component vector of float Position)
|
|
|
|
// Module Version 10000
|
|
// Generated by (magic number): 80001
|
|
// Id's are bound by 89
|
|
|
|
Capability Geometry
|
|
1: ExtInstImport "GLSL.std.450"
|
|
MemoryModel Logical GLSL450
|
|
EntryPoint Geometry 4 "main" 83 86 88
|
|
ExecutionMode 4 InputPoints
|
|
ExecutionMode 4 Invocations 1
|
|
ExecutionMode 4 OutputTriangleStrip
|
|
ExecutionMode 4 OutputVertices 4
|
|
Name 4 "main"
|
|
Name 11 "PSInput"
|
|
MemberName 11(PSInput) 0 "Pos"
|
|
MemberName 11(PSInput) 1 "TexCoord"
|
|
MemberName 11(PSInput) 2 "TerrainPos"
|
|
MemberName 11(PSInput) 3 "VertexID"
|
|
Name 13 "Out"
|
|
Name 14 "PSInput"
|
|
MemberName 14(PSInput) 0 "Pos"
|
|
MemberName 14(PSInput) 1 "TexCoord"
|
|
MemberName 14(PSInput) 2 "TerrainPos"
|
|
MemberName 14(PSInput) 3 "VertexID"
|
|
Name 39 "x"
|
|
Name 48 "y"
|
|
Name 56 "PSInput"
|
|
MemberName 56(PSInput) 0 "Pos"
|
|
MemberName 56(PSInput) 1 "TexCoord"
|
|
MemberName 56(PSInput) 2 "TerrainPos"
|
|
MemberName 56(PSInput) 3 "VertexID"
|
|
Name 62 "Verts"
|
|
Name 83 "v"
|
|
Name 84 "PSInput"
|
|
MemberName 84(PSInput) 0 "TexCoord"
|
|
MemberName 84(PSInput) 1 "TerrainPos"
|
|
MemberName 84(PSInput) 2 "VertexID"
|
|
Name 86 "OutputStream"
|
|
Name 88 "OutputStream.Pos"
|
|
MemberDecorate 14(PSInput) 0 BuiltIn Position
|
|
Decorate 83(v) Location 0
|
|
Decorate 86(OutputStream) Location 0
|
|
Decorate 88(OutputStream.Pos) BuiltIn Position
|
|
2: TypeVoid
|
|
3: TypeFunction 2
|
|
6: TypeFloat 32
|
|
7: TypeVector 6(float) 4
|
|
8: TypeVector 6(float) 2
|
|
9: TypeVector 6(float) 3
|
|
10: TypeInt 32 0
|
|
11(PSInput): TypeStruct 7(fvec4) 8(fvec2) 9(fvec3) 10(int)
|
|
12: TypePointer Function 11(PSInput)
|
|
14(PSInput): TypeStruct 7(fvec4) 8(fvec2) 9(fvec3) 10(int)
|
|
15: 6(float) Constant 0
|
|
16: 7(fvec4) ConstantComposite 15 15 15 15
|
|
17: 8(fvec2) ConstantComposite 15 15
|
|
18: 9(fvec3) ConstantComposite 15 15 15
|
|
19: 10(int) Constant 0
|
|
20: 14(PSInput) ConstantComposite 16 17 18 19
|
|
22: TypeInt 32 1
|
|
23: 22(int) Constant 0
|
|
24: TypePointer Function 7(fvec4)
|
|
27: 22(int) Constant 1
|
|
28: TypePointer Function 8(fvec2)
|
|
31: 22(int) Constant 2
|
|
32: TypePointer Function 9(fvec3)
|
|
35: 22(int) Constant 3
|
|
36: TypePointer Function 10(int)
|
|
38: TypePointer Function 22(int)
|
|
46: TypeBool
|
|
56(PSInput): TypeStruct 7(fvec4) 8(fvec2) 9(fvec3) 10(int)
|
|
57: 10(int) Constant 3
|
|
58: TypeArray 56(PSInput) 57
|
|
59: 10(int) Constant 2
|
|
60: TypeArray 58 59
|
|
61: TypePointer Function 60
|
|
66: TypePointer Function 56(PSInput)
|
|
80: 10(int) Constant 1
|
|
81: TypeArray 10(int) 80
|
|
82: TypePointer Input 81
|
|
83(v): 82(ptr) Variable Input
|
|
84(PSInput): TypeStruct 8(fvec2) 9(fvec3) 10(int)
|
|
85: TypePointer Output 84(PSInput)
|
|
86(OutputStream): 85(ptr) Variable Output
|
|
87: TypePointer Output 7(fvec4)
|
|
88(OutputStream.Pos): 87(ptr) Variable Output
|
|
4(main): 2 Function None 3
|
|
5: Label
|
|
13(Out): 12(ptr) Variable Function
|
|
39(x): 38(ptr) Variable Function
|
|
48(y): 38(ptr) Variable Function
|
|
62(Verts): 61(ptr) Variable Function
|
|
21: 7(fvec4) CompositeExtract 20 0
|
|
25: 24(ptr) AccessChain 13(Out) 23
|
|
Store 25 21
|
|
26: 8(fvec2) CompositeExtract 20 1
|
|
29: 28(ptr) AccessChain 13(Out) 27
|
|
Store 29 26
|
|
30: 9(fvec3) CompositeExtract 20 2
|
|
33: 32(ptr) AccessChain 13(Out) 31
|
|
Store 33 30
|
|
34: 10(int) CompositeExtract 20 3
|
|
37: 36(ptr) AccessChain 13(Out) 35
|
|
Store 37 34
|
|
Store 39(x) 23
|
|
Branch 40
|
|
40: Label
|
|
LoopMerge 42 43 None
|
|
Branch 44
|
|
44: Label
|
|
45: 22(int) Load 39(x)
|
|
47: 46(bool) SLessThan 45 31
|
|
BranchConditional 47 41 42
|
|
41: Label
|
|
Store 48(y) 23
|
|
Branch 49
|
|
49: Label
|
|
LoopMerge 51 52 None
|
|
Branch 53
|
|
53: Label
|
|
54: 22(int) Load 48(y)
|
|
55: 46(bool) SLessThan 54 31
|
|
BranchConditional 55 50 51
|
|
50: Label
|
|
63: 22(int) Load 39(x)
|
|
64: 22(int) Load 48(y)
|
|
65: 11(PSInput) Load 13(Out)
|
|
67: 66(ptr) AccessChain 62(Verts) 63 64
|
|
68: 7(fvec4) CompositeExtract 65 0
|
|
69: 24(ptr) AccessChain 67 23
|
|
Store 69 68
|
|
70: 8(fvec2) CompositeExtract 65 1
|
|
71: 28(ptr) AccessChain 67 27
|
|
Store 71 70
|
|
72: 9(fvec3) CompositeExtract 65 2
|
|
73: 32(ptr) AccessChain 67 31
|
|
Store 73 72
|
|
74: 10(int) CompositeExtract 65 3
|
|
75: 36(ptr) AccessChain 67 35
|
|
Store 75 74
|
|
Branch 52
|
|
52: Label
|
|
76: 22(int) Load 48(y)
|
|
77: 22(int) IAdd 76 27
|
|
Store 48(y) 77
|
|
Branch 49
|
|
51: Label
|
|
Branch 43
|
|
43: Label
|
|
78: 22(int) Load 39(x)
|
|
79: 22(int) IAdd 78 27
|
|
Store 39(x) 79
|
|
Branch 40
|
|
42: Label
|
|
Return
|
|
FunctionEnd
|