HLSL: Wrap the entry-point; need to write 'in' args, and support 'inout' args.

This needs some render testing, but is destined to be part of master.

This also leads to a variety of other simplifications.
 - IO are global symbols, so only need one list of linkage nodes (deferred)
 - no longer need parse-context-wide 'inEntryPoint' state, entry-point is localized
 - several parts of splitting/flattening are now localized
This commit is contained in:
John Kessenich
2017-01-19 15:41:47 -07:00
parent 18adbdbbb8
commit 02467d8d94
171 changed files with 37604 additions and 32679 deletions

View File

@@ -5,9 +5,9 @@ max_vertices = 4
input primitive = lines
output primitive = triangle_strip
0:? Sequence
0:16 Function Definition: main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; (temp void)
0:16 Function Definition: @main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; (temp void)
0:16 Function Parameters:
0:16 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:16 'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:16 'outStream' (out structure{temp 4-component vector of float Position position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? Sequence
0:19 move second child to first child (temp 4-component vector of float)
@@ -16,8 +16,8 @@ output primitive = triangle_strip
0:19 Constant:
0:19 1 (const int)
0:19 color: direct index for structure (temp 4-component vector of float)
0:19 direct index (layout(location=0 ) temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:19 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:19 direct index (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:19 'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:19 Constant:
0:19 1 (const int)
0:19 Constant:
@@ -28,8 +28,8 @@ output primitive = triangle_strip
0:20 Constant:
0:20 2 (const int)
0:20 uv: direct index for structure (temp 2-component vector of float)
0:20 direct index (layout(location=0 ) temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:20 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:20 direct index (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:20 'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:20 Constant:
0:20 1 (const int)
0:20 Constant:
@@ -40,43 +40,28 @@ output primitive = triangle_strip
0:21 Constant:
0:21 0 (const int)
0:21 position: direct index for structure (temp 4-component vector of float)
0:21 direct index (layout(location=0 ) temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:21 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:21 direct index (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:21 'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:21 Constant:
0:21 1 (const int)
0:21 Constant:
0:21 0 (const int)
0:22 Sequence
0:22 Sequence
0:22 move second child to first child (temp 4-component vector of float)
0:? 'outStream_position' (out 4-component vector of float Position)
0:22 position: direct index for structure (temp 4-component vector of float)
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child (temp 4-component vector of float)
0:22 color: direct index for structure (temp 4-component vector of float)
0:22 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 0 (const int)
0:22 color: direct index for structure (temp 4-component vector of float)
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 1 (const int)
0:22 move second child to first child (temp 2-component vector of float)
0:22 uv: direct index for structure (temp 2-component vector of float)
0:22 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 1 (const int)
0:22 uv: direct index for structure (temp 2-component vector of float)
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 2 (const int)
0:22 move second child to first child (temp structure{temp 4-component vector of float Position position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 'outStream' (out structure{temp 4-component vector of float Position position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 EmitVertex (temp void)
0:16 Function Definition: main( (temp void)
0:16 Function Parameters:
0:? Sequence
0:16 move second child to first child (temp 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'vin' (temp 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:16 Function Call: @main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; (temp void)
0:? 'vin' (temp 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'outStream' (temp structure{temp 4-component vector of float Position position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? Linker Objects
0:? 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'PerVertex_out' (out block{out 4-component vector of float Position outStream_position})
Linked geometry stage:
@@ -88,9 +73,9 @@ max_vertices = 4
input primitive = lines
output primitive = triangle_strip
0:? Sequence
0:16 Function Definition: main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; (temp void)
0:16 Function Definition: @main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; (temp void)
0:16 Function Parameters:
0:16 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:16 'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:16 'outStream' (out structure{temp 4-component vector of float Position position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? Sequence
0:19 move second child to first child (temp 4-component vector of float)
@@ -99,8 +84,8 @@ output primitive = triangle_strip
0:19 Constant:
0:19 1 (const int)
0:19 color: direct index for structure (temp 4-component vector of float)
0:19 direct index (layout(location=0 ) temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:19 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:19 direct index (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:19 'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:19 Constant:
0:19 1 (const int)
0:19 Constant:
@@ -111,8 +96,8 @@ output primitive = triangle_strip
0:20 Constant:
0:20 2 (const int)
0:20 uv: direct index for structure (temp 2-component vector of float)
0:20 direct index (layout(location=0 ) temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:20 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:20 direct index (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:20 'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:20 Constant:
0:20 1 (const int)
0:20 Constant:
@@ -123,136 +108,128 @@ output primitive = triangle_strip
0:21 Constant:
0:21 0 (const int)
0:21 position: direct index for structure (temp 4-component vector of float)
0:21 direct index (layout(location=0 ) temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:21 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:21 direct index (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:21 'vin' (in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:21 Constant:
0:21 1 (const int)
0:21 Constant:
0:21 0 (const int)
0:22 Sequence
0:22 Sequence
0:22 move second child to first child (temp 4-component vector of float)
0:? 'outStream_position' (out 4-component vector of float Position)
0:22 position: direct index for structure (temp 4-component vector of float)
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 0 (const int)
0:22 move second child to first child (temp 4-component vector of float)
0:22 color: direct index for structure (temp 4-component vector of float)
0:22 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 0 (const int)
0:22 color: direct index for structure (temp 4-component vector of float)
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 1 (const int)
0:22 move second child to first child (temp 2-component vector of float)
0:22 uv: direct index for structure (temp 2-component vector of float)
0:22 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 1 (const int)
0:22 uv: direct index for structure (temp 2-component vector of float)
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 Constant:
0:22 2 (const int)
0:22 move second child to first child (temp structure{temp 4-component vector of float Position position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 'outStream' (out structure{temp 4-component vector of float Position position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 'vout' (temp structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:22 EmitVertex (temp void)
0:16 Function Definition: main( (temp void)
0:16 Function Parameters:
0:? Sequence
0:16 move second child to first child (temp 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'vin' (temp 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:16 Function Call: @main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21; (temp void)
0:? 'vin' (temp 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'outStream' (temp structure{temp 4-component vector of float Position position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? Linker Objects
0:? 'vin' (layout(location=0 ) in 2-element array of structure{temp 4-component vector of float position, temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'outStream' (layout(location=0 ) out structure{temp 4-component vector of float color, temp 2-component vector of float uv})
0:? 'PerVertex_out' (out block{out 4-component vector of float Position outStream_position})
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 52
// Id's are bound by 55
Capability Geometry
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 19 36 41 51
EntryPoint Geometry 4 "main" 48
ExecutionMode 4 InputLines
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip
ExecutionMode 4 OutputVertices 4
Name 4 "main"
Name 9 "PS_IN"
MemberName 9(PS_IN) 0 "position"
MemberName 9(PS_IN) 1 "color"
MemberName 9(PS_IN) 2 "uv"
Name 11 "vout"
Name 14 "VertexData"
MemberName 14(VertexData) 0 "position"
MemberName 14(VertexData) 1 "color"
MemberName 14(VertexData) 2 "uv"
Name 19 "vin"
Name 36 "outStream_position"
Name 39 "PS_IN"
MemberName 39(PS_IN) 0 "color"
MemberName 39(PS_IN) 1 "uv"
Name 41 "outStream"
Name 49 "PerVertex_out"
MemberName 49(PerVertex_out) 0 "outStream_position"
Name 51 "PerVertex_out"
Decorate 19(vin) Location 0
Decorate 36(outStream_position) BuiltIn Position
Decorate 41(outStream) Location 0
MemberDecorate 49(PerVertex_out) 0 BuiltIn Position
Decorate 49(PerVertex_out) Block
Name 9 "VertexData"
MemberName 9(VertexData) 0 "position"
MemberName 9(VertexData) 1 "color"
MemberName 9(VertexData) 2 "uv"
Name 14 "PS_IN"
MemberName 14(PS_IN) 0 "position"
MemberName 14(PS_IN) 1 "color"
MemberName 14(PS_IN) 2 "uv"
Name 19 "@main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21;"
Name 17 "vin"
Name 18 "outStream"
Name 21 "PS_IN"
MemberName 21(PS_IN) 0 "position"
MemberName 21(PS_IN) 1 "color"
MemberName 21(PS_IN) 2 "uv"
Name 23 "vout"
Name 46 "vin"
Name 48 "vin"
Name 50 "outStream"
Name 51 "param"
Name 53 "param"
MemberDecorate 14(PS_IN) 0 BuiltIn Position
Decorate 48(vin) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeVector 6(float) 2
9(PS_IN): TypeStruct 7(fvec4) 7(fvec4) 8(fvec2)
10: TypePointer Function 9(PS_IN)
12: TypeInt 32 1
13: 12(int) Constant 1
14(VertexData): TypeStruct 7(fvec4) 7(fvec4) 8(fvec2)
15: TypeInt 32 0
16: 15(int) Constant 2
17: TypeArray 14(VertexData) 16
18: TypePointer Input 17
19(vin): 18(ptr) Variable Input
20: TypePointer Input 7(fvec4)
23: TypePointer Function 7(fvec4)
25: 12(int) Constant 2
26: TypePointer Input 8(fvec2)
29: TypePointer Function 8(fvec2)
31: 12(int) Constant 0
35: TypePointer Output 7(fvec4)
36(outStream_position): 35(ptr) Variable Output
39(PS_IN): TypeStruct 7(fvec4) 8(fvec2)
40: TypePointer Output 39(PS_IN)
41(outStream): 40(ptr) Variable Output
47: TypePointer Output 8(fvec2)
49(PerVertex_out): TypeStruct 7(fvec4)
50: TypePointer Output 49(PerVertex_out)
51(PerVertex_out): 50(ptr) Variable Output
9(VertexData): TypeStruct 7(fvec4) 7(fvec4) 8(fvec2)
10: TypeInt 32 0
11: 10(int) Constant 2
12: TypeArray 9(VertexData) 11
13: TypePointer Function 12
14(PS_IN): TypeStruct 7(fvec4) 7(fvec4) 8(fvec2)
15: TypePointer Function 14(PS_IN)
16: TypeFunction 2 13(ptr) 15(ptr)
21(PS_IN): TypeStruct 7(fvec4) 7(fvec4) 8(fvec2)
22: TypePointer Function 21(PS_IN)
24: TypeInt 32 1
25: 24(int) Constant 1
26: TypePointer Function 7(fvec4)
30: 24(int) Constant 2
31: TypePointer Function 8(fvec2)
35: 24(int) Constant 0
47: TypePointer Input 12
48(vin): 47(ptr) Variable Input
4(main): 2 Function None 3
5: Label
11(vout): 10(ptr) Variable Function
21: 20(ptr) AccessChain 19(vin) 13 13
22: 7(fvec4) Load 21
24: 23(ptr) AccessChain 11(vout) 13
Store 24 22
27: 26(ptr) AccessChain 19(vin) 13 25
28: 8(fvec2) Load 27
30: 29(ptr) AccessChain 11(vout) 25
Store 30 28
32: 20(ptr) AccessChain 19(vin) 13 31
33: 7(fvec4) Load 32
34: 23(ptr) AccessChain 11(vout) 31
46(vin): 13(ptr) Variable Function
50(outStream): 15(ptr) Variable Function
51(param): 13(ptr) Variable Function
53(param): 15(ptr) Variable Function
49: 12 Load 48(vin)
Store 46(vin) 49
52: 12 Load 46(vin)
Store 51(param) 52
54: 2 FunctionCall 19(@main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21;) 51(param) 53(param)
Return
FunctionEnd
19(@main(struct-VertexData-vf4-vf4-vf21[2];struct-PS_IN-vf4-vf4-vf21;): 2 Function None 16
17(vin): 13(ptr) FunctionParameter
18(outStream): 15(ptr) FunctionParameter
20: Label
23(vout): 22(ptr) Variable Function
27: 26(ptr) AccessChain 17(vin) 25 25
28: 7(fvec4) Load 27
29: 26(ptr) AccessChain 23(vout) 25
Store 29 28
32: 31(ptr) AccessChain 17(vin) 25 30
33: 8(fvec2) Load 32
34: 31(ptr) AccessChain 23(vout) 30
Store 34 33
37: 23(ptr) AccessChain 11(vout) 31
38: 7(fvec4) Load 37
Store 36(outStream_position) 38
42: 23(ptr) AccessChain 11(vout) 13
43: 7(fvec4) Load 42
44: 35(ptr) AccessChain 41(outStream) 31
Store 44 43
45: 29(ptr) AccessChain 11(vout) 25
46: 8(fvec2) Load 45
48: 47(ptr) AccessChain 41(outStream) 13
Store 48 46
36: 26(ptr) AccessChain 17(vin) 25 35
37: 7(fvec4) Load 36
38: 26(ptr) AccessChain 23(vout) 35
Store 38 37
39: 21(PS_IN) Load 23(vout)
40: 7(fvec4) CompositeExtract 39 0
41: 26(ptr) AccessChain 18(outStream) 35
Store 41 40
42: 7(fvec4) CompositeExtract 39 1
43: 26(ptr) AccessChain 18(outStream) 25
Store 43 42
44: 8(fvec2) CompositeExtract 39 2
45: 31(ptr) AccessChain 18(outStream) 30
Store 45 44
EmitVertex
Return
FunctionEnd