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

@ -51,12 +51,15 @@ Shader version: 450
0:176 'inF2' (in 4-component vector of float)
0:176 'inI0' (in 4-component vector of int)
0:? Sequence
0:217 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:217 Sequence
0:217 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (out 4-component vector of float)
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:217 Branch: Return
0:233 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
0:226 Function Parameters:
0:226 'inF0' (in 2X2 matrix of float)
@ -180,12 +183,15 @@ Shader version: 450
0:176 'inF2' (in 4-component vector of float)
0:176 'inI0' (in 4-component vector of int)
0:? Sequence
0:217 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:217 Sequence
0:217 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (out 4-component vector of float)
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:217 Branch: Return
0:233 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
0:226 Function Parameters:
0:226 'inF0' (in 2X2 matrix of float)
@ -255,12 +261,12 @@ Shader version: 450
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 119
// Id's are bound by 121
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "VertexShaderFunction"
EntryPoint Vertex 4 "VertexShaderFunction" 85
Name 4 "VertexShaderFunction"
Name 15 "VertexShaderFunctionS(f1;f1;f1;i1;"
Name 11 "inF0"
@ -294,18 +300,19 @@ Shader version: 450
Name 65 "inF0"
Name 66 "inF1"
Name 67 "inF2"
Name 101 "gs_ua"
Name 102 "gs_ub"
Name 103 "gs_uc"
Name 106 "gs_ua2"
Name 107 "gs_ub2"
Name 108 "gs_uc2"
Name 111 "gs_ua3"
Name 112 "gs_ub3"
Name 113 "gs_uc3"
Name 116 "gs_ua4"
Name 117 "gs_ub4"
Name 118 "gs_uc4"
Name 85 "@entryPointOutput"
Name 103 "gs_ua"
Name 104 "gs_ub"
Name 105 "gs_uc"
Name 108 "gs_ua2"
Name 109 "gs_ub2"
Name 110 "gs_uc2"
Name 113 "gs_ua3"
Name 114 "gs_ub3"
Name 115 "gs_uc3"
Name 118 "gs_ua4"
Name 119 "gs_ub4"
Name 120 "gs_uc4"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@ -339,37 +346,40 @@ Shader version: 450
77: 23(fvec2) ConstantComposite 75 76
80: 6(float) Constant 1077936128
81: 34(fvec3) ConstantComposite 75 76 80
84: 6(float) Constant 1082130432
85: 61(fvec4) ConstantComposite 75 76 80 84
87: 23(fvec2) ConstantComposite 76 76
88: 45 ConstantComposite 87 87
91: 34(fvec3) ConstantComposite 80 80 80
92: 53 ConstantComposite 91 91 91
95: 61(fvec4) ConstantComposite 84 84 84 84
96: 62 ConstantComposite 95 95 95 95
99: TypeInt 32 0
100: TypePointer Private 99(int)
101(gs_ua): 100(ptr) Variable Private
102(gs_ub): 100(ptr) Variable Private
103(gs_uc): 100(ptr) Variable Private
104: TypeVector 99(int) 2
105: TypePointer Private 104(ivec2)
106(gs_ua2): 105(ptr) Variable Private
107(gs_ub2): 105(ptr) Variable Private
108(gs_uc2): 105(ptr) Variable Private
109: TypeVector 99(int) 3
110: TypePointer Private 109(ivec3)
111(gs_ua3): 110(ptr) Variable Private
112(gs_ub3): 110(ptr) Variable Private
113(gs_uc3): 110(ptr) Variable Private
114: TypeVector 99(int) 4
115: TypePointer Private 114(ivec4)
116(gs_ua4): 115(ptr) Variable Private
117(gs_ub4): 115(ptr) Variable Private
118(gs_uc4): 115(ptr) Variable Private
84: TypePointer Output 61(fvec4)
85(@entryPointOutput): 84(ptr) Variable Output
86: 6(float) Constant 1082130432
87: 61(fvec4) ConstantComposite 75 76 80 86
89: 23(fvec2) ConstantComposite 76 76
90: 45 ConstantComposite 89 89
93: 34(fvec3) ConstantComposite 80 80 80
94: 53 ConstantComposite 93 93 93
97: 61(fvec4) ConstantComposite 86 86 86 86
98: 62 ConstantComposite 97 97 97 97
101: TypeInt 32 0
102: TypePointer Private 101(int)
103(gs_ua): 102(ptr) Variable Private
104(gs_ub): 102(ptr) Variable Private
105(gs_uc): 102(ptr) Variable Private
106: TypeVector 101(int) 2
107: TypePointer Private 106(ivec2)
108(gs_ua2): 107(ptr) Variable Private
109(gs_ub2): 107(ptr) Variable Private
110(gs_uc2): 107(ptr) Variable Private
111: TypeVector 101(int) 3
112: TypePointer Private 111(ivec3)
113(gs_ua3): 112(ptr) Variable Private
114(gs_ub3): 112(ptr) Variable Private
115(gs_uc3): 112(ptr) Variable Private
116: TypeVector 101(int) 4
117: TypePointer Private 116(ivec4)
118(gs_ua4): 117(ptr) Variable Private
119(gs_ub4): 117(ptr) Variable Private
120(gs_uc4): 117(ptr) Variable Private
4(VertexShaderFunction): 2 Function None 3
5: Label
ReturnValue 85
Store 85(@entryPointOutput) 87
Return
FunctionEnd
15(VertexShaderFunctionS(f1;f1;f1;i1;): 6(float) Function None 10
11(inF0): 7(ptr) FunctionParameter
@ -408,19 +418,19 @@ Shader version: 450
49(inF1): 46(ptr) FunctionParameter
50(inF2): 46(ptr) FunctionParameter
52: Label
ReturnValue 88
ReturnValue 90
FunctionEnd
59(VertexShaderFunction3x3(mf33;mf33;mf33;): 53 Function None 55
56(inF0): 54(ptr) FunctionParameter
57(inF1): 54(ptr) FunctionParameter
58(inF2): 54(ptr) FunctionParameter
60: Label
ReturnValue 92
ReturnValue 94
FunctionEnd
68(VertexShaderFunction4x4(mf44;mf44;mf44;): 62 Function None 64
65(inF0): 63(ptr) FunctionParameter
66(inF1): 63(ptr) FunctionParameter
67(inF2): 63(ptr) FunctionParameter
69: Label
ReturnValue 96
ReturnValue 98
FunctionEnd