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

@ -2,7 +2,7 @@ hlsl.logical.unary.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: main( (temp structure{temp 4-component vector of float Color})
0:12 Function Definition: @main( (temp structure{temp 4-component vector of float Color})
0:12 Function Parameters:
0:? Sequence
0:13 Negate conditional (temp bool)
@ -71,15 +71,18 @@ gl_FragCoord origin is upper left
0:25 1.000000
0:25 1.000000
0:25 1.000000
0:26 Sequence
0:26 Sequence
0:26 move second child to first child (temp 4-component vector of float)
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:26 Color: direct index for structure (temp 4-component vector of float)
0:26 'psout' (temp structure{temp 4-component vector of float Color})
0:26 Constant:
0:26 0 (const int)
0:26 Branch: Return
0:26 Branch: Return with expression
0:26 'psout' (temp structure{temp 4-component vector of float Color})
0:12 Function Definition: main( (temp void)
0:12 Function Parameters:
0:? Sequence
0:12 Sequence
0:12 move second child to first child (temp 4-component vector of float)
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:12 Color: direct index for structure (temp 4-component vector of float)
0:12 Function Call: @main( (temp structure{temp 4-component vector of float Color})
0:12 Constant:
0:12 0 (const int)
0:? Linker Objects
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
@ -91,7 +94,7 @@ Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:12 Function Definition: main( (temp structure{temp 4-component vector of float Color})
0:12 Function Definition: @main( (temp structure{temp 4-component vector of float Color})
0:12 Function Parameters:
0:? Sequence
0:13 Negate conditional (temp bool)
@ -160,133 +163,143 @@ gl_FragCoord origin is upper left
0:25 1.000000
0:25 1.000000
0:25 1.000000
0:26 Sequence
0:26 Sequence
0:26 move second child to first child (temp 4-component vector of float)
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:26 Color: direct index for structure (temp 4-component vector of float)
0:26 'psout' (temp structure{temp 4-component vector of float Color})
0:26 Constant:
0:26 0 (const int)
0:26 Branch: Return
0:26 Branch: Return with expression
0:26 'psout' (temp structure{temp 4-component vector of float Color})
0:12 Function Definition: main( (temp void)
0:12 Function Parameters:
0:? Sequence
0:12 Sequence
0:12 move second child to first child (temp 4-component vector of float)
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:12 Color: direct index for structure (temp 4-component vector of float)
0:12 Function Call: @main( (temp structure{temp 4-component vector of float Color})
0:12 Constant:
0:12 0 (const int)
0:? Linker Objects
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int ival, layout(offset=16 ) uniform 4-component vector of int ival4, layout(offset=32 ) uniform float fval, layout(offset=48 ) uniform 4-component vector of float fval4})
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 77
// Id's are bound by 82
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 73
EntryPoint Fragment 4 "main" 79
ExecutionMode 4 OriginUpperLeft
Name 4 "main"
Name 10 "$Global"
MemberName 10($Global) 0 "ival"
MemberName 10($Global) 1 "ival4"
MemberName 10($Global) 2 "fval"
MemberName 10($Global) 3 "fval4"
Name 12 ""
Name 65 "PS_OUTPUT"
MemberName 65(PS_OUTPUT) 0 "Color"
Name 67 "psout"
Name 73 "Color"
MemberDecorate 10($Global) 0 Offset 0
MemberDecorate 10($Global) 1 Offset 16
MemberDecorate 10($Global) 2 Offset 32
MemberDecorate 10($Global) 3 Offset 48
Decorate 10($Global) Block
Decorate 12 DescriptorSet 0
Decorate 73(Color) Location 0
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
Name 10 "@main("
Name 14 "$Global"
MemberName 14($Global) 0 "ival"
MemberName 14($Global) 1 "ival4"
MemberName 14($Global) 2 "fval"
MemberName 14($Global) 3 "fval4"
Name 16 ""
Name 70 "psout"
Name 79 "Color"
MemberDecorate 14($Global) 0 Offset 0
MemberDecorate 14($Global) 1 Offset 16
MemberDecorate 14($Global) 2 Offset 32
MemberDecorate 14($Global) 3 Offset 48
Decorate 14($Global) Block
Decorate 16 DescriptorSet 0
Decorate 79(Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeVector 6(int) 4
8: TypeFloat 32
9: TypeVector 8(float) 4
10($Global): TypeStruct 6(int) 7(ivec4) 8(float) 9(fvec4)
11: TypePointer Uniform 10($Global)
12: 11(ptr) Variable Uniform
13: 6(int) Constant 0
14: TypePointer Uniform 6(int)
17: TypeBool
18: TypeInt 32 0
19: 18(int) Constant 0
22: 6(int) Constant 1
23: TypePointer Uniform 7(ivec4)
26: TypeVector 17(bool) 4
27: TypeVector 18(int) 4
28: 27(ivec4) ConstantComposite 19 19 19 19
31: 6(int) Constant 2
32: TypePointer Uniform 8(float)
35: 8(float) Constant 0
38: 6(int) Constant 3
39: TypePointer Uniform 9(fvec4)
42: 9(fvec4) ConstantComposite 35 35 35 35
65(PS_OUTPUT): TypeStruct 9(fvec4)
66: TypePointer Function 65(PS_OUTPUT)
68: 8(float) Constant 1065353216
69: 9(fvec4) ConstantComposite 68 68 68 68
70: TypePointer Function 9(fvec4)
72: TypePointer Output 9(fvec4)
73(Color): 72(ptr) Variable Output
6: TypeFloat 32
7: TypeVector 6(float) 4
8(PS_OUTPUT): TypeStruct 7(fvec4)
9: TypeFunction 8(PS_OUTPUT)
12: TypeInt 32 1
13: TypeVector 12(int) 4
14($Global): TypeStruct 12(int) 13(ivec4) 6(float) 7(fvec4)
15: TypePointer Uniform 14($Global)
16: 15(ptr) Variable Uniform
17: 12(int) Constant 0
18: TypePointer Uniform 12(int)
21: TypeBool
22: TypeInt 32 0
23: 22(int) Constant 0
26: 12(int) Constant 1
27: TypePointer Uniform 13(ivec4)
30: TypeVector 21(bool) 4
31: TypeVector 22(int) 4
32: 31(ivec4) ConstantComposite 23 23 23 23
35: 12(int) Constant 2
36: TypePointer Uniform 6(float)
39: 6(float) Constant 0
42: 12(int) Constant 3
43: TypePointer Uniform 7(fvec4)
46: 7(fvec4) ConstantComposite 39 39 39 39
69: TypePointer Function 8(PS_OUTPUT)
71: 6(float) Constant 1065353216
72: 7(fvec4) ConstantComposite 71 71 71 71
73: TypePointer Function 7(fvec4)
78: TypePointer Output 7(fvec4)
79(Color): 78(ptr) Variable Output
4(main): 2 Function None 3
5: Label
67(psout): 66(ptr) Variable Function
15: 14(ptr) AccessChain 12 13
16: 6(int) Load 15
20: 17(bool) INotEqual 16 19
21: 17(bool) LogicalNot 20
24: 23(ptr) AccessChain 12 22
25: 7(ivec4) Load 24
29: 26(bvec4) INotEqual 25 28
30: 26(bvec4) LogicalNot 29
33: 32(ptr) AccessChain 12 31
34: 8(float) Load 33
36: 17(bool) FOrdNotEqual 34 35
37: 17(bool) LogicalNot 36
40: 39(ptr) AccessChain 12 38
41: 9(fvec4) Load 40
43: 26(bvec4) FOrdNotEqual 41 42
44: 26(bvec4) LogicalNot 43
45: 14(ptr) AccessChain 12 13
46: 6(int) Load 45
SelectionMerge 48 None
BranchConditional 46 47 48
47: Label
Branch 48
48: Label
49: 32(ptr) AccessChain 12 31
50: 8(float) Load 49
80:8(PS_OUTPUT) FunctionCall 10(@main()
81: 7(fvec4) CompositeExtract 80 0
Store 79(Color) 81
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
70(psout): 69(ptr) Variable Function
19: 18(ptr) AccessChain 16 17
20: 12(int) Load 19
24: 21(bool) INotEqual 20 23
25: 21(bool) LogicalNot 24
28: 27(ptr) AccessChain 16 26
29: 13(ivec4) Load 28
33: 30(bvec4) INotEqual 29 32
34: 30(bvec4) LogicalNot 33
37: 36(ptr) AccessChain 16 35
38: 6(float) Load 37
40: 21(bool) FOrdNotEqual 38 39
41: 21(bool) LogicalNot 40
44: 43(ptr) AccessChain 16 42
45: 7(fvec4) Load 44
47: 30(bvec4) FOrdNotEqual 45 46
48: 30(bvec4) LogicalNot 47
49: 18(ptr) AccessChain 16 17
50: 12(int) Load 49
SelectionMerge 52 None
BranchConditional 50 51 52
51: Label
Branch 52
52: Label
53: 14(ptr) AccessChain 12 13
54: 6(int) Load 53
55: 17(bool) INotEqual 54 19
56: 17(bool) LogicalNot 55
SelectionMerge 58 None
BranchConditional 56 57 58
57: Label
Branch 58
58: Label
59: 32(ptr) AccessChain 12 31
60: 8(float) Load 59
61: 17(bool) FOrdNotEqual 60 35
62: 17(bool) LogicalNot 61
SelectionMerge 64 None
BranchConditional 62 63 64
63: Label
Branch 64
64: Label
71: 70(ptr) AccessChain 67(psout) 13
Store 71 69
74: 70(ptr) AccessChain 67(psout) 13
75: 9(fvec4) Load 74
Store 73(Color) 75
Return
53: 36(ptr) AccessChain 16 35
54: 6(float) Load 53
SelectionMerge 56 None
BranchConditional 54 55 56
55: Label
Branch 56
56: Label
57: 18(ptr) AccessChain 16 17
58: 12(int) Load 57
59: 21(bool) INotEqual 58 23
60: 21(bool) LogicalNot 59
SelectionMerge 62 None
BranchConditional 60 61 62
61: Label
Branch 62
62: Label
63: 36(ptr) AccessChain 16 35
64: 6(float) Load 63
65: 21(bool) FOrdNotEqual 64 39
66: 21(bool) LogicalNot 65
SelectionMerge 68 None
BranchConditional 66 67 68
67: Label
Branch 68
68: Label
74: 73(ptr) AccessChain 70(psout) 17
Store 74 72
75:8(PS_OUTPUT) Load 70(psout)
ReturnValue 75
FunctionEnd