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,16 +2,23 @@ hlsl.sin.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
0:2 Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' (layout(location=0 ) in 4-component vector of float)
0:2 'input' (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 sine (temp 4-component vector of float)
0:3 'input' (layout(location=0 ) in 4-component vector of float)
0:3 Branch: Return
0:3 Branch: Return with expression
0:3 sine (temp 4-component vector of float)
0:3 'input' (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:? 'input' (temp 4-component vector of float)
0:? 'input' (layout(location=0 ) 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; (temp 4-component vector of float)
0:? 'input' (temp 4-component vector of float)
0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input' (layout(location=0 ) in 4-component vector of float)
@@ -23,46 +30,71 @@ Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
0:2 Function Definition: @PixelShaderFunction(vf4; (temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' (layout(location=0 ) in 4-component vector of float)
0:2 'input' (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 sine (temp 4-component vector of float)
0:3 'input' (layout(location=0 ) in 4-component vector of float)
0:3 Branch: Return
0:3 Branch: Return with expression
0:3 sine (temp 4-component vector of float)
0:3 'input' (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:? 'input' (temp 4-component vector of float)
0:? 'input' (layout(location=0 ) 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; (temp 4-component vector of float)
0:? 'input' (temp 4-component vector of float)
0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input' (layout(location=0 ) in 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 15
// Id's are bound by 26
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 9 11
EntryPoint Fragment 4 "PixelShaderFunction" 19 22
ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction"
Name 9 "@entryPointOutput"
Name 11 "input"
Decorate 9(@entryPointOutput) Location 0
Decorate 11(input) Location 0
Name 11 "@PixelShaderFunction(vf4;"
Name 10 "input"
Name 17 "input"
Name 19 "input"
Name 22 "@entryPointOutput"
Name 23 "param"
Decorate 19(input) Location 0
Decorate 22(@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(input): 10(ptr) Variable Input
8: TypePointer Function 7(fvec4)
9: TypeFunction 7(fvec4) 8(ptr)
18: TypePointer Input 7(fvec4)
19(input): 18(ptr) Variable Input
21: TypePointer Output 7(fvec4)
22(@entryPointOutput): 21(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
12: 7(fvec4) Load 11(input)
13: 7(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 12
Store 9(@entryPointOutput) 13
17(input): 8(ptr) Variable Function
23(param): 8(ptr) Variable Function
20: 7(fvec4) Load 19(input)
Store 17(input) 20
24: 7(fvec4) Load 17(input)
Store 23(param) 24
25: 7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 23(param)
Store 22(@entryPointOutput) 25
Return
FunctionEnd
11(@PixelShaderFunction(vf4;): 7(fvec4) Function None 9
10(input): 8(ptr) FunctionParameter
12: Label
13: 7(fvec4) Load 10(input)
14: 7(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 13
ReturnValue 14
FunctionEnd