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

@ -9,39 +9,42 @@ gl_FragCoord origin is upper left
0:7 'a3' (in 4-component vector of float)
0:7 'a4' (in 4-component vector of float)
0:? Sequence
0:8 Branch: Return with expression
0:8 add (temp 4-component vector of float)
0:8 Sequence
0:8 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (out 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 'a1' (in 4-component vector of float)
0:8 component-wise multiply (temp 4-component vector of float)
0:8 'a2' (in 4-component vector of float)
0:8 'a3' (in 4-component vector of float)
0:8 'a4' (in 4-component vector of float)
0:? Construct vec4 (temp 4-component vector of float)
0:8 component-wise multiply (temp 3-component vector of float)
0:8 vector swizzle (temp 3-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 'a1' (in 4-component vector of float)
0:8 Sequence
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 vector swizzle (temp 3-component vector of float)
0:8 'a2' (in 4-component vector of float)
0:8 Sequence
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 direct index (temp float)
0:8 'a3' (in 4-component vector of float)
0:8 Constant:
0:8 3 (const int)
0:8 component-wise multiply (temp 4-component vector of float)
0:8 'a2' (in 4-component vector of float)
0:8 'a3' (in 4-component vector of float)
0:8 'a4' (in 4-component vector of float)
0:? Construct vec4 (temp 4-component vector of float)
0:8 component-wise multiply (temp 3-component vector of float)
0:8 vector swizzle (temp 3-component vector of float)
0:8 'a1' (in 4-component vector of float)
0:8 Sequence
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 vector swizzle (temp 3-component vector of float)
0:8 'a2' (in 4-component vector of float)
0:8 Sequence
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 direct index (temp float)
0:8 'a3' (in 4-component vector of float)
0:8 Constant:
0:8 3 (const int)
0:8 Branch: Return
0:? Linker Objects
@ -58,88 +61,95 @@ gl_FragCoord origin is upper left
0:7 'a3' (in 4-component vector of float)
0:7 'a4' (in 4-component vector of float)
0:? Sequence
0:8 Branch: Return with expression
0:8 add (temp 4-component vector of float)
0:8 Sequence
0:8 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (out 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 'a1' (in 4-component vector of float)
0:8 component-wise multiply (temp 4-component vector of float)
0:8 'a2' (in 4-component vector of float)
0:8 'a3' (in 4-component vector of float)
0:8 'a4' (in 4-component vector of float)
0:? Construct vec4 (temp 4-component vector of float)
0:8 component-wise multiply (temp 3-component vector of float)
0:8 vector swizzle (temp 3-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 'a1' (in 4-component vector of float)
0:8 Sequence
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 vector swizzle (temp 3-component vector of float)
0:8 'a2' (in 4-component vector of float)
0:8 Sequence
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 direct index (temp float)
0:8 'a3' (in 4-component vector of float)
0:8 Constant:
0:8 3 (const int)
0:8 component-wise multiply (temp 4-component vector of float)
0:8 'a2' (in 4-component vector of float)
0:8 'a3' (in 4-component vector of float)
0:8 'a4' (in 4-component vector of float)
0:? Construct vec4 (temp 4-component vector of float)
0:8 component-wise multiply (temp 3-component vector of float)
0:8 vector swizzle (temp 3-component vector of float)
0:8 'a1' (in 4-component vector of float)
0:8 Sequence
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 vector swizzle (temp 3-component vector of float)
0:8 'a2' (in 4-component vector of float)
0:8 Sequence
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 1 (const int)
0:8 Constant:
0:8 2 (const int)
0:8 direct index (temp float)
0:8 'a3' (in 4-component vector of float)
0:8 Constant:
0:8 3 (const int)
0:8 Branch: Return
0:? Linker Objects
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 37
// Id's are bound by 39
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 9 11 13 17
EntryPoint Fragment 4 "PixelShaderFunction" 9 11 13 15 19
ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction"
Name 9 "a1"
Name 11 "a2"
Name 13 "a3"
Name 17 "a4"
Name 9 "@entryPointOutput"
Name 11 "a1"
Name 13 "a2"
Name 15 "a3"
Name 19 "a4"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Input 7(fvec4)
9(a1): 8(ptr) Variable Input
11(a2): 8(ptr) Variable Input
13(a3): 8(ptr) Variable Input
17(a4): 8(ptr) Variable Input
20: TypeVector 6(float) 3
26: TypeInt 32 0
27: 26(int) Constant 3
28: TypePointer Input 6(float)
8: TypePointer Output 7(fvec4)
9(@entryPointOutput): 8(ptr) Variable Output
10: TypePointer Input 7(fvec4)
11(a1): 10(ptr) Variable Input
13(a2): 10(ptr) Variable Input
15(a3): 10(ptr) Variable Input
19(a4): 10(ptr) Variable Input
22: TypeVector 6(float) 3
28: TypeInt 32 0
29: 28(int) Constant 3
30: TypePointer Input 6(float)
4(PixelShaderFunction): 2 Function None 3
5: Label
10: 7(fvec4) Load 9(a1)
12: 7(fvec4) Load 11(a2)
14: 7(fvec4) Load 13(a3)
15: 7(fvec4) FMul 12 14
16: 7(fvec4) FAdd 10 15
18: 7(fvec4) Load 17(a4)
19: 7(fvec4) FAdd 16 18
21: 7(fvec4) Load 9(a1)
22: 20(fvec3) VectorShuffle 21 21 0 1 2
23: 7(fvec4) Load 11(a2)
24: 20(fvec3) VectorShuffle 23 23 0 1 2
25: 20(fvec3) FMul 22 24
29: 28(ptr) AccessChain 13(a3) 27
30: 6(float) Load 29
31: 6(float) CompositeExtract 25 0
32: 6(float) CompositeExtract 25 1
33: 6(float) CompositeExtract 25 2
34: 7(fvec4) CompositeConstruct 31 32 33 30
35: 7(fvec4) FAdd 19 34
ReturnValue 35
12: 7(fvec4) Load 11(a1)
14: 7(fvec4) Load 13(a2)
16: 7(fvec4) Load 15(a3)
17: 7(fvec4) FMul 14 16
18: 7(fvec4) FAdd 12 17
20: 7(fvec4) Load 19(a4)
21: 7(fvec4) FAdd 18 20
23: 7(fvec4) Load 11(a1)
24: 22(fvec3) VectorShuffle 23 23 0 1 2
25: 7(fvec4) Load 13(a2)
26: 22(fvec3) VectorShuffle 25 25 0 1 2
27: 22(fvec3) FMul 24 26
31: 30(ptr) AccessChain 15(a3) 29
32: 6(float) Load 31
33: 6(float) CompositeExtract 27 0
34: 6(float) CompositeExtract 27 1
35: 6(float) CompositeExtract 27 2
36: 7(fvec4) CompositeConstruct 33 34 35 32
37: 7(fvec4) FAdd 21 36
Store 9(@entryPointOutput) 37
Return
FunctionEnd