HLSL: Emulate write-to-output on return-from-entry-point, for return value.

This fixes issue #487 and #480.
It also correctly handles output parameters from the entry point.
This commit is contained in:
John Kessenich 2016-08-28 15:00:23 -06:00
parent 81cd764b5f
commit 6a70eb7161
91 changed files with 5158 additions and 4130 deletions

View file

@ -22,8 +22,11 @@ gl_FragCoord origin is upper left
0:40 's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
0:40 Constant:
0:40 7 (const int)
0:42 Branch: Return with expression
0:42 'input' (in 4-component vector of float)
0:42 Sequence
0:42 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (out 4-component vector of float)
0:42 'input' (in 4-component vector of float)
0:42 Branch: Return
0:? Linker Objects
0:? 's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
0:? 's2' (global structure{temp 4-component vector of float i})
@ -54,8 +57,11 @@ gl_FragCoord origin is upper left
0:40 's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
0:40 Constant:
0:40 7 (const int)
0:42 Branch: Return with expression
0:42 'input' (in 4-component vector of float)
0:42 Sequence
0:42 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (out 4-component vector of float)
0:42 'input' (in 4-component vector of float)
0:42 Branch: Return
0:? Linker Objects
0:? 's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
0:? 's2' (global structure{temp 4-component vector of float i})
@ -65,12 +71,12 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 44
// Id's are bound by 46
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 34
EntryPoint Fragment 4 "PixelShaderFunction" 34 36
ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction"
Name 8 "FS"
@ -89,21 +95,22 @@ gl_FragCoord origin is upper left
MemberName 25 6 "ff3"
MemberName 25 7 "ff4"
Name 27 "s4"
Name 34 "input"
Name 37 "myS"
MemberName 37(myS) 0 "b"
MemberName 37(myS) 1 "c"
MemberName 37(myS) 2 "a"
MemberName 37(myS) 3 "d"
Name 39 "s1"
Name 42 "ff5"
Name 43 "ff6"
Name 34 "@entryPointOutput"
Name 36 "input"
Name 39 "myS"
MemberName 39(myS) 0 "b"
MemberName 39(myS) 1 "c"
MemberName 39(myS) 2 "a"
MemberName 39(myS) 3 "d"
Name 41 "s1"
Name 44 "ff5"
Name 45 "ff6"
MemberDecorate 25 4 BuiltIn FrontFacing
MemberDecorate 25 7 BuiltIn FragCoord
Decorate 42(ff5) Offset 20
Decorate 42(ff5) Binding 5
Decorate 43(ff6) Offset 36
Decorate 43(ff6) Binding 8
Decorate 44(ff5) Offset 20
Decorate 44(ff5) Binding 5
Decorate 45(ff6) Offset 36
Decorate 45(ff6) Binding 8
2: TypeVoid
3: TypeFunction 2
6: TypeBool
@ -123,15 +130,17 @@ gl_FragCoord origin is upper left
27(s4): 26(ptr) Variable Private
28: 22(int) Constant 7
29: TypePointer Private 18(fvec4)
33: TypePointer Input 18(fvec4)
34(input): 33(ptr) Variable Input
37(myS): TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
38: TypePointer Private 37(myS)
39(s1): 38(ptr) Variable Private
40: TypeVector 17(float) 3
41: TypePointer Private 40(fvec3)
42(ff5): 41(ptr) Variable Private
43(ff6): 41(ptr) Variable Private
33: TypePointer Output 18(fvec4)
34(@entryPointOutput): 33(ptr) Variable Output
35: TypePointer Input 18(fvec4)
36(input): 35(ptr) Variable Input
39(myS): TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
40: TypePointer Private 39(myS)
41(s1): 40(ptr) Variable Private
42: TypeVector 17(float) 3
43: TypePointer Private 42(fvec3)
44(ff5): 43(ptr) Variable Private
45(ff6): 43(ptr) Variable Private
4(PixelShaderFunction): 2 Function None 3
5: Label
10(s3): 9(ptr) Variable Function
@ -145,6 +154,7 @@ gl_FragCoord origin is upper left
31: 18(fvec4) Load 30
32: 29(ptr) AccessChain 21(s2) 23
Store 32 31
35: 18(fvec4) Load 34(input)
ReturnValue 35
37: 18(fvec4) Load 36(input)
Store 34(@entryPointOutput) 37
Return
FunctionEnd