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,18 +2,29 @@ hlsl.max.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
0:2 Function Definition: @PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input1' (layout(location=0 ) in 4-component vector of float)
0:2 'input2' (layout(location=1 ) in 4-component vector of float)
0:2 'input1' (in 4-component vector of float)
0:2 'input2' (in 4-component vector of float)
0:? Sequence
0:3 Sequence
0:3 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:3 max (temp 4-component vector of float)
0:3 'input1' (layout(location=0 ) in 4-component vector of float)
0:3 'input2' (layout(location=1 ) in 4-component vector of float)
0:3 Branch: Return
0:3 Branch: Return with expression
0:3 max (temp 4-component vector of float)
0:3 'input1' (in 4-component vector of float)
0:3 'input2' (in 4-component vector of float)
0:2 Function Definition: PixelShaderFunction( (temp void)
0:2 Function Parameters:
0:? Sequence
0:2 move second child to first child (temp 4-component vector of float)
0:? 'input1' (temp 4-component vector of float)
0:? 'input1' (layout(location=0 ) in 4-component vector of float)
0:2 move second child to first child (temp 4-component vector of float)
0:? 'input2' (temp 4-component vector of float)
0:? 'input2' (layout(location=1 ) in 4-component vector of float)
0:2 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:2 Function Call: @PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
0:? 'input1' (temp 4-component vector of float)
0:? 'input2' (temp 4-component vector of float)
0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input1' (layout(location=0 ) in 4-component vector of float)
@@ -26,18 +37,29 @@ Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
0:2 Function Definition: @PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input1' (layout(location=0 ) in 4-component vector of float)
0:2 'input2' (layout(location=1 ) in 4-component vector of float)
0:2 'input1' (in 4-component vector of float)
0:2 'input2' (in 4-component vector of float)
0:? Sequence
0:3 Sequence
0:3 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:3 max (temp 4-component vector of float)
0:3 'input1' (layout(location=0 ) in 4-component vector of float)
0:3 'input2' (layout(location=1 ) in 4-component vector of float)
0:3 Branch: Return
0:3 Branch: Return with expression
0:3 max (temp 4-component vector of float)
0:3 'input1' (in 4-component vector of float)
0:3 'input2' (in 4-component vector of float)
0:2 Function Definition: PixelShaderFunction( (temp void)
0:2 Function Parameters:
0:? Sequence
0:2 move second child to first child (temp 4-component vector of float)
0:? 'input1' (temp 4-component vector of float)
0:? 'input1' (layout(location=0 ) in 4-component vector of float)
0:2 move second child to first child (temp 4-component vector of float)
0:? 'input2' (temp 4-component vector of float)
0:? 'input2' (layout(location=1 ) in 4-component vector of float)
0:2 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:2 Function Call: @PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
0:? 'input1' (temp 4-component vector of float)
0:? 'input2' (temp 4-component vector of float)
0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input1' (layout(location=0 ) in 4-component vector of float)
@@ -45,34 +67,62 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 17
// Id's are bound by 33
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 9 11 13
EntryPoint Fragment 4 "PixelShaderFunction" 21 24 27
ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction"
Name 9 "@entryPointOutput"
Name 11 "input1"
Name 13 "input2"
Decorate 9(@entryPointOutput) Location 0
Decorate 11(input1) Location 0
Decorate 13(input2) Location 1
Name 12 "@PixelShaderFunction(vf4;vf4;"
Name 10 "input1"
Name 11 "input2"
Name 19 "input1"
Name 21 "input1"
Name 23 "input2"
Name 24 "input2"
Name 27 "@entryPointOutput"
Name 28 "param"
Name 30 "param"
Decorate 21(input1) Location 0
Decorate 24(input2) Location 1
Decorate 27(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Output 7(fvec4)
9(@entryPointOutput): 8(ptr) Variable Output
10: TypePointer Input 7(fvec4)
11(input1): 10(ptr) Variable Input
13(input2): 10(ptr) Variable Input
8: TypePointer Function 7(fvec4)
9: TypeFunction 7(fvec4) 8(ptr) 8(ptr)
20: TypePointer Input 7(fvec4)
21(input1): 20(ptr) Variable Input
24(input2): 20(ptr) Variable Input
26: TypePointer Output 7(fvec4)
27(@entryPointOutput): 26(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
12: 7(fvec4) Load 11(input1)
14: 7(fvec4) Load 13(input2)
15: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 12 14
Store 9(@entryPointOutput) 15
19(input1): 8(ptr) Variable Function
23(input2): 8(ptr) Variable Function
28(param): 8(ptr) Variable Function
30(param): 8(ptr) Variable Function
22: 7(fvec4) Load 21(input1)
Store 19(input1) 22
25: 7(fvec4) Load 24(input2)
Store 23(input2) 25
29: 7(fvec4) Load 19(input1)
Store 28(param) 29
31: 7(fvec4) Load 23(input2)
Store 30(param) 31
32: 7(fvec4) FunctionCall 12(@PixelShaderFunction(vf4;vf4;) 28(param) 30(param)
Store 27(@entryPointOutput) 32
Return
FunctionEnd
12(@PixelShaderFunction(vf4;vf4;): 7(fvec4) Function None 9
10(input1): 8(ptr) FunctionParameter
11(input2): 8(ptr) FunctionParameter
13: Label
14: 7(fvec4) Load 10(input1)
15: 7(fvec4) Load 11(input2)
16: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 14 15
ReturnValue 16
FunctionEnd