summaryrefslogtreecommitdiff
path: root/contrib/SDL-3.2.8/src/render/direct3d12
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/SDL-3.2.8/src/render/direct3d12')
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.h1389
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.hlsl8
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.h490
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.hlsl8
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Common.hlsli236
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.h586
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.hlsl8
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Advanced.h31
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Color.h16
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Texture.h23
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_Shader_Common.hlsli37
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader.hlsl45
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Advanced.h653
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Color.h637
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Texture.h645
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12.c3309
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.cpp174
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.h44
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.c125
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.h54
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp132
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp133
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/compile_shaders.bat21
-rw-r--r--contrib/SDL-3.2.8/src/render/direct3d12/compile_shaders_xbox.bat13
24 files changed, 8817 insertions, 0 deletions
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.h
new file mode 100644
index 0000000..b8f40fe
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.h
@@ -0,0 +1,1389 @@
1#if 0
2;
3; Input signature:
4;
5; Name Index Mask Register SysValue Format Used
6; -------------------- ----- ------ -------- -------- ------- ------
7; SV_Position 0 xyzw 0 POS float
8; TEXCOORD 0 xy 1 NONE float xy
9; COLOR 0 xyzw 2 NONE float xyzw
10;
11;
12; Output signature:
13;
14; Name Index Mask Register SysValue Format Used
15; -------------------- ----- ------ -------- -------- ------- ------
16; SV_Target 0 xyzw 0 TARGET float xyzw
17;
18; shader hash: f6874446eaee41c102142c02d5bb3ab7
19;
20; Pipeline Runtime Information:
21;
22; Pixel Shader
23; DepthOutput=0
24; SampleFrequency=0
25;
26;
27; Input signature:
28;
29; Name Index InterpMode DynIdx
30; -------------------- ----- ---------------------- ------
31; SV_Position 0 noperspective
32; TEXCOORD 0 linear
33; COLOR 0 linear
34;
35; Output signature:
36;
37; Name Index InterpMode DynIdx
38; -------------------- ----- ---------------------- ------
39; SV_Target 0
40;
41; Buffer Definitions:
42;
43; cbuffer Constants
44; {
45;
46; struct Constants
47; {
48;
49; float scRGB_output; ; Offset: 0
50; float texture_type; ; Offset: 4
51; float input_type; ; Offset: 8
52; float color_scale; ; Offset: 12
53; float tonemap_method; ; Offset: 16
54; float tonemap_factor1; ; Offset: 20
55; float tonemap_factor2; ; Offset: 24
56; float sdr_white_point; ; Offset: 28
57; float4 Yoffset; ; Offset: 32
58; float4 Rcoeff; ; Offset: 48
59; float4 Gcoeff; ; Offset: 64
60; float4 Bcoeff; ; Offset: 80
61;
62; } Constants; ; Offset: 0 Size: 96
63;
64; }
65;
66;
67; Resource Bindings:
68;
69; Name Type Format Dim ID HLSL Bind Count
70; ------------------------------ ---------- ------- ----------- ------- -------------- ------
71; Constants cbuffer NA NA CB0 cb1 1
72; sampler0 sampler NA NA S0 s0 1
73; texture0 texture f32 2d T0 t0 1
74; texture1 texture f32 2d T1 t1 1
75; texture2 texture f32 2d T2 t2 1
76;
77;
78; ViewId state:
79;
80; Number of inputs: 12, outputs: 4
81; Outputs dependent on ViewId: { }
82; Inputs contributing to computation of Outputs:
83; output 0 depends on inputs: { 4, 5, 8 }
84; output 1 depends on inputs: { 4, 5, 9 }
85; output 2 depends on inputs: { 4, 5, 10 }
86; output 3 depends on inputs: { 4, 5, 11 }
87;
88target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
89target triple = "dxil-ms-dx"
90
91%dx.types.Handle = type { i8* }
92%dx.types.CBufRet.f32 = type { float, float, float, float }
93%dx.types.ResRet.f32 = type { float, float, float, float, i32 }
94%"class.Texture2D<vector<float, 4> >" = type { <4 x float>, %"class.Texture2D<vector<float, 4> >::mips_type" }
95%"class.Texture2D<vector<float, 4> >::mips_type" = type { i32 }
96%Constants = type { float, float, float, float, float, float, float, float, <4 x float>, <4 x float>, <4 x float>, <4 x float> }
97%struct.SamplerState = type { i32 }
98
99define void @main() {
100 %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 2, i32 2, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
101 %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 1, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
102 %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
103 %4 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
104 %5 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
105 %6 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
106 %7 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
107 %8 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
108 %9 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
109 %10 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
110 %11 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
111 %12 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 0) ; CBufferLoadLegacy(handle,regIndex)
112 %13 = extractvalue %dx.types.CBufRet.f32 %12, 1
113 %14 = fcmp fast oeq float %13, 0.000000e+00
114 br i1 %14, label %114, label %15
115
116; <label>:15 ; preds = %0
117 %16 = fcmp fast oeq float %13, 1.000000e+00
118 br i1 %16, label %17, label %23
119
120; <label>:17 ; preds = %15
121 %18 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %3, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
122 %19 = extractvalue %dx.types.ResRet.f32 %18, 0
123 %20 = extractvalue %dx.types.ResRet.f32 %18, 1
124 %21 = extractvalue %dx.types.ResRet.f32 %18, 2
125 %22 = extractvalue %dx.types.ResRet.f32 %18, 3
126 br label %114
127
128; <label>:23 ; preds = %15
129 %24 = fcmp fast oeq float %13, 2.000000e+00
130 br i1 %24, label %25, label %53
131
132; <label>:25 ; preds = %23
133 %26 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %3, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
134 %27 = extractvalue %dx.types.ResRet.f32 %26, 0
135 %28 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %2, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
136 %29 = extractvalue %dx.types.ResRet.f32 %28, 0
137 %30 = extractvalue %dx.types.ResRet.f32 %28, 1
138 %31 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 2) ; CBufferLoadLegacy(handle,regIndex)
139 %32 = extractvalue %dx.types.CBufRet.f32 %31, 0
140 %33 = extractvalue %dx.types.CBufRet.f32 %31, 1
141 %34 = extractvalue %dx.types.CBufRet.f32 %31, 2
142 %35 = fadd fast float %32, %27
143 %36 = fadd fast float %33, %29
144 %37 = fadd fast float %34, %30
145 %38 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 3) ; CBufferLoadLegacy(handle,regIndex)
146 %39 = extractvalue %dx.types.CBufRet.f32 %38, 0
147 %40 = extractvalue %dx.types.CBufRet.f32 %38, 1
148 %41 = extractvalue %dx.types.CBufRet.f32 %38, 2
149 %42 = call float @dx.op.dot3.f32(i32 55, float %35, float %36, float %37, float %39, float %40, float %41) ; Dot3(ax,ay,az,bx,by,bz)
150 %43 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 4) ; CBufferLoadLegacy(handle,regIndex)
151 %44 = extractvalue %dx.types.CBufRet.f32 %43, 0
152 %45 = extractvalue %dx.types.CBufRet.f32 %43, 1
153 %46 = extractvalue %dx.types.CBufRet.f32 %43, 2
154 %47 = call float @dx.op.dot3.f32(i32 55, float %35, float %36, float %37, float %44, float %45, float %46) ; Dot3(ax,ay,az,bx,by,bz)
155 %48 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 5) ; CBufferLoadLegacy(handle,regIndex)
156 %49 = extractvalue %dx.types.CBufRet.f32 %48, 0
157 %50 = extractvalue %dx.types.CBufRet.f32 %48, 1
158 %51 = extractvalue %dx.types.CBufRet.f32 %48, 2
159 %52 = call float @dx.op.dot3.f32(i32 55, float %35, float %36, float %37, float %49, float %50, float %51) ; Dot3(ax,ay,az,bx,by,bz)
160 br label %114
161
162; <label>:53 ; preds = %23
163 %54 = fcmp fast oeq float %13, 3.000000e+00
164 br i1 %54, label %55, label %83
165
166; <label>:55 ; preds = %53
167 %56 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %3, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
168 %57 = extractvalue %dx.types.ResRet.f32 %56, 0
169 %58 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %2, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
170 %59 = extractvalue %dx.types.ResRet.f32 %58, 0
171 %60 = extractvalue %dx.types.ResRet.f32 %58, 1
172 %61 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 2) ; CBufferLoadLegacy(handle,regIndex)
173 %62 = extractvalue %dx.types.CBufRet.f32 %61, 0
174 %63 = extractvalue %dx.types.CBufRet.f32 %61, 1
175 %64 = extractvalue %dx.types.CBufRet.f32 %61, 2
176 %65 = fadd fast float %62, %57
177 %66 = fadd fast float %63, %60
178 %67 = fadd fast float %64, %59
179 %68 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 3) ; CBufferLoadLegacy(handle,regIndex)
180 %69 = extractvalue %dx.types.CBufRet.f32 %68, 0
181 %70 = extractvalue %dx.types.CBufRet.f32 %68, 1
182 %71 = extractvalue %dx.types.CBufRet.f32 %68, 2
183 %72 = call float @dx.op.dot3.f32(i32 55, float %65, float %66, float %67, float %69, float %70, float %71) ; Dot3(ax,ay,az,bx,by,bz)
184 %73 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 4) ; CBufferLoadLegacy(handle,regIndex)
185 %74 = extractvalue %dx.types.CBufRet.f32 %73, 0
186 %75 = extractvalue %dx.types.CBufRet.f32 %73, 1
187 %76 = extractvalue %dx.types.CBufRet.f32 %73, 2
188 %77 = call float @dx.op.dot3.f32(i32 55, float %65, float %66, float %67, float %74, float %75, float %76) ; Dot3(ax,ay,az,bx,by,bz)
189 %78 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 5) ; CBufferLoadLegacy(handle,regIndex)
190 %79 = extractvalue %dx.types.CBufRet.f32 %78, 0
191 %80 = extractvalue %dx.types.CBufRet.f32 %78, 1
192 %81 = extractvalue %dx.types.CBufRet.f32 %78, 2
193 %82 = call float @dx.op.dot3.f32(i32 55, float %65, float %66, float %67, float %79, float %80, float %81) ; Dot3(ax,ay,az,bx,by,bz)
194 br label %114
195
196; <label>:83 ; preds = %53
197 %84 = fcmp fast oeq float %13, 4.000000e+00
198 br i1 %84, label %85, label %114
199
200; <label>:85 ; preds = %83
201 %86 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %3, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
202 %87 = extractvalue %dx.types.ResRet.f32 %86, 0
203 %88 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %2, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
204 %89 = extractvalue %dx.types.ResRet.f32 %88, 0
205 %90 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %1, %dx.types.Handle %4, float %10, float %11, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
206 %91 = extractvalue %dx.types.ResRet.f32 %90, 0
207 %92 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 2) ; CBufferLoadLegacy(handle,regIndex)
208 %93 = extractvalue %dx.types.CBufRet.f32 %92, 0
209 %94 = extractvalue %dx.types.CBufRet.f32 %92, 1
210 %95 = extractvalue %dx.types.CBufRet.f32 %92, 2
211 %96 = fadd fast float %93, %87
212 %97 = fadd fast float %94, %89
213 %98 = fadd fast float %95, %91
214 %99 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 3) ; CBufferLoadLegacy(handle,regIndex)
215 %100 = extractvalue %dx.types.CBufRet.f32 %99, 0
216 %101 = extractvalue %dx.types.CBufRet.f32 %99, 1
217 %102 = extractvalue %dx.types.CBufRet.f32 %99, 2
218 %103 = call float @dx.op.dot3.f32(i32 55, float %96, float %97, float %98, float %100, float %101, float %102) ; Dot3(ax,ay,az,bx,by,bz)
219 %104 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 4) ; CBufferLoadLegacy(handle,regIndex)
220 %105 = extractvalue %dx.types.CBufRet.f32 %104, 0
221 %106 = extractvalue %dx.types.CBufRet.f32 %104, 1
222 %107 = extractvalue %dx.types.CBufRet.f32 %104, 2
223 %108 = call float @dx.op.dot3.f32(i32 55, float %96, float %97, float %98, float %105, float %106, float %107) ; Dot3(ax,ay,az,bx,by,bz)
224 %109 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 5) ; CBufferLoadLegacy(handle,regIndex)
225 %110 = extractvalue %dx.types.CBufRet.f32 %109, 0
226 %111 = extractvalue %dx.types.CBufRet.f32 %109, 1
227 %112 = extractvalue %dx.types.CBufRet.f32 %109, 2
228 %113 = call float @dx.op.dot3.f32(i32 55, float %96, float %97, float %98, float %110, float %111, float %112) ; Dot3(ax,ay,az,bx,by,bz)
229 br label %114
230
231; <label>:114 ; preds = %85, %83, %55, %25, %17, %0
232 %115 = phi float [ %19, %17 ], [ %42, %25 ], [ %72, %55 ], [ %103, %85 ], [ 1.000000e+00, %0 ], [ 1.000000e+00, %83 ]
233 %116 = phi float [ %20, %17 ], [ %47, %25 ], [ %77, %55 ], [ %108, %85 ], [ 1.000000e+00, %0 ], [ 0.000000e+00, %83 ]
234 %117 = phi float [ %21, %17 ], [ %52, %25 ], [ %82, %55 ], [ %113, %85 ], [ 1.000000e+00, %0 ], [ 0.000000e+00, %83 ]
235 %118 = phi float [ %22, %17 ], [ 1.000000e+00, %25 ], [ 1.000000e+00, %55 ], [ 1.000000e+00, %85 ], [ 1.000000e+00, %0 ], [ 1.000000e+00, %83 ]
236 %119 = extractvalue %dx.types.CBufRet.f32 %12, 2
237 %120 = fcmp fast oeq float %119, 3.000000e+00
238 br i1 %120, label %121, label %169
239
240; <label>:121 ; preds = %114
241 %122 = call float @dx.op.unary.f32(i32 6, float %115) ; FAbs(value)
242 %123 = call float @dx.op.unary.f32(i32 6, float %116) ; FAbs(value)
243 %124 = call float @dx.op.unary.f32(i32 6, float %117) ; FAbs(value)
244 %125 = call float @dx.op.unary.f32(i32 23, float %122) ; Log(value)
245 %126 = call float @dx.op.unary.f32(i32 23, float %123) ; Log(value)
246 %127 = call float @dx.op.unary.f32(i32 23, float %124) ; Log(value)
247 %128 = fmul fast float %125, 0x3F89F9B580000000
248 %129 = fmul fast float %126, 0x3F89F9B580000000
249 %130 = fmul fast float %127, 0x3F89F9B580000000
250 %131 = call float @dx.op.unary.f32(i32 21, float %128) ; Exp(value)
251 %132 = call float @dx.op.unary.f32(i32 21, float %129) ; Exp(value)
252 %133 = call float @dx.op.unary.f32(i32 21, float %130) ; Exp(value)
253 %134 = fadd fast float %131, -8.359375e-01
254 %135 = fadd fast float %132, -8.359375e-01
255 %136 = fadd fast float %133, -8.359375e-01
256 %137 = call float @dx.op.binary.f32(i32 35, float %134, float 0.000000e+00) ; FMax(a,b)
257 %138 = call float @dx.op.binary.f32(i32 35, float %135, float 0.000000e+00) ; FMax(a,b)
258 %139 = call float @dx.op.binary.f32(i32 35, float %136, float 0.000000e+00) ; FMax(a,b)
259 %140 = fmul fast float %131, 1.868750e+01
260 %141 = fmul fast float %132, 1.868750e+01
261 %142 = fmul fast float %133, 1.868750e+01
262 %143 = fsub fast float 0x4032DA0000000000, %140
263 %144 = fsub fast float 0x4032DA0000000000, %141
264 %145 = fsub fast float 0x4032DA0000000000, %142
265 %146 = fdiv fast float %137, %143
266 %147 = fdiv fast float %138, %144
267 %148 = fdiv fast float %139, %145
268 %149 = call float @dx.op.unary.f32(i32 6, float %146) ; FAbs(value)
269 %150 = call float @dx.op.unary.f32(i32 6, float %147) ; FAbs(value)
270 %151 = call float @dx.op.unary.f32(i32 6, float %148) ; FAbs(value)
271 %152 = call float @dx.op.unary.f32(i32 23, float %149) ; Log(value)
272 %153 = call float @dx.op.unary.f32(i32 23, float %150) ; Log(value)
273 %154 = call float @dx.op.unary.f32(i32 23, float %151) ; Log(value)
274 %155 = fmul fast float %152, 0x40191C0D60000000
275 %156 = fmul fast float %153, 0x40191C0D60000000
276 %157 = fmul fast float %154, 0x40191C0D60000000
277 %158 = call float @dx.op.unary.f32(i32 21, float %155) ; Exp(value)
278 %159 = call float @dx.op.unary.f32(i32 21, float %156) ; Exp(value)
279 %160 = call float @dx.op.unary.f32(i32 21, float %157) ; Exp(value)
280 %161 = fmul fast float %158, 1.000000e+04
281 %162 = fmul fast float %159, 1.000000e+04
282 %163 = fmul fast float %160, 1.000000e+04
283 %164 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 1) ; CBufferLoadLegacy(handle,regIndex)
284 %165 = extractvalue %dx.types.CBufRet.f32 %164, 3
285 %166 = fdiv fast float %161, %165
286 %167 = fdiv fast float %162, %165
287 %168 = fdiv fast float %163, %165
288 br label %169
289
290; <label>:169 ; preds = %121, %114
291 %170 = phi float [ %166, %121 ], [ %115, %114 ]
292 %171 = phi float [ %167, %121 ], [ %116, %114 ]
293 %172 = phi float [ %168, %121 ], [ %117, %114 ]
294 %173 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %5, i32 1) ; CBufferLoadLegacy(handle,regIndex)
295 %174 = extractvalue %dx.types.CBufRet.f32 %173, 0
296 %175 = fcmp fast une float %174, 0.000000e+00
297 br i1 %175, label %176, label %229
298
299; <label>:176 ; preds = %169
300 %177 = fcmp fast oeq float %174, 1.000000e+00
301 br i1 %177, label %178, label %183
302
303; <label>:178 ; preds = %176
304 %179 = extractvalue %dx.types.CBufRet.f32 %173, 1
305 %180 = fmul fast float %179, %170
306 %181 = fmul fast float %179, %171
307 %182 = fmul fast float %179, %172
308 br label %229
309
310; <label>:183 ; preds = %176
311 %184 = fcmp fast oeq float %174, 2.000000e+00
312 br i1 %184, label %185, label %229
313
314; <label>:185 ; preds = %183
315 %186 = fcmp fast oeq float %119, 2.000000e+00
316 br i1 %186, label %187, label %197
317
318; <label>:187 ; preds = %185
319 %188 = fmul fast float %170, 0x3FE413B180000000
320 %189 = call float @dx.op.tertiary.f32(i32 46, float 0x3FD512F900000000, float %171, float %188) ; FMad(a,b,c)
321 %190 = call float @dx.op.tertiary.f32(i32 46, float 0x3FA62D1F20000000, float %172, float %189) ; FMad(a,b,c)
322 %191 = fmul fast float %170, 0x3FB1B05740000000
323 %192 = call float @dx.op.tertiary.f32(i32 46, float 0x3FED6CE140000000, float %171, float %191) ; FMad(a,b,c)
324 %193 = call float @dx.op.tertiary.f32(i32 46, float 0x3F8744F5E0000000, float %172, float %192) ; FMad(a,b,c)
325 %194 = fmul fast float %170, 0x3F90C8CD60000000
326 %195 = call float @dx.op.tertiary.f32(i32 46, float 0x3FB6880520000000, float %171, float %194) ; FMad(a,b,c)
327 %196 = call float @dx.op.tertiary.f32(i32 46, float 0x3FECA8B6E0000000, float %172, float %195) ; FMad(a,b,c)
328 br label %197
329
330; <label>:197 ; preds = %187, %185
331 %198 = phi float [ %190, %187 ], [ %170, %185 ]
332 %199 = phi float [ %193, %187 ], [ %171, %185 ]
333 %200 = phi float [ %196, %187 ], [ %172, %185 ]
334 %201 = call float @dx.op.binary.f32(i32 35, float %199, float %200) ; FMax(a,b)
335 %202 = call float @dx.op.binary.f32(i32 35, float %198, float %201) ; FMax(a,b)
336 %203 = fcmp fast ogt float %202, 0.000000e+00
337 br i1 %203, label %204, label %215
338
339; <label>:204 ; preds = %197
340 %205 = extractvalue %dx.types.CBufRet.f32 %173, 1
341 %206 = fmul fast float %205, %202
342 %207 = fadd fast float %206, 1.000000e+00
343 %208 = extractvalue %dx.types.CBufRet.f32 %173, 2
344 %209 = fmul fast float %208, %202
345 %210 = fadd fast float %209, 1.000000e+00
346 %211 = fdiv fast float %207, %210
347 %212 = fmul fast float %211, %198
348 %213 = fmul fast float %211, %199
349 %214 = fmul fast float %211, %200
350 br label %215
351
352; <label>:215 ; preds = %204, %197
353 %216 = phi float [ %212, %204 ], [ %198, %197 ]
354 %217 = phi float [ %213, %204 ], [ %199, %197 ]
355 %218 = phi float [ %214, %204 ], [ %200, %197 ]
356 br i1 %186, label %219, label %229
357
358; <label>:219 ; preds = %215
359 %220 = fmul fast float %216, 0x3FFA916440000000
360 %221 = call float @dx.op.tertiary.f32(i32 46, float 0xBFE2CE1400000000, float %217, float %220) ; FMad(a,b,c)
361 %222 = call float @dx.op.tertiary.f32(i32 46, float 0xBFB2A5A460000000, float %218, float %221) ; FMad(a,b,c)
362 %223 = fmul fast float %216, 0xBFBFE24FE0000000
363 %224 = call float @dx.op.tertiary.f32(i32 46, float 0x3FF2205680000000, float %217, float %223) ; FMad(a,b,c)
364 %225 = call float @dx.op.tertiary.f32(i32 46, float 0xBF8118C1A0000000, float %218, float %224) ; FMad(a,b,c)
365 %226 = fmul fast float %216, 0xBF9296F660000000
366 %227 = call float @dx.op.tertiary.f32(i32 46, float 0xBFB9C0B9A0000000, float %217, float %226) ; FMad(a,b,c)
367 %228 = call float @dx.op.tertiary.f32(i32 46, float 0x3FF1E66780000000, float %218, float %227) ; FMad(a,b,c)
368 br label %229
369
370; <label>:229 ; preds = %219, %215, %183, %178, %169
371 %230 = phi float [ %170, %169 ], [ %180, %178 ], [ %222, %219 ], [ %216, %215 ], [ %170, %183 ]
372 %231 = phi float [ %171, %169 ], [ %181, %178 ], [ %225, %219 ], [ %217, %215 ], [ %171, %183 ]
373 %232 = phi float [ %172, %169 ], [ %182, %178 ], [ %228, %219 ], [ %218, %215 ], [ %172, %183 ]
374 %233 = fcmp fast oeq float %119, 1.000000e+00
375 br i1 %233, label %234, label %280
376
377; <label>:234 ; preds = %229
378 %235 = extractvalue %dx.types.CBufRet.f32 %12, 0
379 %236 = fcmp fast une float %235, 0.000000e+00
380 br i1 %236, label %237, label %272
381
382; <label>:237 ; preds = %234
383 %238 = fcmp fast ugt float %230, 0x3FA4B5DCC0000000
384 br i1 %238, label %241, label %239
385
386; <label>:239 ; preds = %237
387 %240 = fmul fast float %230, 0x3FB3D07220000000
388 br label %248
389
390; <label>:241 ; preds = %237
391 %242 = fadd fast float %230, 0x3FAC28F5C0000000
392 %243 = call float @dx.op.unary.f32(i32 6, float %242) ; FAbs(value)
393 %244 = fmul fast float %243, 0x3FEE54EDE0000000
394 %245 = call float @dx.op.unary.f32(i32 23, float %244) ; Log(value)
395 %246 = fmul fast float %245, 0x4003333340000000
396 %247 = call float @dx.op.unary.f32(i32 21, float %246) ; Exp(value)
397 br label %248
398
399; <label>:248 ; preds = %241, %239
400 %249 = phi float [ %240, %239 ], [ %247, %241 ]
401 %250 = fcmp fast ugt float %231, 0x3FA4B5DCC0000000
402 br i1 %250, label %253, label %251
403
404; <label>:251 ; preds = %248
405 %252 = fmul fast float %231, 0x3FB3D07220000000
406 br label %260
407
408; <label>:253 ; preds = %248
409 %254 = fadd fast float %231, 0x3FAC28F5C0000000
410 %255 = call float @dx.op.unary.f32(i32 6, float %254) ; FAbs(value)
411 %256 = fmul fast float %255, 0x3FEE54EDE0000000
412 %257 = call float @dx.op.unary.f32(i32 23, float %256) ; Log(value)
413 %258 = fmul fast float %257, 0x4003333340000000
414 %259 = call float @dx.op.unary.f32(i32 21, float %258) ; Exp(value)
415 br label %260
416
417; <label>:260 ; preds = %253, %251
418 %261 = phi float [ %252, %251 ], [ %259, %253 ]
419 %262 = fcmp fast ugt float %232, 0x3FA4B5DCC0000000
420 br i1 %262, label %265, label %263
421
422; <label>:263 ; preds = %260
423 %264 = fmul fast float %232, 0x3FB3D07220000000
424 br label %272
425
426; <label>:265 ; preds = %260
427 %266 = fadd fast float %232, 0x3FAC28F5C0000000
428 %267 = call float @dx.op.unary.f32(i32 6, float %266) ; FAbs(value)
429 %268 = fmul fast float %267, 0x3FEE54EDE0000000
430 %269 = call float @dx.op.unary.f32(i32 23, float %268) ; Log(value)
431 %270 = fmul fast float %269, 0x4003333340000000
432 %271 = call float @dx.op.unary.f32(i32 21, float %270) ; Exp(value)
433 br label %272
434
435; <label>:272 ; preds = %265, %263, %234
436 %273 = phi float [ %230, %234 ], [ %249, %265 ], [ %249, %263 ]
437 %274 = phi float [ %231, %234 ], [ %261, %265 ], [ %261, %263 ]
438 %275 = phi float [ %232, %234 ], [ %271, %265 ], [ %264, %263 ]
439 %276 = extractvalue %dx.types.CBufRet.f32 %12, 3
440 %277 = fmul fast float %276, %273
441 %278 = fmul fast float %276, %274
442 %279 = fmul fast float %276, %275
443 br label %389
444
445; <label>:280 ; preds = %229
446 %281 = fcmp fast oeq float %119, 2.000000e+00
447 %282 = extractvalue %dx.types.CBufRet.f32 %12, 3
448 br i1 %281, label %283, label %329
449
450; <label>:283 ; preds = %280
451 %284 = fmul fast float %282, %230
452 %285 = fmul fast float %282, %231
453 %286 = fmul fast float %282, %232
454 %287 = extractvalue %dx.types.CBufRet.f32 %12, 0
455 %288 = fcmp fast une float %287, 0.000000e+00
456 br i1 %288, label %389, label %289
457
458; <label>:289 ; preds = %283
459 %290 = fcmp fast ugt float %284, 0x3F69A5C380000000
460 br i1 %290, label %293, label %291
461
462; <label>:291 ; preds = %289
463 %292 = fmul fast float %284, 0x4029D70A40000000
464 br label %300
465
466; <label>:293 ; preds = %289
467 %294 = call float @dx.op.unary.f32(i32 6, float %284) ; FAbs(value)
468 %295 = call float @dx.op.unary.f32(i32 23, float %294) ; Log(value)
469 %296 = fmul fast float %295, 0x3FDAAAAAA0000000
470 %297 = call float @dx.op.unary.f32(i32 21, float %296) ; Exp(value)
471 %298 = fmul fast float %297, 0x3FF0E147A0000000
472 %299 = fadd fast float %298, 0xBFAC28F5C0000000
473 br label %300
474
475; <label>:300 ; preds = %293, %291
476 %301 = phi float [ %292, %291 ], [ %299, %293 ]
477 %302 = fcmp fast ugt float %285, 0x3F69A5C380000000
478 br i1 %302, label %305, label %303
479
480; <label>:303 ; preds = %300
481 %304 = fmul fast float %285, 0x4029D70A40000000
482 br label %312
483
484; <label>:305 ; preds = %300
485 %306 = call float @dx.op.unary.f32(i32 6, float %285) ; FAbs(value)
486 %307 = call float @dx.op.unary.f32(i32 23, float %306) ; Log(value)
487 %308 = fmul fast float %307, 0x3FDAAAAAA0000000
488 %309 = call float @dx.op.unary.f32(i32 21, float %308) ; Exp(value)
489 %310 = fmul fast float %309, 0x3FF0E147A0000000
490 %311 = fadd fast float %310, 0xBFAC28F5C0000000
491 br label %312
492
493; <label>:312 ; preds = %305, %303
494 %313 = phi float [ %304, %303 ], [ %311, %305 ]
495 %314 = fcmp fast ugt float %286, 0x3F69A5C380000000
496 br i1 %314, label %317, label %315
497
498; <label>:315 ; preds = %312
499 %316 = fmul fast float %286, 0x4029D70A40000000
500 br label %324
501
502; <label>:317 ; preds = %312
503 %318 = call float @dx.op.unary.f32(i32 6, float %286) ; FAbs(value)
504 %319 = call float @dx.op.unary.f32(i32 23, float %318) ; Log(value)
505 %320 = fmul fast float %319, 0x3FDAAAAAA0000000
506 %321 = call float @dx.op.unary.f32(i32 21, float %320) ; Exp(value)
507 %322 = fmul fast float %321, 0x3FF0E147A0000000
508 %323 = fadd fast float %322, 0xBFAC28F5C0000000
509 br label %324
510
511; <label>:324 ; preds = %317, %315
512 %325 = phi float [ %316, %315 ], [ %323, %317 ]
513 %326 = call float @dx.op.unary.f32(i32 7, float %301) ; Saturate(value)
514 %327 = call float @dx.op.unary.f32(i32 7, float %313) ; Saturate(value)
515 %328 = call float @dx.op.unary.f32(i32 7, float %325) ; Saturate(value)
516 br label %389
517
518; <label>:329 ; preds = %280
519 br i1 %120, label %330, label %385
520
521; <label>:330 ; preds = %329
522 %331 = fmul fast float %230, 0x3FFA916440000000
523 %332 = call float @dx.op.tertiary.f32(i32 46, float 0xBFE2CE1400000000, float %231, float %331) ; FMad(a,b,c)
524 %333 = call float @dx.op.tertiary.f32(i32 46, float 0xBFB2A5A460000000, float %232, float %332) ; FMad(a,b,c)
525 %334 = fmul fast float %230, 0xBFBFE24FE0000000
526 %335 = call float @dx.op.tertiary.f32(i32 46, float 0x3FF2205680000000, float %231, float %334) ; FMad(a,b,c)
527 %336 = call float @dx.op.tertiary.f32(i32 46, float 0xBF8118C1A0000000, float %232, float %335) ; FMad(a,b,c)
528 %337 = fmul fast float %230, 0xBF9296F660000000
529 %338 = call float @dx.op.tertiary.f32(i32 46, float 0xBFB9C0B9A0000000, float %231, float %337) ; FMad(a,b,c)
530 %339 = call float @dx.op.tertiary.f32(i32 46, float 0x3FF1E66780000000, float %232, float %338) ; FMad(a,b,c)
531 %340 = fmul fast float %282, %333
532 %341 = fmul fast float %282, %336
533 %342 = fmul fast float %282, %339
534 %343 = extractvalue %dx.types.CBufRet.f32 %12, 0
535 %344 = fcmp fast une float %343, 0.000000e+00
536 br i1 %344, label %389, label %345
537
538; <label>:345 ; preds = %330
539 %346 = fcmp fast ugt float %340, 0x3F69A5C380000000
540 br i1 %346, label %349, label %347
541
542; <label>:347 ; preds = %345
543 %348 = fmul fast float %340, 0x4029D70A40000000
544 br label %356
545
546; <label>:349 ; preds = %345
547 %350 = call float @dx.op.unary.f32(i32 6, float %340) ; FAbs(value)
548 %351 = call float @dx.op.unary.f32(i32 23, float %350) ; Log(value)
549 %352 = fmul fast float %351, 0x3FDAAAAAA0000000
550 %353 = call float @dx.op.unary.f32(i32 21, float %352) ; Exp(value)
551 %354 = fmul fast float %353, 0x3FF0E147A0000000
552 %355 = fadd fast float %354, 0xBFAC28F5C0000000
553 br label %356
554
555; <label>:356 ; preds = %349, %347
556 %357 = phi float [ %348, %347 ], [ %355, %349 ]
557 %358 = fcmp fast ugt float %341, 0x3F69A5C380000000
558 br i1 %358, label %361, label %359
559
560; <label>:359 ; preds = %356
561 %360 = fmul fast float %341, 0x4029D70A40000000
562 br label %368
563
564; <label>:361 ; preds = %356
565 %362 = call float @dx.op.unary.f32(i32 6, float %341) ; FAbs(value)
566 %363 = call float @dx.op.unary.f32(i32 23, float %362) ; Log(value)
567 %364 = fmul fast float %363, 0x3FDAAAAAA0000000
568 %365 = call float @dx.op.unary.f32(i32 21, float %364) ; Exp(value)
569 %366 = fmul fast float %365, 0x3FF0E147A0000000
570 %367 = fadd fast float %366, 0xBFAC28F5C0000000
571 br label %368
572
573; <label>:368 ; preds = %361, %359
574 %369 = phi float [ %360, %359 ], [ %367, %361 ]
575 %370 = fcmp fast ugt float %342, 0x3F69A5C380000000
576 br i1 %370, label %373, label %371
577
578; <label>:371 ; preds = %368
579 %372 = fmul fast float %342, 0x4029D70A40000000
580 br label %380
581
582; <label>:373 ; preds = %368
583 %374 = call float @dx.op.unary.f32(i32 6, float %342) ; FAbs(value)
584 %375 = call float @dx.op.unary.f32(i32 23, float %374) ; Log(value)
585 %376 = fmul fast float %375, 0x3FDAAAAAA0000000
586 %377 = call float @dx.op.unary.f32(i32 21, float %376) ; Exp(value)
587 %378 = fmul fast float %377, 0x3FF0E147A0000000
588 %379 = fadd fast float %378, 0xBFAC28F5C0000000
589 br label %380
590
591; <label>:380 ; preds = %373, %371
592 %381 = phi float [ %372, %371 ], [ %379, %373 ]
593 %382 = call float @dx.op.unary.f32(i32 7, float %357) ; Saturate(value)
594 %383 = call float @dx.op.unary.f32(i32 7, float %369) ; Saturate(value)
595 %384 = call float @dx.op.unary.f32(i32 7, float %381) ; Saturate(value)
596 br label %389
597
598; <label>:385 ; preds = %329
599 %386 = fmul fast float %282, %230
600 %387 = fmul fast float %282, %231
601 %388 = fmul fast float %282, %232
602 br label %389
603
604; <label>:389 ; preds = %385, %380, %330, %324, %283, %272
605 %390 = phi float [ %277, %272 ], [ %386, %385 ], [ %284, %283 ], [ %326, %324 ], [ %340, %330 ], [ %382, %380 ]
606 %391 = phi float [ %278, %272 ], [ %387, %385 ], [ %285, %283 ], [ %327, %324 ], [ %341, %330 ], [ %383, %380 ]
607 %392 = phi float [ %279, %272 ], [ %388, %385 ], [ %286, %283 ], [ %328, %324 ], [ %342, %330 ], [ %384, %380 ]
608 %393 = fmul fast float %390, %6
609 %394 = fmul fast float %391, %7
610 %395 = fmul fast float %392, %8
611 %396 = fmul fast float %118, %9
612 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %393) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
613 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %394) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
614 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %395) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
615 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %396) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
616 ret void
617}
618
619; Function Attrs: nounwind readnone
620declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0
621
622; Function Attrs: nounwind
623declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1
624
625; Function Attrs: nounwind readonly
626declare %dx.types.ResRet.f32 @dx.op.sample.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2
627
628; Function Attrs: nounwind readnone
629declare float @dx.op.dot3.f32(i32, float, float, float, float, float, float) #0
630
631; Function Attrs: nounwind readnone
632declare float @dx.op.unary.f32(i32, float) #0
633
634; Function Attrs: nounwind readnone
635declare float @dx.op.binary.f32(i32, float, float) #0
636
637; Function Attrs: nounwind readonly
638declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2
639
640; Function Attrs: nounwind readnone
641declare float @dx.op.tertiary.f32(i32, float, float, float) #0
642
643; Function Attrs: nounwind readonly
644declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2
645
646attributes #0 = { nounwind readnone }
647attributes #1 = { nounwind }
648attributes #2 = { nounwind readonly }
649
650!llvm.ident = !{!0}
651!dx.version = !{!1}
652!dx.valver = !{!2}
653!dx.shaderModel = !{!3}
654!dx.resources = !{!4}
655!dx.viewIdState = !{!14}
656!dx.entryPoints = !{!15}
657
658!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
659!1 = !{i32 1, i32 0}
660!2 = !{i32 1, i32 6}
661!3 = !{!"ps", i32 6, i32 0}
662!4 = !{!5, null, !10, !12}
663!5 = !{!6, !8, !9}
664!6 = !{i32 0, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 0, i32 0, i32 1, i32 2, i32 0, !7}
665!7 = !{i32 0, i32 9}
666!8 = !{i32 1, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 0, i32 1, i32 1, i32 2, i32 0, !7}
667!9 = !{i32 2, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 0, i32 2, i32 1, i32 2, i32 0, !7}
668!10 = !{!11}
669!11 = !{i32 0, %Constants* undef, !"", i32 0, i32 1, i32 1, i32 96, null}
670!12 = !{!13}
671!13 = !{i32 0, %struct.SamplerState* undef, !"", i32 0, i32 0, i32 1, i32 0, null}
672!14 = !{[14 x i32] [i32 12, i32 4, i32 0, i32 0, i32 0, i32 0, i32 15, i32 15, i32 0, i32 0, i32 1, i32 2, i32 4, i32 8]}
673!15 = !{void ()* @main, !"main", !16, !4, null}
674!16 = !{!17, !24, null}
675!17 = !{!18, !20, !22}
676!18 = !{i32 0, !"SV_Position", i8 9, i8 3, !19, i8 4, i32 1, i8 4, i32 0, i8 0, null}
677!19 = !{i32 0}
678!20 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !19, i8 2, i32 1, i8 2, i32 1, i8 0, !21}
679!21 = !{i32 3, i32 3}
680!22 = !{i32 2, !"COLOR", i8 9, i8 0, !19, i8 2, i32 1, i8 4, i32 2, i8 0, !23}
681!23 = !{i32 3, i32 15}
682!24 = !{!25}
683!25 = !{i32 0, !"SV_Target", i8 9, i8 16, !19, i8 0, i32 1, i8 4, i32 0, i8 0, !23}
684
685#endif
686
687const unsigned char g_main[] = {
688 0x44, 0x58, 0x42, 0x43, 0x78, 0xad, 0xb4, 0x13, 0x3d, 0x52, 0x26, 0xa9,
689 0x43, 0x6f, 0x29, 0xd4, 0x3d, 0xe5, 0x45, 0x27, 0x01, 0x00, 0x00, 0x00,
690 0xd9, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
691 0x50, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00,
692 0x61, 0x02, 0x00, 0x00, 0x61, 0x03, 0x00, 0x00, 0xd9, 0x0c, 0x00, 0x00,
693 0xf5, 0x0c, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00,
694 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31,
695 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
696 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
697 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
698 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
699 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
700 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
701 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00,
702 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
703 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
704 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00,
705 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c,
706 0x4f, 0x52, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01,
707 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
708 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03,
709 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
710 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
711 0x00, 0x50, 0x53, 0x56, 0x30, 0x44, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00,
712 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
713 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
714 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x01, 0x00, 0x00,
715 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
716 0x00, 0x05, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
717 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
718 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
719 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
720 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
721 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
722 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
723 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
724 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
725 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
726 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
727 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43,
728 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
729 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
730 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00,
731 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00,
732 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44,
733 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
734 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
735 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
736 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
737 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
738 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53,
739 0x30, 0xf8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
740 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
741 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
742 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
743 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
744 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
745 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
746 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
747 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
748 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
749 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
750 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
751 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
752 0xff, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
753 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
754 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
755 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
756 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
757 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
758 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
759 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
760 0xff, 0x53, 0x54, 0x41, 0x54, 0x70, 0x09, 0x00, 0x00, 0x60, 0x00, 0x00,
761 0x00, 0x5c, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00,
762 0x00, 0x10, 0x00, 0x00, 0x00, 0x58, 0x09, 0x00, 0x00, 0x42, 0x43, 0xc0,
763 0xde, 0x21, 0x0c, 0x00, 0x00, 0x53, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20,
764 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23,
765 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84,
766 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45,
767 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18,
768 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88,
769 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4,
770 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46,
771 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0,
772 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff,
773 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff,
774 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00,
775 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00,
776 0x00, 0x89, 0x20, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88,
777 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23,
778 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4,
779 0x4c, 0x10, 0x9c, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, 0x66, 0x00, 0xe6,
780 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90,
781 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27,
782 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51,
783 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, 0xf9, 0x13, 0xf6, 0x10,
784 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c,
785 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0x4d, 0x41, 0x06, 0x62, 0x18,
786 0x86, 0x61, 0x18, 0xe8, 0x29, 0xc3, 0x40, 0x0c, 0x14, 0x15, 0x62, 0x20,
787 0x86, 0x81, 0xa6, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e,
788 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0x0c, 0xc3, 0x50,
789 0x88, 0x8a, 0x60, 0x08, 0xb2, 0x4a, 0x31, 0x10, 0xc3, 0x30, 0x10, 0x36,
790 0x47, 0x10, 0x14, 0x83, 0x21, 0x0a, 0x82, 0xd0, 0x68, 0x1b, 0x08, 0x18,
791 0x46, 0x20, 0x86, 0x99, 0xda, 0x60, 0x1c, 0xd8, 0x21, 0x1c, 0xe6, 0x61,
792 0x1e, 0xdc, 0x80, 0x16, 0xca, 0x01, 0x1f, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1,
793 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1,
794 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, 0x81,
795 0x0d, 0xc0, 0x80, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, 0x40, 0x0f, 0xf4, 0xa0,
796 0x1d, 0xd2, 0x01, 0x1e, 0xe6, 0xe1, 0x17, 0xe8, 0x21, 0x1f, 0xe0, 0xa1,
797 0x1c, 0x50, 0x40, 0xcc, 0x24, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f,
798 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f,
799 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f,
800 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, 0x40, 0x0f,
801 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x48, 0xf0, 0x3e,
802 0x02, 0x2f, 0xe1, 0x9c, 0x46, 0x9a, 0x80, 0x66, 0x92, 0x10, 0x33, 0x0c,
803 0xc3, 0x30, 0x0c, 0xc3, 0xe0, 0x79, 0x9e, 0x47, 0xe2, 0x4d, 0xd2, 0x14,
804 0x51, 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44,
805 0xa0, 0x80, 0x20, 0x32, 0x1d, 0x08, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72,
806 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72,
807 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e,
808 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07,
809 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
810 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07,
811 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07,
812 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07,
813 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07,
814 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06,
815 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e,
816 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
817 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
818 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00,
819 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00,
820 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c,
821 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00,
822 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x13, 0x01,
823 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x67,
824 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21,
825 0x8f, 0x05, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
826 0x43, 0x1e, 0x0c, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
827 0x00, 0x86, 0x3c, 0x1b, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
828 0x00, 0x00, 0x64, 0x81, 0x00, 0x19, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98,
829 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43,
830 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x24, 0x0a, 0x38, 0xa0,
831 0x0c, 0xca, 0xa1, 0x10, 0x0a, 0xa2, 0x30, 0x0a, 0xa4, 0x50, 0x0a, 0xa6,
832 0x70, 0x0a, 0xa8, 0xc0, 0x0a, 0x30, 0xa0, 0x40, 0x03, 0xca, 0xa3, 0x6c,
833 0xca, 0x70, 0xa0, 0x44, 0x0d, 0xa8, 0x28, 0x89, 0x32, 0x28, 0x84, 0x11,
834 0x80, 0x22, 0x28, 0x10, 0xd2, 0x6a, 0x80, 0xc2, 0x19, 0x00, 0x12, 0x67,
835 0x00, 0x68, 0x9c, 0x01, 0xa0, 0x72, 0x06, 0x80, 0xcc, 0xb1, 0x1c, 0x86,
836 0x00, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00,
837 0x00, 0x79, 0x18, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c,
838 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03,
839 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01,
840 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a,
841 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b,
842 0xd9, 0x10, 0x04, 0x13, 0x04, 0x42, 0x99, 0x20, 0x10, 0xcb, 0x06, 0x61,
843 0x20, 0x36, 0x08, 0x04, 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x30, 0x1b,
844 0x86, 0x03, 0x21, 0x26, 0x08, 0x61, 0x80, 0x06, 0x44, 0xe8, 0xca, 0xf0,
845 0xe8, 0xea, 0xe4, 0xca, 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c,
846 0x0d, 0x02, 0xd1, 0x6c, 0x48, 0x08, 0x65, 0x21, 0x88, 0x81, 0x21, 0x1c,
847 0x22, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x31, 0x1b, 0x92, 0x41,
848 0x81, 0x88, 0x61, 0x60, 0x08, 0x87, 0x08, 0x5d, 0x19, 0x1e, 0x5d, 0x9d,
849 0x5c, 0x99, 0xcc, 0x86, 0x84, 0x51, 0x24, 0x82, 0x19, 0x18, 0xc2, 0xd9,
850 0x30, 0x3c, 0xd1, 0x34, 0x41, 0x18, 0x03, 0x35, 0x60, 0x32, 0xf4, 0xe6,
851 0x36, 0x47, 0x17, 0xe6, 0x46, 0x37, 0x37, 0x41, 0x20, 0x9e, 0x0d, 0x08,
852 0x51, 0x59, 0xc4, 0x30, 0x5c, 0xc0, 0x86, 0x00, 0x9b, 0x20, 0x94, 0xc1,
853 0x1a, 0x10, 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b, 0x93, 0x83, 0xd9, 0x80,
854 0x10, 0xda, 0x46, 0x10, 0x03, 0x01, 0x6c, 0x08, 0xb8, 0x0d, 0x04, 0x05,
855 0x64, 0xdd, 0x04, 0x41, 0x0c, 0xd2, 0x80, 0xcc, 0xdc, 0x98, 0xd4, 0x91,
856 0xd0, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, 0xdd, 0x04, 0x81, 0x80, 0x26,
857 0x08, 0x44, 0x34, 0x41, 0xd0, 0xce, 0x60, 0x03, 0x82, 0x80, 0x41, 0x18,
858 0x10, 0x62, 0xd0, 0x34, 0x63, 0x40, 0x86, 0xae, 0x0c, 0x8f, 0xae, 0x4e,
859 0xae, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0x6c, 0x82, 0x40, 0x48, 0x1b, 0x10,
860 0xa4, 0x0c, 0xc2, 0xc0, 0x0c, 0xc4, 0xa0, 0x69, 0xc6, 0x80, 0x4a, 0x9a,
861 0x1b, 0x5c, 0x1d, 0xdd, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x04, 0x81, 0x98,
862 0x36, 0x20, 0x08, 0x1a, 0x84, 0x41, 0x1a, 0x88, 0x41, 0xd3, 0x8c, 0x01,
863 0x97, 0xb1, 0x37, 0xb6, 0x37, 0xb9, 0xaf, 0xb9, 0xb1, 0x30, 0xb6, 0xb2,
864 0x09, 0x02, 0x41, 0x6d, 0x40, 0x90, 0x35, 0x08, 0x03, 0x36, 0x10, 0x83,
865 0xa6, 0x19, 0x03, 0x3a, 0x74, 0x6f, 0x6e, 0x65, 0x6d, 0x61, 0x70, 0x5f,
866 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x13, 0x04, 0xa2, 0xda, 0x80, 0x20,
867 0x6e, 0x10, 0x06, 0x6f, 0x20, 0x06, 0x4d, 0x33, 0x06, 0x7c, 0xe8, 0xde,
868 0xdc, 0xca, 0xda, 0xc2, 0xe0, 0xbe, 0xcc, 0xc2, 0xc6, 0xe8, 0xde, 0xe4,
869 0x62, 0x26, 0x08, 0x84, 0xb5, 0x01, 0x41, 0xe2, 0x20, 0x0c, 0xe4, 0x40,
870 0x0c, 0x9a, 0x66, 0x0c, 0xf8, 0xd0, 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1,
871 0x7d, 0x99, 0x85, 0x8d, 0xd1, 0xbd, 0xc9, 0xc9, 0x4c, 0x10, 0x88, 0x6b,
872 0x03, 0x82, 0xd0, 0x41, 0x18, 0xd4, 0x81, 0x18, 0x34, 0xcd, 0x18, 0xf0,
873 0x99, 0x23, 0x93, 0xfb, 0xba, 0x43, 0x4b, 0xa3, 0x2b, 0xfb, 0x82, 0x7b,
874 0x4b, 0x73, 0xa3, 0x9b, 0x20, 0x10, 0xd8, 0x06, 0x04, 0xb9, 0x83, 0x30,
875 0xc0, 0x03, 0x31, 0x68, 0x9a, 0x31, 0xe0, 0x91, 0xf5, 0x66, 0x66, 0x36,
876 0x57, 0x46, 0x37, 0x41, 0x20, 0xb2, 0x0d, 0x08, 0xa2, 0x07, 0x61, 0xb0,
877 0x07, 0x62, 0xd0, 0x34, 0x63, 0x40, 0x43, 0x6a, 0xec, 0xad, 0xcc, 0xcc,
878 0x6c, 0x82, 0x40, 0x68, 0x1b, 0x10, 0xa4, 0x0f, 0xc2, 0xc0, 0x0f, 0xc4,
879 0xa0, 0x69, 0xc6, 0x80, 0xc6, 0xd1, 0xd8, 0x5b, 0x99, 0x99, 0xd9, 0x04,
880 0x81, 0xd8, 0x36, 0x20, 0x08, 0x28, 0x84, 0x41, 0x28, 0x88, 0x41, 0xd3,
881 0x8c, 0x01, 0x0d, 0xa1, 0xb1, 0xb7, 0x32, 0x33, 0xb3, 0x09, 0x02, 0xc1,
882 0x6d, 0x40, 0x90, 0x51, 0x08, 0x03, 0x52, 0x10, 0x83, 0xa6, 0x19, 0x83,
883 0x0d, 0xcd, 0x45, 0x06, 0x67, 0xa0, 0x06, 0x6d, 0x00, 0x07, 0x73, 0x60,
884 0x07, 0x79, 0xc0, 0x07, 0x7f, 0x20, 0x0a, 0xa5, 0xb0, 0x61, 0x20, 0x3e,
885 0x53, 0x98, 0x20, 0x08, 0xc0, 0x06, 0x60, 0xc3, 0x40, 0xa4, 0x42, 0x2a,
886 0x6c, 0x08, 0x54, 0x61, 0xc3, 0x30, 0xa0, 0xc2, 0x2a, 0x4c, 0x10, 0xcc,
887 0x80, 0x0d, 0x36, 0x04, 0xad, 0x40, 0xa2, 0x2d, 0x2c, 0xcd, 0x8d, 0xcb,
888 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04,
889 0xa1, 0x08, 0x83, 0x09, 0x42, 0x21, 0x06, 0x1b, 0x02, 0x62, 0x82, 0x50,
890 0x8c, 0xc1, 0x04, 0xa1, 0x20, 0x83, 0x0d, 0x0b, 0x01, 0x0b, 0xb1, 0x20,
891 0x0b, 0xb3, 0x40, 0x0b, 0x03, 0x2d, 0x10, 0xb5, 0x00, 0x10, 0xa1, 0x2a,
892 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0x65, 0xb0, 0x41,
893 0x08, 0x83, 0x30, 0xd8, 0xb0, 0x0c, 0xb7, 0x10, 0x0b, 0xb5, 0x30, 0x0b,
894 0xb8, 0x30, 0xe0, 0xc2, 0x50, 0x0b, 0xb9, 0xc0, 0x62, 0xe8, 0x89, 0xe9,
895 0x49, 0x6a, 0x82, 0x40, 0x74, 0x1b, 0x84, 0x30, 0xe0, 0x85, 0x0d, 0x0b,
896 0xb3, 0x0b, 0xb1, 0x50, 0x0b, 0xb3, 0x80, 0x0b, 0x03, 0x2d, 0x30, 0xb5,
897 0xd0, 0x0b, 0x1b, 0x06, 0x5b, 0xd0, 0x05, 0x5f, 0x60, 0x32, 0x65, 0xf5,
898 0x45, 0x15, 0x26, 0x77, 0x56, 0x46, 0x37, 0x41, 0x28, 0xcc, 0x60, 0xc3,
899 0x42, 0x80, 0x43, 0x2c, 0x84, 0xc3, 0x2c, 0xd4, 0xc2, 0x40, 0x0b, 0x44,
900 0x2d, 0xf4, 0xc2, 0x86, 0x40, 0x1c, 0x36, 0x0c, 0xbf, 0x30, 0x0e, 0xc0,
901 0x86, 0x02, 0x15, 0x5e, 0x81, 0x1c, 0x3c, 0x80, 0x88, 0x98, 0x5c, 0x98,
902 0xdb, 0x18, 0x5a, 0xd9, 0xdc, 0x04, 0x81, 0xf0, 0x68, 0x98, 0xb1, 0xbd,
903 0x85, 0xd1, 0xcd, 0x4d, 0x10, 0x88, 0x8f, 0x45, 0x9a, 0xdb, 0x1c, 0xdd,
904 0xdc, 0x04, 0x81, 0x00, 0x03, 0x1a, 0x73, 0x69, 0x67, 0x5f, 0x6c, 0x64,
905 0x34, 0xe6, 0xd2, 0xce, 0xbe, 0xe6, 0xe8, 0x88, 0xd0, 0x95, 0xe1, 0x7d,
906 0xb9, 0xbd, 0xc9, 0xb5, 0x6d, 0x60, 0xcc, 0xe1, 0x1c, 0xd0, 0x21, 0x1d,
907 0xd4, 0x61, 0x1d, 0xd8, 0x01, 0x69, 0x07, 0x33, 0x70, 0x87, 0x34, 0xa8,
908 0xc2, 0xc6, 0x66, 0xd7, 0xe6, 0x92, 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25,
909 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8, 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9,
910 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78, 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65,
911 0x72, 0x53, 0x82, 0xa2, 0x0e, 0x19, 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59,
912 0x99, 0x5c, 0xd3, 0x1b, 0x59, 0x19, 0xdb, 0x94, 0x00, 0x29, 0x43, 0x86,
913 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56, 0x27, 0x37, 0x56, 0x36, 0x37, 0x25,
914 0xe8, 0x2a, 0x91, 0xe1, 0xb9, 0xd0, 0xe5, 0xc1, 0x95, 0x05, 0xb9, 0xb9,
915 0xbd, 0xd1, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0xcd, 0x4d, 0x11, 0x4c, 0x61,
916 0x15, 0xea, 0x90, 0xe1, 0xb9, 0xd8, 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d,
917 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09, 0x5a, 0xa1, 0x0e, 0x19, 0x9e, 0x4b,
918 0x99, 0x1b, 0x9d, 0x5c, 0x1e, 0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94,
919 0x80, 0x1c, 0xba, 0x90, 0xe1, 0xb9, 0x8c, 0xbd, 0xd5, 0xb9, 0xd1, 0x95,
920 0xc9, 0xcd, 0x4d, 0x09, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00,
921 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c,
922 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80,
923 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed,
924 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d,
925 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83,
926 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78,
927 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70,
928 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc,
929 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3,
930 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c,
931 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83,
932 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03,
933 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68,
934 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60,
935 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80,
936 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98,
937 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec,
938 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c,
939 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d,
940 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43,
941 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03,
942 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03,
943 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28,
944 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4,
945 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1,
946 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x83, 0x81, 0xc8, 0x01, 0x1f,
947 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d, 0xdc, 0x40, 0x1c,
948 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00,
949 0x00, 0x66, 0x00, 0x0d, 0x97, 0xef, 0x3c, 0x7e, 0x80, 0x34, 0x40, 0x84,
950 0xf9, 0xc5, 0x6d, 0xdb, 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40,
951 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x5f,
952 0xdc, 0xb6, 0x25, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30,
953 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x04, 0xce, 0x70, 0xf9, 0xce, 0xe3,
954 0x0f, 0xce, 0x74, 0xfb, 0xc5, 0x6d, 0x5b, 0xc0, 0x34, 0x5c, 0xbe, 0xf3,
955 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x0d,
956 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, 0xb3, 0x10, 0x7e, 0x71,
957 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, 0x39, 0x11, 0x81,
958 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x86, 0x20, 0x0d, 0x97, 0xef,
959 0x3c, 0xfe, 0x44, 0x44, 0x13, 0x02, 0x44, 0x98, 0x5f, 0xdc, 0xb6, 0x15,
960 0x3c, 0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d,
961 0x1b, 0x00, 0xc1, 0x00, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
962 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
963 0x00, 0xf6, 0x87, 0x44, 0x46, 0xea, 0xee, 0x41, 0xc1, 0x02, 0x14, 0x2c,
964 0x02, 0xd5, 0xbb, 0x3a, 0xb7, 0x44, 0x58, 0x49, 0x4c, 0xdc, 0x13, 0x00,
965 0x00, 0x60, 0x00, 0x00, 0x00, 0xf7, 0x04, 0x00, 0x00, 0x44, 0x58, 0x49,
966 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc4, 0x13, 0x00,
967 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xee, 0x04, 0x00,
968 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00,
969 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32,
970 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b,
971 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32,
972 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14,
973 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e,
974 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5,
975 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00,
976 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8,
977 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86,
978 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00,
979 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08,
980 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x57, 0x00, 0x00,
981 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4,
982 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c,
983 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xa0, 0xc1, 0x08, 0x40, 0x09, 0x00,
984 0x0a, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40,
985 0x10, 0x44, 0x41, 0x90, 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4,
986 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98,
987 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70,
988 0xf9, 0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58,
989 0x0a, 0xa3, 0x10, 0x0c, 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0x4d,
990 0x41, 0x06, 0x62, 0x18, 0x86, 0x61, 0x18, 0xe8, 0x29, 0xc3, 0x40, 0x0c,
991 0x14, 0x15, 0x62, 0x20, 0x86, 0x81, 0xa6, 0xa3, 0x86, 0xcb, 0x9f, 0xb0,
992 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11,
993 0x31, 0x0c, 0xc3, 0x50, 0x88, 0x8a, 0x60, 0x08, 0xb2, 0x4a, 0x31, 0x10,
994 0xc3, 0x30, 0x10, 0x36, 0x47, 0x10, 0x14, 0x83, 0x21, 0x0a, 0x82, 0xd0,
995 0x68, 0x1b, 0x08, 0x18, 0x46, 0x20, 0x86, 0x99, 0xda, 0x60, 0x1c, 0xd8,
996 0x21, 0x1c, 0xe6, 0x61, 0x1e, 0xdc, 0x80, 0x16, 0xca, 0x01, 0x1f, 0xe8,
997 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca,
998 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde,
999 0x21, 0x1c, 0xe8, 0x81, 0x0d, 0xc0, 0x80, 0x0e, 0xfc, 0x00, 0x0c, 0xfc,
1000 0x40, 0x0f, 0xf4, 0xa0, 0x1d, 0xd2, 0x01, 0x1e, 0xe6, 0xe1, 0x17, 0xe8,
1001 0x21, 0x1f, 0xe0, 0xa1, 0x1c, 0x50, 0x40, 0xcc, 0x24, 0x06, 0xe3, 0xc0,
1002 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40,
1003 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, 0x50,
1004 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0,
1005 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, 0xe0,
1006 0x07, 0x48, 0xf0, 0x3e, 0x02, 0x2f, 0xe1, 0x9c, 0x46, 0x9a, 0x80, 0x66,
1007 0x92, 0x10, 0x33, 0x0c, 0xc3, 0x30, 0x0c, 0xc3, 0xe0, 0x79, 0x9e, 0x47,
1008 0xe2, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44,
1009 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0x20, 0x32, 0x1d, 0x88, 0x29, 0x00,
1010 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87,
1011 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0,
1012 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0,
1013 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20,
1014 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90,
1015 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30,
1016 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40,
1017 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0,
1018 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30,
1019 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
1020 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30,
1021 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00,
1022 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10,
1023 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10,
1024 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2,
1025 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
1026 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1027 0x60, 0xc8, 0x13, 0x01, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1028 0x00, 0xc0, 0x90, 0x67, 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
1029 0x00, 0x00, 0x80, 0x21, 0x8f, 0x05, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00,
1030 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0c, 0x08, 0x80, 0x00, 0x00, 0x00,
1031 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x1b, 0x10, 0x00, 0x03, 0x00,
1032 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x81, 0x00, 0x11, 0x00, 0x00,
1033 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26,
1034 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0,
1035 0x24, 0x0a, 0x38, 0xa0, 0x0c, 0xca, 0x83, 0x8a, 0x92, 0x28, 0x83, 0x42,
1036 0x18, 0x01, 0x28, 0x82, 0x02, 0xa1, 0x70, 0x06, 0x80, 0xc6, 0x19, 0x00,
1037 0x2a, 0x67, 0x00, 0xc8, 0x1c, 0xcb, 0x61, 0x08, 0x00, 0x00, 0x80, 0xe7,
1038 0x01, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00,
1039 0x00, 0x71, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13,
1040 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b,
1041 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b,
1042 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9,
1043 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13,
1044 0x04, 0x42, 0x99, 0x20, 0x10, 0xcb, 0x06, 0x61, 0x20, 0x26, 0x08, 0x04,
1045 0xb3, 0x41, 0x18, 0x0c, 0x0a, 0x70, 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26,
1046 0x08, 0x61, 0x80, 0x11, 0x98, 0x20, 0x10, 0xcd, 0x04, 0x81, 0x70, 0x36,
1047 0x08, 0x44, 0xb3, 0x21, 0x21, 0x94, 0x85, 0x20, 0x06, 0x86, 0x70, 0x36,
1048 0x24, 0x83, 0xb2, 0x10, 0xc3, 0xc0, 0x10, 0xce, 0x86, 0x84, 0x51, 0x16,
1049 0x82, 0x19, 0x18, 0xc2, 0xd9, 0x30, 0x3c, 0x50, 0x34, 0x41, 0x18, 0x83,
1050 0x6c, 0x82, 0x40, 0x3c, 0x1b, 0x10, 0x62, 0x5a, 0x88, 0x61, 0xa0, 0x80,
1051 0x0d, 0x41, 0x35, 0x41, 0x28, 0x03, 0x6d, 0x03, 0x42, 0x5c, 0x0b, 0x41,
1052 0x0c, 0x04, 0xb0, 0x21, 0xc0, 0x36, 0x10, 0x12, 0x60, 0x65, 0x13, 0x04,
1053 0x33, 0xd8, 0x36, 0x04, 0xdb, 0x04, 0x41, 0x00, 0x48, 0xb4, 0x85, 0xa5,
1054 0xb9, 0x71, 0x99, 0xb2, 0xfa, 0x82, 0x7a, 0x9b, 0x4b, 0xa3, 0x4b, 0x7b,
1055 0x73, 0x9b, 0x20, 0x14, 0xd2, 0x04, 0xa1, 0x98, 0x36, 0x04, 0xc4, 0x04,
1056 0xa1, 0xa0, 0x26, 0x08, 0x45, 0xb5, 0x61, 0x21, 0x3e, 0x30, 0x08, 0x03,
1057 0x31, 0x18, 0x83, 0x61, 0x0c, 0x08, 0x32, 0x00, 0x88, 0x50, 0x15, 0x61,
1058 0x0d, 0x3d, 0x3d, 0x49, 0x11, 0x4d, 0x10, 0x0a, 0x6b, 0x82, 0x40, 0x40,
1059 0x1b, 0x04, 0x34, 0x40, 0x83, 0x0d, 0xcb, 0x60, 0x06, 0x60, 0x40, 0x06,
1060 0x62, 0x70, 0x06, 0xc3, 0x19, 0x0c, 0x64, 0x90, 0x06, 0x2c, 0x86, 0x9e,
1061 0x98, 0x9e, 0xa4, 0x26, 0x08, 0x44, 0xb4, 0x41, 0x40, 0x03, 0x36, 0xd8,
1062 0xb0, 0x30, 0x6b, 0x00, 0x06, 0x64, 0x20, 0x06, 0x67, 0x30, 0x8c, 0x01,
1063 0x43, 0x06, 0x6d, 0xb0, 0x61, 0x28, 0x03, 0x35, 0x70, 0x03, 0x26, 0x53,
1064 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x13, 0x84, 0xe2, 0xda,
1065 0xb0, 0x10, 0x70, 0x00, 0x06, 0x71, 0x20, 0x06, 0x64, 0x30, 0x8c, 0x01,
1066 0x41, 0x06, 0x6d, 0xb0, 0x21, 0x90, 0x83, 0x0d, 0xc3, 0x1b, 0xcc, 0x01,
1067 0xb0, 0xa1, 0xe8, 0x3c, 0x3a, 0xd0, 0x80, 0x2a, 0x6c, 0x6c, 0x76, 0x6d,
1068 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e,
1069 0x8b, 0x5d, 0x99, 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42,
1070 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x30, 0xea,
1071 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91,
1072 0x95, 0xb1, 0x4d, 0x09, 0x90, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73,
1073 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x82, 0xac, 0x0e, 0x19, 0x9e,
1074 0x8b, 0x5d, 0x5a, 0xd9, 0x5d, 0x12, 0xd9, 0x14, 0x5d, 0x18, 0x5d, 0xd9,
1075 0x94, 0x60, 0xab, 0x43, 0x86, 0xe7, 0x52, 0xe6, 0x46, 0x27, 0x97, 0x07,
1076 0xf5, 0x96, 0xe6, 0x46, 0x37, 0x37, 0x25, 0xa0, 0x03, 0x00, 0x00, 0x00,
1077 0x00, 0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80,
1078 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84,
1079 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c,
1080 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42,
1081 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88,
1082 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c,
1083 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79,
1084 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70,
1085 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f,
1086 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4,
1087 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30,
1088 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc,
1089 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b,
1090 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70,
1091 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76,
1092 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72,
1093 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e,
1094 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1,
1095 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21,
1096 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8,
1097 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94,
1098 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc,
1099 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c,
1100 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e,
1101 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e,
1102 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x83,
1103 0x81, 0xc8, 0x01, 0x1f, 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61,
1104 0x1d, 0xdc, 0x40, 0x1c, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00,
1105 0x00, 0x26, 0x00, 0x00, 0x00, 0x66, 0x00, 0x0d, 0x97, 0xef, 0x3c, 0x7e,
1106 0x80, 0x34, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0xdb, 0xc1, 0x36, 0x5c, 0xbe,
1107 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84,
1108 0x01, 0x08, 0x98, 0x5f, 0xdc, 0xb6, 0x25, 0x48, 0xc3, 0xe5, 0x3b, 0x8f,
1109 0x2f, 0x44, 0x04, 0x30, 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x04, 0xce,
1110 0x70, 0xf9, 0xce, 0xe3, 0x0f, 0xce, 0x74, 0xfb, 0xc5, 0x6d, 0x5b, 0xc0,
1111 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93,
1112 0x5f, 0xdc, 0xb6, 0x0d, 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc,
1113 0xb3, 0x10, 0x7e, 0x71, 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe,
1114 0x34, 0x39, 0x11, 0x81, 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x86,
1115 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0x44, 0x44, 0x13, 0x02, 0x44, 0x98,
1116 0x5f, 0xdc, 0xb6, 0x15, 0x3c, 0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40,
1117 0x84, 0xf9, 0xc5, 0x6d, 0x1b, 0x00, 0xc1, 0x00, 0x48, 0x03, 0x00, 0x00,
1118 0x00, 0x61, 0x20, 0x00, 0x00, 0x29, 0x03, 0x00, 0x00, 0x13, 0x04, 0x7b,
1119 0x10, 0x0b, 0x04, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0xa4, 0x8d, 0x00,
1120 0x50, 0x51, 0x02, 0x44, 0x94, 0x51, 0xc9, 0x95, 0x43, 0x29, 0x14, 0x5e,
1121 0xb9, 0x15, 0xc2, 0x0c, 0x40, 0xa9, 0x94, 0x4b, 0xd9, 0x15, 0x17, 0x0d,
1122 0x63, 0x04, 0x20, 0x08, 0xe3, 0xe1, 0x18, 0x8c, 0x11, 0x98, 0xf7, 0xba,
1123 0xca, 0xde, 0x18, 0x41, 0xcc, 0x83, 0x7d, 0xee, 0x8d, 0x11, 0xb8, 0x7d,
1124 0x2c, 0xda, 0xde, 0x18, 0xc1, 0xbb, 0xa7, 0xe5, 0xfd, 0x8d, 0x11, 0xe8,
1125 0xac, 0x39, 0x87, 0x60, 0x30, 0x46, 0x00, 0x82, 0x20, 0x48, 0x82, 0xc1,
1126 0x18, 0x81, 0x98, 0x8b, 0x69, 0xff, 0x8d, 0x11, 0x80, 0x25, 0xcf, 0xc6,
1127 0xbf, 0x30, 0x46, 0x30, 0xa6, 0xab, 0x9a, 0xfb, 0xc2, 0x18, 0xc1, 0x3f,
1128 0x93, 0xfe, 0xef, 0x0b, 0x63, 0x04, 0x74, 0x0d, 0x8a, 0xf9, 0x37, 0x46,
1129 0xd0, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x18, 0xc1, 0xdc, 0xb7, 0x69, 0xea,
1130 0x0b, 0x63, 0x04, 0xad, 0x1b, 0xf2, 0xbc, 0x2f, 0x8c, 0x11, 0xf0, 0x39,
1131 0xeb, 0xe3, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0x0a, 0x06, 0x63, 0x04,
1132 0x2c, 0x7b, 0x86, 0xf2, 0x37, 0x46, 0x80, 0xfa, 0x65, 0xac, 0x7e, 0x63,
1133 0x04, 0xf9, 0xa9, 0x8b, 0xb3, 0x37, 0x46, 0xa0, 0xd7, 0xe0, 0x8e, 0x7b,
1134 0x63, 0x04, 0x2a, 0x9e, 0xdb, 0xf6, 0x37, 0x46, 0xf0, 0xf6, 0x29, 0x3d,
1135 0x7a, 0x63, 0x04, 0xeb, 0x1c, 0xb3, 0xa8, 0x37, 0x46, 0x90, 0x86, 0x30,
1136 0xba, 0x7b, 0x63, 0x04, 0x77, 0x1b, 0xab, 0xf6, 0x37, 0x46, 0xb0, 0x8e,
1137 0x78, 0xcc, 0x82, 0xc1, 0x18, 0x01, 0x08, 0xd2, 0x6d, 0x0e, 0x06, 0x63,
1138 0x04, 0x20, 0x08, 0xae, 0x39, 0x18, 0x8c, 0x11, 0x80, 0x20, 0xc8, 0xd6,
1139 0xbf, 0x30, 0x46, 0xc0, 0xb6, 0xf3, 0x4f, 0x7a, 0x63, 0x04, 0x20, 0x08,
1140 0x82, 0x20, 0x18, 0x8c, 0x11, 0xb8, 0x7d, 0x2c, 0xda, 0xbe, 0x30, 0x46,
1141 0xd0, 0xc7, 0xa2, 0x8b, 0x7f, 0x63, 0x04, 0xb5, 0x5a, 0xab, 0xed, 0x37,
1142 0x46, 0x20, 0x8b, 0x6e, 0x4f, 0x83, 0xc1, 0x18, 0x01, 0x0f, 0xaf, 0x3a,
1143 0xdd, 0x8d, 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x0c, 0x00,
1144 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xb0, 0xa5, 0xc2, 0x1c, 0xf4,
1145 0x41, 0x29, 0x94, 0x82, 0x1d, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0xc1,
1146 0xa6, 0x0a, 0x74, 0xe0, 0x07, 0xa9, 0x90, 0x0a, 0x77, 0x30, 0x62, 0x90,
1147 0x00, 0x20, 0x08, 0x06, 0xdb, 0x2a, 0xd4, 0xc1, 0x1f, 0xa4, 0x42, 0x2a,
1148 0xe0, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x6c, 0xac, 0x60, 0x07,
1149 0xa2, 0xa0, 0x0a, 0xaa, 0x90, 0x07, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60,
1150 0xb0, 0xb5, 0xc2, 0x1d, 0x80, 0xc2, 0x2a, 0xb0, 0x82, 0x1e, 0x8c, 0x18,
1151 0x24, 0x00, 0x08, 0x82, 0x81, 0x61, 0x0b, 0x73, 0xa0, 0x0a, 0xac, 0x20,
1152 0x0a, 0x72, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x2d, 0xd0,
1153 0xc1, 0x2a, 0xb4, 0xc2, 0x1e, 0xcc, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20,
1154 0x18, 0x18, 0xb8, 0x50, 0x07, 0xac, 0xe0, 0x0a, 0xa3, 0x40, 0x07, 0x23,
1155 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0xe4, 0x82, 0x1d, 0xb4, 0xc2, 0x2b,
1156 0x9c, 0x42, 0x1d, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0xa1, 0x0b,
1157 0x77, 0x10, 0x0b, 0xb0, 0x60, 0x0a, 0x76, 0x30, 0x62, 0x90, 0x00, 0x20,
1158 0x08, 0x06, 0xc6, 0x2e, 0xe0, 0x81, 0x2c, 0xc4, 0xc2, 0x1f, 0xdc, 0xc1,
1159 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x58, 0xb6, 0x50, 0x07, 0x87, 0x2c,
1160 0x8c, 0x26, 0x04, 0xc1, 0x70, 0x44, 0x00, 0x05, 0xdf, 0x2c, 0x43, 0x12,
1161 0x04, 0xc3, 0x11, 0x02, 0x14, 0x7c, 0xb3, 0x0c, 0xc2, 0x10, 0x8c, 0x18,
1162 0x3c, 0x00, 0x08, 0x82, 0x41, 0xe3, 0x0b, 0x7f, 0xd0, 0x30, 0x46, 0x01,
1163 0x41, 0xb6, 0x60, 0x0b, 0x7c, 0x00, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82,
1164 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0xcc, 0x12, 0x24, 0xc3,
1165 0x11, 0x48, 0x17, 0x7c, 0xb3, 0x0c, 0x44, 0x11, 0x8c, 0x18, 0x3c, 0x00,
1166 0x08, 0x82, 0x41, 0x43, 0x0e, 0xa5, 0x30, 0x49, 0xcc, 0x62, 0x59, 0xbc,
1167 0xc0, 0x0b, 0xa2, 0x60, 0x8d, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x03, 0x80,
1168 0x20, 0x18, 0x34, 0xe6, 0x70, 0x0a, 0x16, 0xe5, 0x34, 0x18, 0xe6, 0x0b,
1169 0xbe, 0x40, 0x0a, 0xd8, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x88,
1170 0xc1, 0x01, 0x80, 0x20, 0x18, 0x58, 0xe5, 0x40, 0x0a, 0xd6, 0x2f, 0x8c,
1171 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0x82, 0x0d, 0x08,
1172 0x7c, 0x6c, 0x38, 0xe0, 0x63, 0xc3, 0x01, 0x9f, 0x11, 0x83, 0x03, 0x00,
1173 0x41, 0x30, 0xb0, 0xd8, 0x61, 0x15, 0xba, 0x71, 0x18, 0x4d, 0x08, 0x80,
1174 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, 0x11, 0x83, 0x05, 0x00, 0x41,
1175 0x30, 0x78, 0xe6, 0x81, 0x16, 0x0e, 0xa3, 0x18, 0x84, 0x60, 0xc4, 0xe0,
1176 0x00, 0x40, 0x10, 0x0c, 0xac, 0x78, 0x80, 0x05, 0x31, 0xa0, 0x85, 0xd1,
1177 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, 0x84, 0x41, 0x18, 0x31, 0x58,
1178 0x00, 0x10, 0x04, 0x83, 0x07, 0x1f, 0x72, 0x81, 0x59, 0x94, 0x41, 0x08,
1179 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xc0, 0xb2, 0x87, 0x5a, 0x38, 0x03,
1180 0x5e, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84,
1181 0x11, 0x83, 0x05, 0x00, 0x41, 0x30, 0x78, 0xfa, 0xc1, 0x17, 0x22, 0xe8,
1182 0x19, 0x84, 0x60, 0x96, 0x20, 0x19, 0x8e, 0x20, 0x03, 0x59, 0x08, 0xbe,
1183 0x59, 0x06, 0xe3, 0x08, 0x46, 0x0c, 0x1e, 0x00, 0x04, 0xc1, 0xa0, 0x01,
1184 0x89, 0x70, 0x78, 0x03, 0x37, 0x40, 0x83, 0x33, 0x90, 0x03, 0x39, 0xc0,
1185 0x07, 0x7c, 0xf0, 0x05, 0x39, 0x18, 0x4d, 0x08, 0x80, 0x11, 0x83, 0x07,
1186 0x00, 0x41, 0x30, 0x68, 0x44, 0x62, 0x1c, 0xe4, 0x00, 0x0e, 0xd4, 0x20,
1187 0x0d, 0xe8, 0x80, 0x0e, 0xf4, 0x41, 0x1f, 0xc0, 0x81, 0x0e, 0x46, 0x13,
1188 0x02, 0x60, 0x34, 0x41, 0x08, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xc0,
1189 0x0a, 0x09, 0x70, 0x90, 0x83, 0x7d, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04,
1190 0x21, 0x18, 0x4d, 0x18, 0x04, 0x1b, 0x10, 0xf8, 0xd8, 0x60, 0xc0, 0xc7,
1191 0x06, 0x04, 0x3e, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x60, 0xa1, 0xc4,
1192 0x39, 0xe4, 0xc1, 0x3f, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c,
1193 0x26, 0x0c, 0xc2, 0x88, 0xc1, 0x02, 0x80, 0x20, 0x18, 0x3c, 0x2f, 0x01,
1194 0x0f, 0x87, 0x51, 0x0c, 0x42, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06,
1195 0x56, 0x4b, 0xb0, 0x83, 0x1f, 0xc0, 0xc3, 0x68, 0x42, 0x00, 0x8c, 0x26,
1196 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x18, 0x2c, 0x00, 0x08, 0x82, 0xc1,
1197 0x43, 0x13, 0xf5, 0xc0, 0x2c, 0xca, 0x20, 0x04, 0x23, 0x06, 0x07, 0x00,
1198 0x82, 0x60, 0x60, 0xc9, 0x44, 0x3c, 0x8c, 0x02, 0x3e, 0x8c, 0x26, 0x04,
1199 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x88, 0xc1, 0x02, 0x80,
1200 0x20, 0x18, 0x3c, 0x39, 0xa1, 0x0f, 0x11, 0xf4, 0x0c, 0x42, 0x30, 0x4b,
1201 0x90, 0x0c, 0x47, 0x80, 0x02, 0x39, 0x04, 0xdf, 0x2c, 0x03, 0x92, 0x04,
1202 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0xf0, 0x44, 0x3f, 0xac, 0x82,
1203 0x2a, 0x90, 0xc2, 0x28, 0xb8, 0x82, 0x2b, 0xd0, 0x04, 0x4d, 0xe8, 0x83,
1204 0x2b, 0x8c, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, 0x34,
1205 0x3e, 0xf1, 0x0f, 0xae, 0xc0, 0x0a, 0xa6, 0x50, 0x0a, 0xb0, 0x00, 0x0b,
1206 0x36, 0x61, 0x13, 0xfc, 0x00, 0x0b, 0xa3, 0x09, 0x01, 0x30, 0x62, 0xf0,
1207 0x00, 0x20, 0x08, 0x06, 0x0d, 0x58, 0x84, 0x44, 0x2c, 0xb8, 0x02, 0x2a,
1208 0x9c, 0x82, 0x2c, 0xc8, 0x02, 0x4e, 0xe0, 0x84, 0x3f, 0xc8, 0xc2, 0x68,
1209 0x42, 0x00, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x81, 0xe5, 0x13, 0xfd,
1210 0xf0, 0x0a, 0x38, 0x31, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a,
1211 0x30, 0x08, 0x36, 0x24, 0xf0, 0xb1, 0x01, 0x81, 0x8f, 0x0d, 0x07, 0x7c,
1212 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xc0, 0x2a, 0x0b, 0x92, 0xb0, 0x05,
1213 0x9e, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84,
1214 0x11, 0x83, 0x05, 0x00, 0x41, 0x30, 0x78, 0xd8, 0xa2, 0x25, 0x0e, 0xa3,
1215 0x18, 0x84, 0x60, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x2c, 0xb5, 0x48,
1216 0x89, 0x5d, 0x68, 0x89, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1,
1217 0x84, 0x41, 0x18, 0x31, 0x58, 0x00, 0x10, 0x04, 0x83, 0x27, 0x2e, 0x64,
1218 0x82, 0x59, 0x94, 0x41, 0x08, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xc0,
1219 0x7a, 0x0b, 0x97, 0x00, 0x87, 0x9a, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04,
1220 0x21, 0x18, 0x4d, 0x18, 0x84, 0x11, 0x83, 0x05, 0x00, 0x41, 0x30, 0x78,
1221 0xec, 0xe2, 0x26, 0x22, 0xe8, 0x19, 0x84, 0x60, 0x96, 0x20, 0x19, 0xa8,
1222 0x19, 0xe4, 0x42, 0x40, 0x09, 0x02, 0x16, 0x0c, 0x0b, 0xb1, 0x0d, 0xc0,
1223 0x36, 0x8e, 0x81, 0x9a, 0x41, 0x2e, 0x04, 0x90, 0x20, 0x50, 0xc1, 0x70,
1224 0x10, 0xdc, 0x00, 0x74, 0xe3, 0x18, 0xa8, 0x19, 0xe4, 0x42, 0xc0, 0x07,
1225 0x02, 0x14, 0x0c, 0x03, 0xd1, 0x0d, 0x80, 0x37, 0x8e, 0x81, 0x9a, 0x41,
1226 0x2e, 0x04, 0xde, 0x20, 0x78, 0xc3, 0xe0, 0x0d, 0x84, 0x37, 0x00, 0xde,
1227 0x38, 0x46, 0x13, 0xc4, 0x41, 0x18, 0x8e, 0x08, 0x60, 0x22, 0xf8, 0x66,
1228 0x19, 0x94, 0x25, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x88, 0x2f,
1229 0xea, 0xc2, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xa8, 0x2f, 0xec,
1230 0xc2, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xc8, 0x2f, 0xee, 0xc2,
1231 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xe8, 0x2f, 0x7a, 0x62, 0x18,
1232 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x08, 0x34, 0x7c, 0x62, 0x18, 0x31,
1233 0x30, 0x00, 0x10, 0x04, 0x83, 0x28, 0x34, 0x7e, 0x62, 0xb0, 0xe1, 0x1f,
1234 0xe4, 0x63, 0x03, 0x48, 0xc8, 0xc7, 0x86, 0x90, 0x90, 0xcf, 0x88, 0x81,
1235 0x01, 0x80, 0x20, 0x18, 0x44, 0xa5, 0x41, 0x16, 0xc3, 0x88, 0x81, 0x01,
1236 0x80, 0x20, 0x18, 0x44, 0xa6, 0x51, 0x16, 0xc3, 0x88, 0x81, 0x01, 0x80,
1237 0x20, 0x18, 0x44, 0xa7, 0x61, 0x16, 0x83, 0x0d, 0x26, 0x01, 0x1f, 0x1b,
1238 0x4e, 0x02, 0x3e, 0x36, 0xa0, 0x04, 0x7c, 0x46, 0x0c, 0x0e, 0x00, 0x04,
1239 0xc1, 0x60, 0x52, 0x0d, 0xb9, 0x18, 0x42, 0x62, 0xc4, 0xe0, 0x00, 0x40,
1240 0x10, 0x0c, 0xa6, 0xd5, 0x98, 0x8b, 0x41, 0x24, 0x46, 0x0c, 0x0e, 0x00,
1241 0x04, 0xc1, 0x60, 0x62, 0x0d, 0xba, 0x18, 0x46, 0xc2, 0x92, 0x96, 0x90,
1242 0x8f, 0x25, 0x2e, 0x21, 0x1f, 0x4b, 0x5e, 0x42, 0x3e, 0x16, 0x13, 0x43,
1243 0x7c, 0x4c, 0x26, 0x86, 0xf8, 0xd8, 0x4c, 0x0c, 0xf1, 0xb1, 0x64, 0xa0,
1244 0x8f, 0x25, 0x03, 0x7d, 0x2c, 0x19, 0xe8, 0x33, 0x62, 0x60, 0x00, 0x20,
1245 0x08, 0x06, 0xd1, 0x6d, 0xc0, 0xc6, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08,
1246 0x06, 0x11, 0x6e, 0xc4, 0xc6, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06,
1247 0x51, 0x6e, 0xc8, 0xc6, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x91,
1248 0x6e, 0xe0, 0xc5, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0xd1, 0x6e,
1249 0xe4, 0xc5, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x11, 0x6f, 0xe8,
1250 0xc5, 0x60, 0x83, 0x4f, 0xc8, 0xc7, 0x86, 0x9f, 0x90, 0x8f, 0x0d, 0x60,
1251 0x21, 0x9f, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, 0xc0, 0xe3, 0x2f,
1252 0x86, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, 0xc2, 0x03, 0x34, 0x86,
1253 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, 0xc4, 0x23, 0x34, 0x06, 0x1b,
1254 0xfc, 0x42, 0x3e, 0x36, 0xfc, 0x85, 0x7c, 0x6c, 0x00, 0x0d, 0xf9, 0x8c,
1255 0x18, 0x1c, 0x00, 0x08, 0x82, 0x81, 0x45, 0x1e, 0xa3, 0x51, 0x13, 0xe1,
1256 0x31, 0x9a, 0x10, 0x0c, 0x56, 0x04, 0xf4, 0xb1, 0x42, 0xa0, 0x8f, 0x15,
1257 0x03, 0x7d, 0x66, 0x09, 0x96, 0x81, 0x8a, 0xc1, 0x50, 0xd4, 0x21, 0x19,
1258 0xa8, 0x18, 0x0c, 0x45, 0x1d, 0x92, 0x81, 0x8a, 0xc1, 0x50, 0xd4, 0x21,
1259 0x19, 0x31, 0x38, 0x00, 0x10, 0x04, 0x03, 0x8b, 0x3d, 0x56, 0xa3, 0x27,
1260 0xd2, 0x63, 0x34, 0x21, 0x00, 0x86, 0x23, 0x02, 0xb3, 0x70, 0xbe, 0x59,
1261 0x06, 0xa6, 0x0a, 0x86, 0x23, 0x04, 0xb3, 0x08, 0xbe, 0x59, 0x86, 0xc6,
1262 0x09, 0x46, 0x13, 0x88, 0xc0, 0x02, 0x44, 0x3e, 0x26, 0x20, 0xf2, 0xb1,
1263 0x01, 0x91, 0xcf, 0x2c, 0x41, 0x35, 0x1c, 0x71, 0xc8, 0x45, 0xf0, 0xcd,
1264 0x32, 0x3c, 0x55, 0x30, 0x1c, 0xd1, 0x07, 0x73, 0x11, 0x7c, 0xb3, 0x0c,
1265 0x50, 0x14, 0x58, 0x23, 0x1a, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04,
1266 0x03, 0xcc, 0x3e, 0x6a, 0x43, 0x34, 0x9a, 0x60, 0xc4, 0x00, 0x01, 0x40,
1267 0x10, 0x0c, 0xb0, 0xfb, 0xb0, 0x0d, 0xd1, 0x68, 0x02, 0x83, 0x44, 0x43,
1268 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0xe5, 0x07, 0x6e, 0x88,
1269 0x06, 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0x01, 0xa6, 0x1f, 0xb9,
1270 0x21, 0x1a, 0x50, 0x60, 0x93, 0x68, 0xc8, 0x67, 0xc4, 0x00, 0x01, 0x40,
1271 0x10, 0x0c, 0x30, 0xfe, 0xd8, 0x0d, 0xd1, 0x98, 0x82, 0x11, 0x03, 0x04,
1272 0x00, 0x41, 0x30, 0xc0, 0xfa, 0x83, 0x37, 0x44, 0x63, 0x0a, 0x66, 0x09,
1273 0xa2, 0x81, 0x8a, 0xc1, 0x81, 0xd8, 0xe0, 0x19, 0xa8, 0x18, 0x14, 0x88,
1274 0x0d, 0x9e, 0x81, 0x8a, 0xc1, 0x80, 0xd8, 0xe0, 0x19, 0x31, 0x38, 0x00,
1275 0x10, 0x04, 0x83, 0x69, 0x44, 0xd6, 0x43, 0x08, 0x46, 0x0c, 0x0e, 0x00,
1276 0x04, 0xc1, 0x60, 0x22, 0x11, 0xf6, 0x20, 0x82, 0xe1, 0x88, 0x80, 0x2f,
1277 0x84, 0x6f, 0x96, 0x41, 0x9a, 0x82, 0xd1, 0x84, 0x2c, 0xb0, 0x60, 0x90,
1278 0x8f, 0x05, 0x7e, 0x01, 0x9f, 0xd1, 0x04, 0x4e, 0xb0, 0xc0, 0x90, 0x8f,
1279 0x05, 0xa1, 0x01, 0x1f, 0x23, 0x02, 0xfa, 0x58, 0xd0, 0xc8, 0xc7, 0x84,
1280 0x46, 0x3e, 0x36, 0x34, 0xf2, 0x99, 0x25, 0x98, 0x06, 0x2a, 0x06, 0x43,
1281 0x02, 0x83, 0x68, 0xa0, 0x62, 0x30, 0x24, 0x30, 0x88, 0x06, 0x2a, 0x06,
1282 0x43, 0x02, 0x83, 0x68, 0x96, 0x81, 0xaa, 0x3a, 0x1b, 0xd0, 0x43, 0x3e,
1283 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0xc9, 0x48, 0x7c, 0xa0, 0xc7,
1284 0x10, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0x01, 0x36, 0x23, 0xf2, 0x81,
1285 0x1e, 0x43, 0x60, 0x06, 0x7a, 0xc8, 0x67, 0xc4, 0x00, 0x01, 0x40, 0x10,
1286 0x0c, 0xb0, 0x1a, 0xa1, 0x0f, 0xf4, 0x30, 0x82, 0x11, 0x03, 0x04, 0x00,
1287 0x41, 0x30, 0xc0, 0x6c, 0xa4, 0x3e, 0xd0, 0xc3, 0x08, 0x2c, 0x41, 0x0f,
1288 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0x01, 0x86, 0x23, 0xf7, 0x81,
1289 0x1e, 0x49, 0x30, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x58, 0x8e, 0xe0,
1290 0x07, 0x7a, 0x24, 0xc1, 0x2c, 0x41, 0x35, 0xd0, 0x32, 0x90, 0xc3, 0x42,
1291 0x0b, 0x8d, 0x43, 0x61, 0x13, 0x39, 0x38, 0x03, 0x2d, 0x03, 0x39, 0x2c,
1292 0xb4, 0xd0, 0x28, 0x14, 0x36, 0x91, 0x83, 0x33, 0xd0, 0x32, 0x90, 0xc3,
1293 0x42, 0x0b, 0x8d, 0x41, 0x61, 0x13, 0x39, 0x38, 0xc3, 0x11, 0xe6, 0x50,
1294 0x1b, 0xc1, 0x37, 0xcb, 0x60, 0x85, 0x41, 0x30, 0x9a, 0x90, 0x1a, 0xc0,
1295 0x70, 0x44, 0x80, 0x1b, 0xce, 0x37, 0xcb, 0x70, 0x81, 0x41, 0x30, 0x1c,
1296 0x61, 0xf4, 0x87, 0xf2, 0xcd, 0x32, 0x64, 0x58, 0x60, 0x47, 0x7f, 0xc8,
1297 0x67, 0x96, 0x40, 0x33, 0xa4, 0x3f, 0xe0, 0x33, 0x62, 0x60, 0x00, 0x20,
1298 0x08, 0x06, 0x91, 0x99, 0xfc, 0x48, 0x60, 0x81, 0x7f, 0xc8, 0x67, 0xc4,
1299 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x22, 0x34, 0x31, 0x91, 0xc0, 0x82, 0xff,
1300 0x90, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0x6a, 0x92, 0x22,
1301 0xc1, 0x2c, 0x81, 0x36, 0x50, 0x31, 0x38, 0x98, 0x90, 0x0d, 0x47, 0x38,
1302 0x26, 0xa2, 0x7c, 0xb3, 0x0c, 0xdc, 0x16, 0xd8, 0x63, 0x22, 0xf2, 0x99,
1303 0x25, 0xe8, 0x0c, 0x32, 0x11, 0xf8, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82,
1304 0x41, 0xf4, 0x26, 0x68, 0x12, 0x58, 0x70, 0x22, 0xf2, 0x19, 0x31, 0x30,
1305 0x00, 0x10, 0x04, 0x83, 0x28, 0x4e, 0x5e, 0x24, 0xb0, 0x00, 0x45, 0xe4,
1306 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0xd1, 0x9c, 0xc8, 0x48, 0x30,
1307 0x4b, 0xd0, 0x0d, 0x54, 0x0c, 0xce, 0x26, 0x70, 0xc3, 0x11, 0xd6, 0x8b,
1308 0x28, 0xdf, 0x2c, 0xc3, 0xe7, 0x05, 0x76, 0xbd, 0x88, 0x7c, 0x66, 0x09,
1309 0xc0, 0xc0, 0xb0, 0x17, 0x81, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18,
1310 0x44, 0x78, 0x12, 0x27, 0x81, 0x05, 0x30, 0x22, 0x9f, 0x11, 0x03, 0x03,
1311 0x00, 0x41, 0x30, 0x88, 0xf4, 0x04, 0x47, 0x02, 0x0b, 0x62, 0x44, 0x3e,
1312 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0x10, 0xf1, 0xc9, 0x8e, 0x04, 0xb3,
1313 0x04, 0x60, 0x30, 0xd0, 0x31, 0x80, 0x82, 0x45, 0x06, 0x1f, 0x19, 0x78,
1314 0x03, 0x1d, 0x03, 0x28, 0x58, 0xd4, 0x47, 0x79, 0x03, 0x1d, 0x03, 0x28,
1315 0x58, 0xc6, 0x27, 0x79, 0xa3, 0x09, 0xe8, 0x31, 0x58, 0x40, 0xc8, 0xc7,
1316 0x04, 0x42, 0x3e, 0x36, 0x10, 0xf2, 0x99, 0x25, 0xd0, 0x83, 0xe1, 0x08,
1317 0x95, 0x00, 0x91, 0xe0, 0x1b, 0x4d, 0x68, 0x8f, 0x61, 0x96, 0x41, 0x0c,
1318 0xda, 0x40, 0xb0, 0x20, 0x0d, 0xe4, 0x63, 0x42, 0x1a, 0xc8, 0xc7, 0x86,
1319 0x34, 0x90, 0xcf, 0x68, 0x42, 0x7c, 0x00, 0xc3, 0x11, 0x01, 0x88, 0x38,
1320 0xdf, 0x2c, 0x83, 0x1e, 0x8c, 0x41, 0x30, 0x1c, 0x51, 0x88, 0x88, 0xf2,
1321 0xcd, 0x32, 0x94, 0x01, 0x19, 0x04, 0x66, 0x90, 0x88, 0x7c, 0x66, 0x09,
1322 0xcc, 0x60, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0xa2, 0x56, 0x31, 0x95,
1323 0x63, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x22, 0x57, 0x61, 0x93, 0xc0,
1324 0x02, 0x14, 0x91, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0xb0,
1325 0xf2, 0x26, 0x81, 0x05, 0x2b, 0x22, 0x1f, 0x0b, 0x5a, 0x04, 0x3e, 0xb3,
1326 0x04, 0x66, 0x30, 0x50, 0x31, 0x38, 0x64, 0x20, 0x94, 0xc1, 0x70, 0x44,
1327 0xb3, 0x22, 0xca, 0x37, 0xcb, 0x80, 0x06, 0x67, 0x10, 0x98, 0xd3, 0x22,
1328 0xf2, 0x99, 0x25, 0x48, 0x83, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88,
1329 0x6c, 0xe5, 0x55, 0x9e, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x88, 0x6e,
1330 0xa5, 0x4e, 0x02, 0x0b, 0x62, 0x44, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82,
1331 0x60, 0x10, 0xe5, 0x0a, 0x9e, 0x04, 0x16, 0xd0, 0x88, 0x7c, 0x2c, 0xb0,
1332 0x11, 0xf8, 0xcc, 0x12, 0xa4, 0xc1, 0x40, 0xc5, 0xe0, 0x9c, 0x81, 0x80,
1333 0x06, 0xc3, 0x11, 0x15, 0x8d, 0x28, 0xdf, 0x2c, 0xc3, 0x1a, 0xa8, 0x41,
1334 0x60, 0x96, 0x8d, 0xc8, 0x67, 0x96, 0x80, 0x0d, 0x46, 0x0c, 0x0c, 0x00,
1335 0x04, 0xc1, 0x20, 0xfa, 0x15, 0x5c, 0xb9, 0x46, 0x0c, 0x0c, 0x00, 0x04,
1336 0xc1, 0x20, 0x02, 0x17, 0x3f, 0x09, 0x2c, 0xd0, 0x11, 0xf9, 0x8c, 0x18,
1337 0x18, 0x00, 0x08, 0x82, 0x41, 0x24, 0x2e, 0xa1, 0x12, 0x58, 0xd0, 0x23,
1338 0xf2, 0xb1, 0xe0, 0x47, 0xe0, 0x33, 0x4b, 0xc0, 0x06, 0x03, 0x15, 0x83,
1339 0xa3, 0x06, 0xc2, 0x1a, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0x64,
1340 0x2e, 0xab, 0x32, 0x8d, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0x74, 0x2e,
1341 0xac, 0xb2, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0x84, 0x2e, 0xad,
1342 0x32, 0xcc, 0x12, 0xe8, 0xc1, 0x2c, 0x83, 0x1b, 0xe4, 0x81, 0x5b, 0x18,
1343 0x2b, 0xf4, 0x89, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0x00, 0x3b,
1344 0x17, 0x53, 0xe9, 0x13, 0x56, 0x08, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1,
1345 0x00, 0x43, 0x97, 0x53, 0xe9, 0x13, 0x56, 0x08, 0xec, 0x15, 0xfa, 0x44,
1346 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0xa9, 0x4b, 0xaa, 0xf4,
1347 0xc9, 0x2b, 0x04, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0xad, 0x8b,
1348 0xaa, 0xf4, 0xc9, 0x2b, 0x04, 0x26, 0x0b, 0x7d, 0x22, 0x9f, 0x11, 0x03,
1349 0x04, 0x00, 0x41, 0x30, 0xc0, 0xda, 0x85, 0x55, 0xfa, 0x44, 0x16, 0x82,
1350 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0xc0, 0xdc, 0xa5, 0x55, 0xfa, 0x44,
1351 0x16, 0x02, 0x6b, 0x83, 0x43, 0x3e, 0xe6, 0x06, 0x85, 0x7c, 0xec, 0x0d,
1352 0x06, 0xf9, 0x8c, 0x26, 0xf4, 0x08, 0x30, 0x1c, 0x11, 0xb0, 0x89, 0xf3,
1353 0xcd, 0x32, 0xe8, 0xc1, 0x1b, 0x04, 0xc3, 0x11, 0x85, 0x9b, 0x28, 0xdf,
1354 0x2c, 0x43, 0x1c, 0xc0, 0x41, 0x60, 0x06, 0x9c, 0xc8, 0x67, 0x96, 0x40,
1355 0x0e, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0x20, 0xca, 0x17, 0x79, 0x39,
1356 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0x20, 0xd2, 0x17, 0x5c, 0x09, 0x2c,
1357 0xa0, 0x13, 0xf9, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0xc4, 0x2f,
1358 0xbb, 0x12, 0x58, 0x70, 0x27, 0xf2, 0xb1, 0x20, 0x4f, 0xe0, 0x33, 0x4b,
1359 0x20, 0x07, 0x03, 0x15, 0x83, 0x03, 0x07, 0x42, 0x1c, 0x0c, 0x47, 0x34,
1360 0x77, 0xa2, 0x7c, 0xb3, 0x0c, 0x74, 0x30, 0x07, 0x81, 0x39, 0x79, 0x22,
1361 0x9f, 0x59, 0x82, 0x3a, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x48,
1362 0x64, 0xf6, 0xe5, 0x19, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x68, 0x64,
1363 0xc2, 0x25, 0xb0, 0xa0, 0x4f, 0xe4, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08,
1364 0x06, 0x51, 0xc9, 0x90, 0x4b, 0x60, 0x01, 0xa8, 0xc8, 0xc7, 0x02, 0x51,
1365 0x81, 0xcf, 0x2c, 0x41, 0x1d, 0x0c, 0x54, 0x0c, 0xce, 0x1c, 0x08, 0x74,
1366 0x30, 0x1c, 0x51, 0x81, 0x8a, 0xf2, 0xcd, 0x32, 0xdc, 0x81, 0x1d, 0x04,
1367 0x66, 0x89, 0x8a, 0x7c, 0x66, 0x09, 0xf0, 0x60, 0xc4, 0xc0, 0x00, 0x40,
1368 0x10, 0x0c, 0xa2, 0x95, 0x21, 0x99, 0x6b, 0xc4, 0xc0, 0x00, 0x40, 0x10,
1369 0x0c, 0x22, 0x96, 0x51, 0x97, 0xc0, 0x02, 0x53, 0x91, 0xcf, 0x88, 0x81,
1370 0x01, 0x80, 0x20, 0x18, 0x44, 0x2e, 0xd3, 0x2e, 0x81, 0x05, 0xa9, 0x22,
1371 0x1f, 0x0b, 0x56, 0x05, 0x3e, 0xb3, 0x04, 0x78, 0x30, 0x50, 0x31, 0x38,
1372 0x76, 0x20, 0xdc, 0xc1, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0x32,
1373 0x73, 0x2f, 0xd3, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0x33, 0x83,
1374 0x2f, 0xcb, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x44, 0x34, 0x93, 0x2f,
1375 0xc3, 0x2c, 0x81, 0x1e, 0x18, 0x2c, 0xe0, 0x83, 0x7c, 0x2c, 0x16, 0xf0,
1376 0x41, 0x3e, 0x26, 0x0b, 0xf8, 0x20, 0x9f, 0x59, 0x02, 0x3d, 0x18, 0xa8,
1377 0x19, 0xdc, 0x02, 0x0c, 0x8c, 0x3c, 0x20, 0x0b, 0x31, 0x20, 0x07, 0x36,
1378 0x60, 0x05, 0x37, 0x60, 0xf0, 0x60, 0xa0, 0x66, 0x70, 0x0b, 0x30, 0x30,
1379 0xf2, 0x80, 0x2c, 0xc4, 0x80, 0x1c, 0xd8, 0x80, 0x15, 0xdc, 0x80, 0xc1,
1380 0x83, 0x81, 0x9a, 0xc1, 0x2d, 0xc0, 0xc0, 0xc8, 0x03, 0xb2, 0x10, 0x03,
1381 0x72, 0x60, 0x03, 0x56, 0x70, 0x03, 0x06, 0x0f, 0x6c, 0x48, 0x15, 0xf9,
1382 0xd8, 0x90, 0x2a, 0xf2, 0xb1, 0x21, 0x55, 0xe4, 0x63, 0xe5, 0x91, 0x2a,
1383 0xf2, 0x19, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0x44, 0x6c, 0x46, 0x26,
1384 0x67, 0x72, 0xe6, 0x65, 0x88, 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40,
1385 0xc4, 0x66, 0x64, 0x72, 0x26, 0x67, 0x4e, 0x66, 0x18, 0x31, 0x48, 0x00,
1386 0x10, 0x04, 0x03, 0x44, 0x6c, 0x46, 0x26, 0x67, 0x72, 0xc6, 0x65, 0x84,
1387 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, 0xc4, 0x66, 0x64, 0x72, 0x26,
1388 0x67, 0x62, 0x26, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
1389};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.hlsl b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.hlsl
new file mode 100644
index 0000000..1c869b8
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Advanced.hlsl
@@ -0,0 +1,8 @@
1
2#include "D3D12_PixelShader_Common.hlsli"
3
4[RootSignature(AdvancedRS)]
5float4 main(PixelShaderInput input) : SV_TARGET
6{
7 return AdvancedPixelShader(input);
8}
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.h
new file mode 100644
index 0000000..7b1a917
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.h
@@ -0,0 +1,490 @@
1#if 0
2;
3; Input signature:
4;
5; Name Index Mask Register SysValue Format Used
6; -------------------- ----- ------ -------- -------- ------- ------
7; SV_Position 0 xyzw 0 POS float
8; TEXCOORD 0 xy 1 NONE float
9; COLOR 0 xyzw 2 NONE float xyzw
10;
11;
12; Output signature:
13;
14; Name Index Mask Register SysValue Format Used
15; -------------------- ----- ------ -------- -------- ------- ------
16; SV_Target 0 xyzw 0 TARGET float xyzw
17;
18; shader hash: cef595d746206d54840a8f4fa9597d19
19;
20; Pipeline Runtime Information:
21;
22; Pixel Shader
23; DepthOutput=0
24; SampleFrequency=0
25;
26;
27; Input signature:
28;
29; Name Index InterpMode DynIdx
30; -------------------- ----- ---------------------- ------
31; SV_Position 0 noperspective
32; TEXCOORD 0 linear
33; COLOR 0 linear
34;
35; Output signature:
36;
37; Name Index InterpMode DynIdx
38; -------------------- ----- ---------------------- ------
39; SV_Target 0
40;
41; Buffer Definitions:
42;
43; cbuffer Constants
44; {
45;
46; struct Constants
47; {
48;
49; float scRGB_output; ; Offset: 0
50; float texture_type; ; Offset: 4
51; float input_type; ; Offset: 8
52; float color_scale; ; Offset: 12
53; float tonemap_method; ; Offset: 16
54; float tonemap_factor1; ; Offset: 20
55; float tonemap_factor2; ; Offset: 24
56; float sdr_white_point; ; Offset: 28
57; float4 Yoffset; ; Offset: 32
58; float4 Rcoeff; ; Offset: 48
59; float4 Gcoeff; ; Offset: 64
60; float4 Bcoeff; ; Offset: 80
61;
62; } Constants; ; Offset: 0 Size: 96
63;
64; }
65;
66;
67; Resource Bindings:
68;
69; Name Type Format Dim ID HLSL Bind Count
70; ------------------------------ ---------- ------- ----------- ------- -------------- ------
71; Constants cbuffer NA NA CB0 cb1 1
72;
73;
74; ViewId state:
75;
76; Number of inputs: 12, outputs: 4
77; Outputs dependent on ViewId: { }
78; Inputs contributing to computation of Outputs:
79; output 0 depends on inputs: { 8 }
80; output 1 depends on inputs: { 9 }
81; output 2 depends on inputs: { 10 }
82; output 3 depends on inputs: { 11 }
83;
84target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
85target triple = "dxil-ms-dx"
86
87%dx.types.Handle = type { i8* }
88%dx.types.CBufRet.f32 = type { float, float, float, float }
89%Constants = type { float, float, float, float, float, float, float, float, <4 x float>, <4 x float>, <4 x float>, <4 x float> }
90
91define void @main() {
92 %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
93 %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
94 %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
95 %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
96 %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
97 %6 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex)
98 %7 = extractvalue %dx.types.CBufRet.f32 %6, 3
99 %8 = fmul fast float %7, %2
100 %9 = fmul fast float %7, %3
101 %10 = fmul fast float %7, %4
102 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %8) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
103 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %9) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
104 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %10) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
105 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
106 ret void
107}
108
109; Function Attrs: nounwind readnone
110declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0
111
112; Function Attrs: nounwind
113declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1
114
115; Function Attrs: nounwind readonly
116declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2
117
118; Function Attrs: nounwind readonly
119declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2
120
121attributes #0 = { nounwind readnone }
122attributes #1 = { nounwind }
123attributes #2 = { nounwind readonly }
124
125!llvm.ident = !{!0}
126!dx.version = !{!1}
127!dx.valver = !{!2}
128!dx.shaderModel = !{!3}
129!dx.resources = !{!4}
130!dx.viewIdState = !{!7}
131!dx.entryPoints = !{!8}
132
133!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
134!1 = !{i32 1, i32 0}
135!2 = !{i32 1, i32 6}
136!3 = !{!"ps", i32 6, i32 0}
137!4 = !{null, null, !5, null}
138!5 = !{!6}
139!6 = !{i32 0, %Constants* undef, !"", i32 0, i32 1, i32 1, i32 96, null}
140!7 = !{[14 x i32] [i32 12, i32 4, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 2, i32 4, i32 8]}
141!8 = !{void ()* @main, !"main", !9, !4, null}
142!9 = !{!10, !16, null}
143!10 = !{!11, !13, !14}
144!11 = !{i32 0, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 0, i8 0, null}
145!12 = !{i32 0}
146!13 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 2, i32 1, i8 0, null}
147!14 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 2, i8 0, !15}
148!15 = !{i32 3, i32 15}
149!16 = !{!17}
150!17 = !{i32 0, !"SV_Target", i8 9, i8 16, !12, i8 0, i32 1, i8 4, i32 0, i8 0, !15}
151
152#endif
153
154const unsigned char g_main[] = {
155 0x44, 0x58, 0x42, 0x43, 0xe0, 0x6a, 0x51, 0x4c, 0x14, 0x1a, 0x6a, 0x67,
156 0x04, 0x23, 0x10, 0x54, 0xf8, 0xe3, 0xa6, 0x1a, 0x01, 0x00, 0x00, 0x00,
157 0xb1, 0x0f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
158 0x50, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00,
159 0x01, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00, 0x85, 0x09, 0x00, 0x00,
160 0xa1, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31,
162 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
164 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
166 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
167 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00,
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
170 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00,
172 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c,
173 0x4f, 0x52, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01,
174 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03,
176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
177 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
178 0x00, 0x50, 0x53, 0x56, 0x30, 0xe4, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
181 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x01, 0x00, 0x00,
182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
184 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
185 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
186 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43,
187 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
188 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00,
191 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44,
192 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
193 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
197 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53,
198 0x30, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
199 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00,
200 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
201 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204 0x00, 0x18, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x2c, 0x07, 0x00,
205 0x00, 0x60, 0x00, 0x00, 0x00, 0xcb, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49,
206 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x07, 0x00,
207 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xc2, 0x01, 0x00,
208 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00,
209 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32,
210 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b,
211 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32,
212 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14,
213 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e,
214 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5,
215 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00,
216 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8,
217 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86,
218 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00,
219 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08,
220 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00,
221 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4,
222 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a,
223 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x5c, 0x23, 0x00, 0x25, 0x00, 0x14,
224 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84,
225 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb,
226 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2,
227 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e,
228 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30,
229 0x42, 0x6d, 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x90, 0x47, 0x70, 0x20,
230 0x60, 0x18, 0x81, 0x18, 0x2e, 0xe1, 0x9c, 0x46, 0x9a, 0x80, 0x66, 0x92,
231 0x10, 0x33, 0xc6, 0x18, 0x63, 0x8c, 0x31, 0xe7, 0x9c, 0x44, 0xd3, 0x81,
232 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87,
233 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0,
234 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0,
235 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20,
236 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90,
237 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30,
238 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40,
239 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0,
240 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30,
241 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
242 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30,
243 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00,
244 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10,
245 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10,
246 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2,
247 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
248 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x20, 0x0b, 0x04, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98,
250 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43,
251 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x1c, 0x50, 0x06, 0xe5, 0x50,
252 0x12, 0x85, 0x50, 0x10, 0x85, 0x51, 0x20, 0x85, 0x52, 0x30, 0x85, 0x53,
253 0x40, 0x05, 0x56, 0x80, 0x01, 0x05, 0x1a, 0x50, 0x04, 0xe5, 0x41, 0xa5,
254 0x24, 0xca, 0xa0, 0x10, 0x46, 0x00, 0x8a, 0xa0, 0x40, 0xe8, 0xd5, 0x00,
255 0xd1, 0x19, 0x00, 0xaa, 0x33, 0x00, 0x64, 0xc7, 0x72, 0x18, 0x02, 0x00,
256 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x00, 0x79, 0x18, 0x00,
257 0x00, 0xc9, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13,
258 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b,
259 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b,
260 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9,
261 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13,
262 0x04, 0xa2, 0x98, 0x20, 0x10, 0xc6, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04,
263 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x1c, 0x1b, 0x86, 0x03, 0x21, 0x26,
264 0x08, 0x55, 0x18, 0x30, 0x19, 0x7a, 0x73, 0x9b, 0xa3, 0x0b, 0x73, 0xa3,
265 0x9b, 0x9b, 0x20, 0x10, 0xc8, 0x06, 0x84, 0x50, 0x16, 0x62, 0x18, 0x18,
266 0x60, 0x43, 0xd0, 0x6c, 0x20, 0x00, 0xc0, 0x01, 0x26, 0x08, 0x14, 0x18,
267 0x90, 0x99, 0x1b, 0x93, 0x3a, 0x12, 0xfa, 0x7a, 0xab, 0xa3, 0x83, 0xab,
268 0xa3, 0x9b, 0x20, 0x10, 0xc9, 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4, 0xb2,
269 0xc1, 0x40, 0x22, 0x89, 0x98, 0x28, 0x32, 0x74, 0x65, 0x78, 0x74, 0x75,
270 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x13, 0x04, 0x82, 0xd9, 0x60,
271 0x20, 0x96, 0x74, 0x4d, 0x14, 0x95, 0x34, 0x37, 0xb8, 0x3a, 0xba, 0x2f,
272 0xba, 0x3c, 0xb8, 0xb2, 0x09, 0x02, 0xd1, 0x6c, 0x30, 0x90, 0x4c, 0xd2,
273 0x26, 0x8a, 0xcb, 0xd8, 0x1b, 0xdb, 0x9b, 0xdc, 0xd7, 0xdc, 0x58, 0x18,
274 0x5b, 0xd9, 0x04, 0x81, 0x70, 0x26, 0x08, 0xcf, 0xb7, 0x01, 0x41, 0x38,
275 0xa9, 0x9b, 0x28, 0xca, 0xa3, 0x43, 0xf7, 0xe6, 0x56, 0xd6, 0x16, 0x06,
276 0xf7, 0xd5, 0x56, 0x46, 0x87, 0xf6, 0x46, 0x36, 0x41, 0x20, 0x9e, 0x0d,
277 0x06, 0x02, 0x06, 0x52, 0x18, 0x4c, 0x14, 0x1f, 0xba, 0x37, 0xb7, 0xb2,
278 0xb6, 0x30, 0xb8, 0x2f, 0xb3, 0xb0, 0x31, 0xba, 0x37, 0xb9, 0x98, 0x09,
279 0x02, 0x01, 0x6d, 0x30, 0x90, 0x31, 0x90, 0xc8, 0x60, 0xa2, 0xf8, 0xd0,
280 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, 0x7d, 0x99, 0x85, 0x8d, 0xd1, 0xbd,
281 0xc9, 0xc9, 0x4c, 0x10, 0x88, 0x68, 0x83, 0x81, 0x98, 0x81, 0x74, 0x06,
282 0x13, 0xc5, 0x67, 0x8e, 0x4c, 0xee, 0xeb, 0x0e, 0x2d, 0x8d, 0xae, 0xec,
283 0x0b, 0xee, 0x2d, 0xcd, 0x8d, 0x6e, 0x82, 0x40, 0x48, 0x1b, 0x0c, 0x24,
284 0x0d, 0x24, 0x35, 0x98, 0x28, 0x1e, 0x59, 0x6f, 0x66, 0x66, 0x73, 0x65,
285 0x74, 0x13, 0x04, 0x62, 0xda, 0x60, 0x20, 0x6c, 0x20, 0xb5, 0xc1, 0x44,
286 0xd1, 0x90, 0x1a, 0x7b, 0x2b, 0x33, 0x33, 0x9b, 0x20, 0x10, 0xd4, 0x06,
287 0x03, 0x79, 0x03, 0x09, 0x0e, 0x26, 0x8a, 0xc6, 0xd1, 0xd8, 0x5b, 0x99,
288 0x99, 0xd9, 0x04, 0x81, 0xa8, 0x36, 0x18, 0x88, 0x1c, 0x48, 0x73, 0x30,
289 0x51, 0x34, 0x84, 0xc6, 0xde, 0xca, 0xcc, 0xcc, 0x26, 0x08, 0x84, 0xb5,
290 0xc1, 0x40, 0xea, 0x40, 0xb2, 0x83, 0x89, 0xda, 0xd0, 0x30, 0x15, 0xb6,
291 0x7d, 0x62, 0x50, 0x06, 0x68, 0xb0, 0x06, 0x6e, 0x10, 0x07, 0x74, 0x70,
292 0x07, 0x1b, 0x06, 0x02, 0xc2, 0x83, 0x09, 0x82, 0x00, 0x6c, 0x00, 0x36,
293 0x0c, 0xc4, 0x1e, 0xec, 0xc1, 0x86, 0x80, 0x0f, 0x36, 0x0c, 0x83, 0x1e,
294 0xf4, 0xc1, 0x04, 0xc1, 0x12, 0x83, 0x0d, 0xc1, 0x1f, 0x90, 0x68, 0x0b,
295 0x4b, 0x73, 0xe3, 0x32, 0x65, 0xf5, 0x05, 0xf5, 0x36, 0x97, 0x46, 0x97,
296 0xf6, 0xe6, 0x36, 0x41, 0x28, 0xb2, 0x09, 0x42, 0xa1, 0x6d, 0x08, 0x88,
297 0x09, 0x42, 0xb1, 0x4d, 0x10, 0x0a, 0x6e, 0xc3, 0x42, 0x88, 0xc2, 0x28,
298 0x90, 0x42, 0x29, 0x98, 0xc2, 0x60, 0x0a, 0xc4, 0x29, 0x00, 0x44, 0xa8,
299 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x45, 0xb7, 0x61,
300 0x19, 0x52, 0x61, 0x14, 0x4e, 0xa1, 0x14, 0x54, 0x61, 0x50, 0x85, 0xe1,
301 0x14, 0x80, 0x09, 0x02, 0x71, 0xb1, 0x18, 0x7a, 0x62, 0x7a, 0x92, 0x9a,
302 0x20, 0x10, 0xd8, 0x06, 0x41, 0x72, 0x85, 0x0d, 0x0b, 0x2b, 0xb4, 0xc2,
303 0x28, 0x9c, 0x42, 0x29, 0xa8, 0xc2, 0x60, 0x0a, 0xac, 0x70, 0x0a, 0xaf,
304 0xb0, 0x61, 0x40, 0x85, 0x55, 0x80, 0x05, 0x26, 0x53, 0x56, 0x5f, 0x54,
305 0x61, 0x72, 0x67, 0x65, 0x74, 0x13, 0x84, 0xc2, 0xdb, 0xb0, 0x10, 0xb2,
306 0x30, 0x0a, 0xb3, 0x50, 0x0a, 0xa7, 0x30, 0x98, 0x02, 0x71, 0x0a, 0xaf,
307 0xb0, 0x21, 0xa0, 0x85, 0x0d, 0x43, 0x2c, 0xd4, 0x02, 0xb0, 0xa1, 0xd0,
308 0x83, 0x50, 0xb0, 0x85, 0x07, 0xa0, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37,
309 0xc7, 0x22, 0xcd, 0x6d, 0x8e, 0x6e, 0x8e, 0xc6, 0x5c, 0xda, 0xd9, 0x17,
310 0x1b, 0x19, 0x8d, 0xb9, 0xb4, 0xb3, 0xaf, 0x39, 0xba, 0x0d, 0x08, 0x2e,
311 0x48, 0xb9, 0xe0, 0x0a, 0xba, 0x70, 0xed, 0xc2, 0x55, 0x85, 0x8d, 0xcd,
312 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21,
313 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10,
314 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04,
315 0x45, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, 0xb9, 0xa6,
316 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, 0x45, 0xae,
317 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0xe0, 0x54, 0x22,
318 0xc3, 0x73, 0xa1, 0xcb, 0x83, 0x2b, 0x0b, 0x72, 0x73, 0x7b, 0xa3, 0x0b,
319 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x9b, 0x22, 0xe0, 0x41, 0x1f, 0xd4, 0x21,
320 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3,
321 0x2b, 0x9b, 0x12, 0xfc, 0x41, 0x1d, 0x32, 0x3c, 0x97, 0x32, 0x37, 0x3a,
322 0xb9, 0x3c, 0xa8, 0xb7, 0x34, 0x37, 0xba, 0xb9, 0x29, 0x81, 0x2d, 0x74,
323 0x21, 0xc3, 0x73, 0x19, 0x7b, 0xab, 0x73, 0xa3, 0x2b, 0x93, 0x9b, 0x9b,
324 0x12, 0xec, 0x02, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00,
325 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d,
326 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07,
327 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80,
328 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66,
329 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d,
330 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07,
331 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03,
332 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90,
333 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50,
334 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2,
335 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39,
336 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14,
337 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07,
338 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07,
339 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87,
340 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0,
341 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8,
342 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc,
343 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6,
344 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39,
345 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f,
346 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c,
347 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87,
348 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0,
349 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50,
350 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00,
351 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41,
352 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d,
353 0x04, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08,
354 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03,
355 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5,
356 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f,
357 0xdc, 0xb6, 0x01, 0x10, 0x0c, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
358 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
359 0x00, 0xce, 0xf5, 0x95, 0xd7, 0x46, 0x20, 0x6d, 0x54, 0x84, 0x0a, 0x8f,
360 0x4f, 0xa9, 0x59, 0x7d, 0x19, 0x44, 0x58, 0x49, 0x4c, 0x08, 0x06, 0x00,
361 0x00, 0x60, 0x00, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49,
362 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x05, 0x00,
363 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x79, 0x01, 0x00,
364 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00,
365 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32,
366 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b,
367 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32,
368 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14,
369 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e,
370 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5,
371 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00,
372 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8,
373 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86,
374 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00,
375 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08,
376 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00,
377 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4,
378 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a,
379 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x5c, 0x23, 0x00, 0x25, 0x00, 0x14,
380 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84,
381 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb,
382 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2,
383 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e,
384 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30,
385 0x42, 0x6d, 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x90, 0x47, 0x70, 0x20,
386 0x60, 0x18, 0x81, 0x18, 0x2e, 0xe1, 0x9c, 0x46, 0x9a, 0x80, 0x66, 0x92,
387 0x10, 0x33, 0xc6, 0x18, 0x63, 0x8c, 0x31, 0xe7, 0x9c, 0x44, 0xd3, 0x81,
388 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87,
389 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0,
390 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0,
391 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20,
392 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90,
393 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30,
394 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40,
395 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0,
396 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30,
397 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
398 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30,
399 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00,
400 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10,
401 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10,
402 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2,
403 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
404 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
405 0x20, 0x0b, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98,
406 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43,
407 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x1c, 0x50, 0x04, 0x65, 0x50,
408 0x1e, 0x54, 0x4a, 0xa2, 0x0c, 0x0a, 0x61, 0x04, 0xa0, 0x08, 0x0a, 0x84,
409 0xea, 0x0c, 0x00, 0xd9, 0xb1, 0x1c, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00,
410 0x00, 0x08, 0x04, 0x02, 0x01, 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00,
411 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63,
412 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03,
413 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a,
414 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b,
415 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20,
416 0x10, 0xc6, 0x06, 0x61, 0x20, 0x26, 0x08, 0xc4, 0xb1, 0x41, 0x18, 0x0c,
417 0x0a, 0x70, 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0x95, 0x44, 0x60,
418 0x82, 0x40, 0x20, 0x1b, 0x10, 0x42, 0x59, 0x88, 0x61, 0x60, 0x80, 0x0d,
419 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x58, 0xd3, 0x86, 0x00,
420 0x9a, 0x20, 0x08, 0x00, 0x89, 0xb6, 0xb0, 0x34, 0x37, 0x2e, 0x53, 0x56,
421 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x84, 0x82,
422 0x99, 0x20, 0x14, 0xcd, 0x86, 0x80, 0x98, 0x20, 0x14, 0xce, 0x04, 0xa1,
423 0x78, 0x36, 0x2c, 0x04, 0x55, 0x59, 0x17, 0x36, 0x60, 0x44, 0x06, 0x10,
424 0xa1, 0x2a, 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0xd0,
425 0x86, 0x65, 0xd8, 0xaa, 0xec, 0xe2, 0x06, 0x6e, 0xc8, 0x80, 0x09, 0x02,
426 0x91, 0xb0, 0x18, 0x7a, 0x62, 0x7a, 0x92, 0x9a, 0x20, 0x10, 0xca, 0x04,
427 0x81, 0x58, 0x36, 0x08, 0x60, 0x10, 0x06, 0x1b, 0x16, 0xef, 0xab, 0xb2,
428 0x8b, 0x1b, 0x30, 0x2f, 0x13, 0x83, 0x0d, 0x83, 0xd6, 0x8d, 0x01, 0x93,
429 0x29, 0xab, 0x2f, 0xaa, 0x30, 0xb9, 0xb3, 0x32, 0xba, 0x09, 0x42, 0x11,
430 0x6d, 0x58, 0x88, 0x32, 0xa8, 0xcc, 0xe0, 0xca, 0x06, 0x8c, 0xc8, 0xc4,
431 0x60, 0x43, 0x70, 0x06, 0x1b, 0x06, 0x32, 0x40, 0x03, 0x60, 0x43, 0x21,
432 0x4d, 0x69, 0xf0, 0x00, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8,
433 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, 0xbb, 0x32,
434 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, 0xc5,
435 0x2e, 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x60, 0xd4, 0x21, 0xc3, 0x73,
436 0x99, 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, 0x9b,
437 0x12, 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, 0xea, 0xe4,
438 0xc6, 0xca, 0xe6, 0xa6, 0x04, 0x4e, 0x1d, 0x32, 0x3c, 0x17, 0xbb, 0xb4,
439 0xb2, 0xbb, 0x24, 0xb2, 0x29, 0xba, 0x30, 0xba, 0xb2, 0x29, 0x01, 0x54,
440 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd,
441 0x8d, 0x6e, 0x6e, 0x4a, 0x90, 0x06, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00,
442 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c,
443 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80,
444 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed,
445 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d,
446 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83,
447 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78,
448 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70,
449 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc,
450 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3,
451 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c,
452 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83,
453 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03,
454 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68,
455 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60,
456 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80,
457 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98,
458 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec,
459 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c,
460 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d,
461 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43,
462 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03,
463 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03,
464 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28,
465 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4,
466 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1,
467 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00,
468 0x00, 0x14, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe,
469 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02,
470 0xe6, 0x17, 0xb7, 0x6d, 0x04, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11,
471 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe,
472 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6,
473 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4,
474 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x01, 0x10, 0x0c, 0x80, 0x34, 0x00,
475 0x00, 0x61, 0x20, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41,
476 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x0a, 0x61,
477 0x06, 0xa0, 0x14, 0x4a, 0xae, 0xec, 0xa8, 0x94, 0x00, 0xbd, 0x11, 0x00,
478 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0x5d, 0xc4, 0x52, 0x59,
479 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x1b, 0x32, 0x59, 0xcd,
480 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x06, 0x97, 0x50, 0x17, 0x81,
481 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0xd1, 0x29, 0x15, 0xe6, 0x24,
482 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x78, 0x8b, 0x95, 0x49, 0xca,
483 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x1d, 0x52, 0x68, 0xa3, 0x09,
484 0xc1, 0x60, 0x81, 0x21, 0x1f, 0x13, 0x0c, 0xf9, 0xd8, 0x60, 0xc8, 0x67,
485 0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x90, 0x31, 0x78, 0xbe, 0xcf, 0x1a,
486 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00, 0x19, 0x83, 0xe7, 0xfb, 0x18,
487 0x61, 0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x90, 0x31, 0x78, 0xbe, 0xaf,
488 0x0a, 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00, 0x19, 0x83, 0xe7, 0xfb,
489 0x30, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
490};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.hlsl b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.hlsl
new file mode 100644
index 0000000..834d629
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Colors.hlsl
@@ -0,0 +1,8 @@
1
2#include "D3D12_PixelShader_Common.hlsli"
3
4[RootSignature(ColorRS)]
5float4 main(PixelShaderInput input) : SV_TARGET0
6{
7 return GetOutputColor(1.0) * input.color;
8}
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Common.hlsli b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Common.hlsli
new file mode 100644
index 0000000..ba32e0c
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Common.hlsli
@@ -0,0 +1,236 @@
1#include "D3D12_Shader_Common.hlsli"
2
3Texture2D texture0 : register(t0);
4Texture2D texture1 : register(t1);
5Texture2D texture2 : register(t2);
6SamplerState sampler0 : register(s0);
7
8struct PixelShaderInput
9{
10 float4 pos : SV_POSITION;
11 float2 tex : TEXCOORD0;
12 float4 color : COLOR0;
13};
14
15// These should mirror the definitions in SDL_render_d3d12.c
16static const float TONEMAP_NONE = 0;
17static const float TONEMAP_LINEAR = 1;
18static const float TONEMAP_CHROME = 2;
19
20static const float TEXTURETYPE_NONE = 0;
21static const float TEXTURETYPE_RGB = 1;
22static const float TEXTURETYPE_NV12 = 2;
23static const float TEXTURETYPE_NV21 = 3;
24static const float TEXTURETYPE_YUV = 4;
25
26static const float INPUTTYPE_UNSPECIFIED = 0;
27static const float INPUTTYPE_SRGB = 1;
28static const float INPUTTYPE_SCRGB = 2;
29static const float INPUTTYPE_HDR10 = 3;
30
31cbuffer Constants : register(b1)
32{
33 float scRGB_output;
34 float texture_type;
35 float input_type;
36 float color_scale;
37
38 float tonemap_method;
39 float tonemap_factor1;
40 float tonemap_factor2;
41 float sdr_white_point;
42
43 float4 Yoffset;
44 float4 Rcoeff;
45 float4 Gcoeff;
46 float4 Bcoeff;
47};
48
49static const float3x3 mat709to2020 = {
50 { 0.627404, 0.329283, 0.043313 },
51 { 0.069097, 0.919541, 0.011362 },
52 { 0.016391, 0.088013, 0.895595 }
53};
54
55static const float3x3 mat2020to709 = {
56 { 1.660496, -0.587656, -0.072840 },
57 { -0.124547, 1.132895, -0.008348 },
58 { -0.018154, -0.100597, 1.118751 }
59};
60
61float sRGBtoLinear(float v)
62{
63 if (v <= 0.04045) {
64 v = (v / 12.92);
65 } else {
66 v = pow(abs(v + 0.055) / 1.055, 2.4);
67 }
68 return v;
69}
70
71float sRGBfromLinear(float v)
72{
73 if (v <= 0.0031308) {
74 v = (v * 12.92);
75 } else {
76 v = (pow(abs(v), 1.0 / 2.4) * 1.055 - 0.055);
77 }
78 return v;
79}
80
81float3 PQtoLinear(float3 v)
82{
83 const float c1 = 0.8359375;
84 const float c2 = 18.8515625;
85 const float c3 = 18.6875;
86 const float oo_m1 = 1.0 / 0.1593017578125;
87 const float oo_m2 = 1.0 / 78.84375;
88
89 float3 num = max(pow(abs(v), oo_m2) - c1, 0.0);
90 float3 den = c2 - c3 * pow(abs(v), oo_m2);
91 return (10000.0 * pow(abs(num / den), oo_m1) / sdr_white_point);
92}
93
94float3 ApplyTonemap(float3 v)
95{
96 if (tonemap_method == TONEMAP_LINEAR) {
97 v *= tonemap_factor1;
98 } else if (tonemap_method == TONEMAP_CHROME) {
99 if (input_type == INPUTTYPE_SCRGB) {
100 // Convert to BT.2020 colorspace for tone mapping
101 v = mul(mat709to2020, v);
102 }
103
104 float vmax = max(v.r, max(v.g, v.b));
105 if (vmax > 0.0) {
106 float scale = (1.0 + tonemap_factor1 * vmax) / (1.0 + tonemap_factor2 * vmax);
107 v *= scale;
108 }
109
110 if (input_type == INPUTTYPE_SCRGB) {
111 // Convert to BT.709 colorspace after tone mapping
112 v = mul(mat2020to709, v);
113 }
114 }
115 return v;
116}
117
118float4 GetInputColor(PixelShaderInput input)
119{
120 float4 rgba;
121
122 if (texture_type == TEXTURETYPE_NONE) {
123 rgba = 1.0;
124 } else if (texture_type == TEXTURETYPE_RGB) {
125 rgba = texture0.Sample(sampler0, input.tex);
126 } else if (texture_type == TEXTURETYPE_NV12) {
127 float3 yuv;
128 yuv.x = texture0.Sample(sampler0, input.tex).r;
129 yuv.yz = texture1.Sample(sampler0, input.tex).rg;
130
131 yuv += Yoffset.xyz;
132 rgba.r = dot(yuv, Rcoeff.xyz);
133 rgba.g = dot(yuv, Gcoeff.xyz);
134 rgba.b = dot(yuv, Bcoeff.xyz);
135 rgba.a = 1.0;
136 } else if (texture_type == TEXTURETYPE_NV21) {
137 float3 yuv;
138 yuv.x = texture0.Sample(sampler0, input.tex).r;
139 yuv.yz = texture1.Sample(sampler0, input.tex).gr;
140
141 yuv += Yoffset.xyz;
142 rgba.r = dot(yuv, Rcoeff.xyz);
143 rgba.g = dot(yuv, Gcoeff.xyz);
144 rgba.b = dot(yuv, Bcoeff.xyz);
145 rgba.a = 1.0;
146 } else if (texture_type == TEXTURETYPE_YUV) {
147 float3 yuv;
148 yuv.x = texture0.Sample(sampler0, input.tex).r;
149 yuv.y = texture1.Sample(sampler0, input.tex).r;
150 yuv.z = texture2.Sample(sampler0, input.tex).r;
151
152 yuv += Yoffset.xyz;
153 rgba.r = dot(yuv, Rcoeff.xyz);
154 rgba.g = dot(yuv, Gcoeff.xyz);
155 rgba.b = dot(yuv, Bcoeff.xyz);
156 rgba.a = 1.0;
157 } else {
158 // Error!
159 rgba.r = 1.0;
160 rgba.g = 0.0;
161 rgba.b = 0.0;
162 rgba.a = 1.0;
163 }
164 return rgba;
165}
166
167float4 GetOutputColor(float4 rgba)
168{
169 float4 output;
170
171 output.rgb = rgba.rgb * color_scale;
172 output.a = rgba.a;
173
174 return output;
175}
176
177float3 GetOutputColorFromSRGB(float3 rgb)
178{
179 float3 output;
180
181 if (scRGB_output) {
182 rgb.r = sRGBtoLinear(rgb.r);
183 rgb.g = sRGBtoLinear(rgb.g);
184 rgb.b = sRGBtoLinear(rgb.b);
185 }
186
187 output.rgb = rgb * color_scale;
188
189 return output;
190}
191
192float3 GetOutputColorFromLinear(float3 rgb)
193{
194 float3 output;
195
196 output.rgb = rgb * color_scale;
197
198 if (!scRGB_output) {
199 output.r = sRGBfromLinear(output.r);
200 output.g = sRGBfromLinear(output.g);
201 output.b = sRGBfromLinear(output.b);
202 output.rgb = saturate(output.rgb);
203 }
204
205 return output;
206}
207
208float4 AdvancedPixelShader(PixelShaderInput input)
209{
210 float4 rgba = GetInputColor(input);
211 float4 output;
212
213 if (input_type == INPUTTYPE_HDR10) {
214 rgba.rgb = PQtoLinear(rgba.rgb);
215 }
216
217 if (tonemap_method != TONEMAP_NONE) {
218 rgba.rgb = ApplyTonemap(rgba.rgb);
219 }
220
221 if (input_type == INPUTTYPE_SRGB) {
222 output.rgb = GetOutputColorFromSRGB(rgba.rgb);
223 output.a = rgba.a;
224 } else if (input_type == INPUTTYPE_SCRGB) {
225 output.rgb = GetOutputColorFromLinear(rgba.rgb);
226 output.a = rgba.a;
227 } else if (input_type == INPUTTYPE_HDR10) {
228 rgba.rgb = mul(mat2020to709, rgba.rgb);
229 output.rgb = GetOutputColorFromLinear(rgba.rgb);
230 output.a = rgba.a;
231 } else {
232 output = GetOutputColor(rgba);
233 }
234
235 return output * input.color;
236}
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.h
new file mode 100644
index 0000000..4aa8ef0
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.h
@@ -0,0 +1,586 @@
1#if 0
2;
3; Input signature:
4;
5; Name Index Mask Register SysValue Format Used
6; -------------------- ----- ------ -------- -------- ------- ------
7; SV_Position 0 xyzw 0 POS float
8; TEXCOORD 0 xy 1 NONE float xy
9; COLOR 0 xyzw 2 NONE float xyzw
10;
11;
12; Output signature:
13;
14; Name Index Mask Register SysValue Format Used
15; -------------------- ----- ------ -------- -------- ------- ------
16; SV_Target 0 xyzw 0 TARGET float xyzw
17;
18; shader hash: 7a58efcd6cfa5eef872e7cbc3b5f38b8
19;
20; Pipeline Runtime Information:
21;
22; Pixel Shader
23; DepthOutput=0
24; SampleFrequency=0
25;
26;
27; Input signature:
28;
29; Name Index InterpMode DynIdx
30; -------------------- ----- ---------------------- ------
31; SV_Position 0 noperspective
32; TEXCOORD 0 linear
33; COLOR 0 linear
34;
35; Output signature:
36;
37; Name Index InterpMode DynIdx
38; -------------------- ----- ---------------------- ------
39; SV_Target 0
40;
41; Buffer Definitions:
42;
43; cbuffer Constants
44; {
45;
46; struct Constants
47; {
48;
49; float scRGB_output; ; Offset: 0
50; float texture_type; ; Offset: 4
51; float input_type; ; Offset: 8
52; float color_scale; ; Offset: 12
53; float tonemap_method; ; Offset: 16
54; float tonemap_factor1; ; Offset: 20
55; float tonemap_factor2; ; Offset: 24
56; float sdr_white_point; ; Offset: 28
57; float4 Yoffset; ; Offset: 32
58; float4 Rcoeff; ; Offset: 48
59; float4 Gcoeff; ; Offset: 64
60; float4 Bcoeff; ; Offset: 80
61;
62; } Constants; ; Offset: 0 Size: 96
63;
64; }
65;
66;
67; Resource Bindings:
68;
69; Name Type Format Dim ID HLSL Bind Count
70; ------------------------------ ---------- ------- ----------- ------- -------------- ------
71; Constants cbuffer NA NA CB0 cb1 1
72; sampler0 sampler NA NA S0 s0 1
73; texture0 texture f32 2d T0 t0 1
74;
75;
76; ViewId state:
77;
78; Number of inputs: 12, outputs: 4
79; Outputs dependent on ViewId: { }
80; Inputs contributing to computation of Outputs:
81; output 0 depends on inputs: { 4, 5, 8 }
82; output 1 depends on inputs: { 4, 5, 9 }
83; output 2 depends on inputs: { 4, 5, 10 }
84; output 3 depends on inputs: { 4, 5, 11 }
85;
86target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
87target triple = "dxil-ms-dx"
88
89%dx.types.Handle = type { i8* }
90%dx.types.ResRet.f32 = type { float, float, float, float, i32 }
91%dx.types.CBufRet.f32 = type { float, float, float, float }
92%"class.Texture2D<vector<float, 4> >" = type { <4 x float>, %"class.Texture2D<vector<float, 4> >::mips_type" }
93%"class.Texture2D<vector<float, 4> >::mips_type" = type { i32 }
94%Constants = type { float, float, float, float, float, float, float, float, <4 x float>, <4 x float>, <4 x float>, <4 x float> }
95%struct.SamplerState = type { i32 }
96
97define void @main() {
98 %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
99 %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
100 %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
101 %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
102 %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
103 %6 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
104 %7 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
105 %8 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
106 %9 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
107 %10 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %1, %dx.types.Handle %2, float %8, float %9, float undef, float undef, i32 0, i32 0, i32 undef, float undef) ; Sample(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,clamp)
108 %11 = extractvalue %dx.types.ResRet.f32 %10, 0
109 %12 = extractvalue %dx.types.ResRet.f32 %10, 1
110 %13 = extractvalue %dx.types.ResRet.f32 %10, 2
111 %14 = extractvalue %dx.types.ResRet.f32 %10, 3
112 %15 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 0) ; CBufferLoadLegacy(handle,regIndex)
113 %16 = extractvalue %dx.types.CBufRet.f32 %15, 3
114 %17 = fmul fast float %11, %4
115 %18 = fmul fast float %17, %16
116 %19 = fmul fast float %12, %5
117 %20 = fmul fast float %19, %16
118 %21 = fmul fast float %13, %6
119 %22 = fmul fast float %21, %16
120 %23 = fmul fast float %14, %7
121 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %18) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
122 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %20) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
123 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %22) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
124 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %23) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
125 ret void
126}
127
128; Function Attrs: nounwind readnone
129declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0
130
131; Function Attrs: nounwind
132declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1
133
134; Function Attrs: nounwind readonly
135declare %dx.types.ResRet.f32 @dx.op.sample.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2
136
137; Function Attrs: nounwind readonly
138declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2
139
140; Function Attrs: nounwind readonly
141declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2
142
143attributes #0 = { nounwind readnone }
144attributes #1 = { nounwind }
145attributes #2 = { nounwind readonly }
146
147!llvm.ident = !{!0}
148!dx.version = !{!1}
149!dx.valver = !{!2}
150!dx.shaderModel = !{!3}
151!dx.resources = !{!4}
152!dx.viewIdState = !{!12}
153!dx.entryPoints = !{!13}
154
155!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
156!1 = !{i32 1, i32 0}
157!2 = !{i32 1, i32 6}
158!3 = !{!"ps", i32 6, i32 0}
159!4 = !{!5, null, !8, !10}
160!5 = !{!6}
161!6 = !{i32 0, %"class.Texture2D<vector<float, 4> >"* undef, !"", i32 0, i32 0, i32 1, i32 2, i32 0, !7}
162!7 = !{i32 0, i32 9}
163!8 = !{!9}
164!9 = !{i32 0, %Constants* undef, !"", i32 0, i32 1, i32 1, i32 96, null}
165!10 = !{!11}
166!11 = !{i32 0, %struct.SamplerState* undef, !"", i32 0, i32 0, i32 1, i32 0, null}
167!12 = !{[14 x i32] [i32 12, i32 4, i32 0, i32 0, i32 0, i32 0, i32 15, i32 15, i32 0, i32 0, i32 1, i32 2, i32 4, i32 8]}
168!13 = !{void ()* @main, !"main", !14, !4, null}
169!14 = !{!15, !22, null}
170!15 = !{!16, !18, !20}
171!16 = !{i32 0, !"SV_Position", i8 9, i8 3, !17, i8 4, i32 1, i8 4, i32 0, i8 0, null}
172!17 = !{i32 0}
173!18 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !17, i8 2, i32 1, i8 2, i32 1, i8 0, !19}
174!19 = !{i32 3, i32 3}
175!20 = !{i32 2, !"COLOR", i8 9, i8 0, !17, i8 2, i32 1, i8 4, i32 2, i8 0, !21}
176!21 = !{i32 3, i32 15}
177!22 = !{!23}
178!23 = !{i32 0, !"SV_Target", i8 9, i8 16, !17, i8 0, i32 1, i8 4, i32 0, i8 0, !21}
179
180#endif
181
182const unsigned char g_main[] = {
183 0x44, 0x58, 0x42, 0x43, 0xb2, 0xdd, 0x4e, 0x8d, 0x7f, 0x3c, 0x1f, 0x5e,
184 0x6f, 0x0e, 0x03, 0xe7, 0x8c, 0xce, 0x62, 0x95, 0x01, 0x00, 0x00, 0x00,
185 0xe1, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
186 0x50, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00,
187 0x31, 0x02, 0x00, 0x00, 0xd9, 0x02, 0x00, 0x00, 0x31, 0x0b, 0x00, 0x00,
188 0x4d, 0x0b, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00,
189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31,
190 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
191 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
192 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
193 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
194 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00,
197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
198 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
199 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00,
200 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c,
201 0x4f, 0x52, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01,
202 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03,
204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
205 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
206 0x00, 0x50, 0x53, 0x56, 0x30, 0x14, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00,
207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
209 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x01, 0x00, 0x00,
210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
211 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
212 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
213 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
215 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
216 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
218 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43,
219 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
220 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
221 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00,
223 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44,
224 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
228 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
229 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53,
230 0x30, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
231 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00,
232 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
234 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
235 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
236 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
237 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
238 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00,
239 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
240 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
241 0xff, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
242 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x53, 0x54, 0x41,
244 0x54, 0x50, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00,
245 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00,
246 0x00, 0x38, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00,
247 0x00, 0x0b, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00,
248 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04,
249 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08,
250 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b,
251 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52,
252 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32,
253 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81,
254 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00,
255 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff,
256 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03,
257 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8,
258 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60,
259 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00,
260 0x00, 0x4e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85,
261 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90,
262 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x7c, 0x23,
263 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00,
264 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06,
265 0xa1, 0x9b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56,
266 0x62, 0xf2, 0x8b, 0xdb, 0x46, 0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c,
267 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82,
268 0x55, 0x18, 0x45, 0x18, 0x1b, 0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x76, 0xd4,
269 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d, 0x54, 0xb1, 0x12, 0x93,
270 0x5f, 0xdc, 0x36, 0x22, 0xc6, 0x18, 0xa3, 0x10, 0x8f, 0x30, 0x42, 0x70,
271 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x10, 0x49, 0x73, 0x20, 0x60, 0x18,
272 0x81, 0x18, 0x66, 0x6a, 0x83, 0x71, 0x60, 0x87, 0x70, 0x98, 0x87, 0x79,
273 0x70, 0x03, 0x5a, 0x28, 0x07, 0x7c, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72,
274 0x90, 0x03, 0x52, 0xe0, 0x03, 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77,
275 0x90, 0x07, 0x3e, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0x36,
276 0x00, 0x03, 0x3a, 0xf0, 0x03, 0x30, 0xf0, 0x03, 0x3d, 0xd0, 0x83, 0x76,
277 0x48, 0x07, 0x78, 0x98, 0x87, 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72,
278 0x40, 0x01, 0x99, 0x49, 0x0c, 0xc6, 0x81, 0x1d, 0xc2, 0x61, 0x1e, 0xe6,
279 0xc1, 0x0d, 0x68, 0xa1, 0x1c, 0xf0, 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca,
280 0x41, 0x0e, 0x48, 0x81, 0x0f, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde,
281 0x41, 0x1e, 0xf8, 0xc0, 0x1c, 0xd8, 0xe1, 0x1d, 0xc2, 0x81, 0x1e, 0xd8,
282 0x00, 0x0c, 0xe8, 0xc0, 0x0f, 0xc0, 0xc0, 0x0f, 0x90, 0x60, 0x2f, 0xe1,
283 0x4b, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, 0xc4, 0x8c, 0x31, 0xc6,
284 0x18, 0x63, 0x58, 0x6b, 0x2d, 0xe9, 0x9b, 0xa4, 0x29, 0xa2, 0x84, 0xc9,
285 0x67, 0x01, 0xe6, 0x59, 0x88, 0x88, 0x9d, 0x80, 0x89, 0x40, 0x01, 0x21,
286 0x9e, 0x0e, 0x04, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60,
287 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf,
288 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a,
289 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71,
290 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73,
291 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72,
292 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
293 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6,
294 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73,
295 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74,
296 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71,
297 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43,
298 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
299 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
300 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
301 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
302 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00,
303 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x30, 0x00, 0x00,
304 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x17, 0x00, 0x00,
305 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26,
306 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x45, 0x50,
307 0x12, 0x05, 0x1c, 0x50, 0x06, 0xe5, 0x50, 0x08, 0x05, 0x51, 0x18, 0x05,
308 0x52, 0x28, 0x05, 0x53, 0x38, 0x05, 0x54, 0x60, 0x05, 0x18, 0x50, 0xa0,
309 0x01, 0xe5, 0x41, 0xa5, 0x24, 0xca, 0xa0, 0x10, 0x46, 0x00, 0x8a, 0xa0,
310 0x40, 0x48, 0xd6, 0x00, 0xe5, 0x19, 0x00, 0xd2, 0x33, 0x00, 0xb4, 0x67,
311 0x00, 0xa8, 0xcf, 0x00, 0x90, 0x1f, 0xcb, 0x61, 0x08, 0x00, 0x00, 0x80,
312 0xe7, 0x01, 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00,
313 0x00, 0xdc, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13,
314 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b,
315 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b,
316 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9,
317 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13,
318 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04,
319 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26,
320 0x08, 0x59, 0x18, 0x10, 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x83,
321 0x99, 0x20, 0x10, 0xc9, 0x04, 0x81, 0x50, 0x36, 0x08, 0x44, 0xb3, 0x21,
322 0x21, 0x94, 0x85, 0x20, 0x06, 0x86, 0x70, 0x36, 0x04, 0xcf, 0x04, 0x61,
323 0x1b, 0x03, 0x26, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73,
324 0x13, 0x04, 0x62, 0xd9, 0x80, 0x10, 0x91, 0x44, 0x0c, 0xc3, 0x04, 0x6c,
325 0x08, 0xa8, 0x09, 0x42, 0x47, 0x06, 0x44, 0xe6, 0xc2, 0xda, 0xe0, 0xd8,
326 0xca, 0xe4, 0x60, 0x36, 0x20, 0x84, 0x75, 0x11, 0xc4, 0x40, 0x00, 0x1b,
327 0x02, 0x6c, 0x03, 0x01, 0x01, 0x55, 0x36, 0x41, 0xd0, 0xc4, 0x80, 0xcc,
328 0xdc, 0x98, 0xd4, 0x91, 0xd0, 0xd7, 0x5b, 0x1d, 0x1d, 0x5c, 0x1d, 0xdd,
329 0x04, 0x81, 0x60, 0x26, 0x08, 0x44, 0xb3, 0xc1, 0x40, 0xb8, 0x8e, 0xf0,
330 0x1a, 0x32, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79,
331 0x70, 0x65, 0x13, 0x04, 0xc2, 0xd9, 0x60, 0x20, 0x60, 0xd0, 0x85, 0x81,
332 0xd7, 0x50, 0x49, 0x73, 0x83, 0xab, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b,
333 0x9b, 0x20, 0x10, 0xcf, 0x06, 0x03, 0x19, 0x83, 0x8e, 0x0c, 0xbc, 0x86,
334 0xcb, 0xd8, 0x1b, 0xdb, 0x9b, 0xdc, 0xd7, 0xdc, 0x58, 0x18, 0x5b, 0xd9,
335 0x04, 0x81, 0x80, 0x26, 0x08, 0x12, 0x18, 0x6c, 0x40, 0x10, 0x33, 0xe8,
336 0xce, 0xc0, 0x6b, 0x1a, 0x34, 0xa0, 0x43, 0xf7, 0xe6, 0x56, 0xd6, 0x16,
337 0x06, 0xf7, 0xd5, 0x56, 0x46, 0x87, 0xf6, 0x46, 0x36, 0x41, 0x20, 0xa2,
338 0x0d, 0x06, 0xa2, 0x06, 0xdd, 0x1a, 0x78, 0x0d, 0x1f, 0xba, 0x37, 0xb7,
339 0xb2, 0xb6, 0x30, 0xb8, 0x2f, 0xb3, 0xb0, 0x31, 0xba, 0x37, 0xb9, 0x98,
340 0x09, 0x02, 0x21, 0x6d, 0x30, 0x90, 0x36, 0xe8, 0xdc, 0xc0, 0x6b, 0xf8,
341 0xd0, 0xbd, 0xb9, 0x95, 0xb5, 0x85, 0xc1, 0x7d, 0x99, 0x85, 0x8d, 0xd1,
342 0xbd, 0xc9, 0xc9, 0x4c, 0x10, 0x88, 0x69, 0x83, 0x81, 0xc0, 0x41, 0x17,
343 0x07, 0x5e, 0xc3, 0x67, 0x8e, 0x4c, 0xee, 0xeb, 0x0e, 0x2d, 0x8d, 0xae,
344 0xec, 0x0b, 0xee, 0x2d, 0xcd, 0x8d, 0x6e, 0x82, 0x40, 0x50, 0x1b, 0x0c,
345 0x64, 0x0e, 0x3a, 0x3a, 0xf0, 0x1a, 0x1e, 0x59, 0x6f, 0x66, 0x66, 0x73,
346 0x65, 0x74, 0x13, 0x04, 0xa2, 0xda, 0x60, 0x20, 0x76, 0xd0, 0xdd, 0x81,
347 0xd7, 0xd0, 0x90, 0x1a, 0x7b, 0x2b, 0x33, 0x33, 0x9b, 0x20, 0x10, 0xd6,
348 0x06, 0x03, 0xc9, 0x83, 0x4e, 0x0f, 0xbc, 0x86, 0xc6, 0xd1, 0xd8, 0x5b,
349 0x99, 0x99, 0xd9, 0x04, 0x81, 0xb8, 0x36, 0x18, 0x08, 0x1f, 0x74, 0x7d,
350 0xe0, 0x35, 0x34, 0x84, 0xc6, 0xde, 0xca, 0xcc, 0xcc, 0x26, 0x08, 0x04,
351 0xb6, 0xc1, 0x40, 0xfe, 0xa0, 0x03, 0x05, 0xaf, 0xd9, 0xd0, 0x4c, 0x9f,
352 0x18, 0x94, 0x41, 0x1a, 0xb0, 0xc1, 0x1b, 0xc8, 0x41, 0x1d, 0xe0, 0xc1,
353 0x1e, 0xf8, 0x41, 0x28, 0x6c, 0x18, 0x88, 0x4d, 0x14, 0x26, 0x08, 0x02,
354 0xb0, 0x01, 0xd8, 0x30, 0x10, 0xa5, 0x50, 0x0a, 0x1b, 0x02, 0x53, 0xd8,
355 0x30, 0x0c, 0xa4, 0x70, 0x0a, 0x13, 0x04, 0xaf, 0x0c, 0x36, 0x04, 0xa9,
356 0x40, 0xa2, 0x2d, 0x2c, 0xcd, 0x8d, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb,
357 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, 0xa1, 0xd0, 0x26, 0x08, 0xc5,
358 0xb6, 0x21, 0x20, 0x26, 0x08, 0x05, 0x37, 0x41, 0x28, 0xba, 0x0d, 0x0b,
359 0xc1, 0x0a, 0xad, 0xe0, 0x0a, 0xaf, 0x00, 0x0b, 0x03, 0x2c, 0x10, 0xb1,
360 0x00, 0x10, 0xa1, 0x2a, 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20,
361 0x14, 0xde, 0x06, 0xa1, 0xeb, 0x36, 0x2c, 0xc3, 0x2c, 0xb4, 0x42, 0x2c,
362 0xbc, 0x02, 0x2d, 0x0c, 0xb4, 0x30, 0xc4, 0x42, 0x2d, 0xb0, 0x18, 0x7a,
363 0x62, 0x7a, 0x92, 0x9a, 0x20, 0x10, 0xd9, 0x06, 0xa1, 0xc3, 0x85, 0x0d,
364 0x0b, 0x73, 0x0b, 0xad, 0x10, 0x0b, 0xaf, 0x40, 0x0b, 0x03, 0x2c, 0x30,
365 0xb1, 0x90, 0x0b, 0x1b, 0x06, 0x59, 0xb0, 0x05, 0x5d, 0x60, 0x32, 0x65,
366 0xf5, 0x45, 0x15, 0x26, 0x77, 0x56, 0x46, 0x37, 0x41, 0x28, 0xbe, 0x0d,
367 0x0b, 0xc1, 0x0b, 0xad, 0xd0, 0x0b, 0xaf, 0x10, 0x0b, 0x03, 0x2c, 0x10,
368 0xb1, 0x90, 0x0b, 0x1b, 0x02, 0x5f, 0xd8, 0x30, 0xec, 0xc2, 0x2f, 0x00,
369 0x1b, 0x0a, 0x52, 0x58, 0x05, 0x70, 0xd0, 0x00, 0x1a, 0x66, 0x6c, 0x6f,
370 0x61, 0x74, 0x73, 0x2c, 0xd2, 0xdc, 0xe6, 0xe8, 0xe6, 0x68, 0xcc, 0xa5,
371 0x9d, 0x7d, 0xb1, 0x91, 0xd1, 0x98, 0x4b, 0x3b, 0xfb, 0x9a, 0xa3, 0x23,
372 0x42, 0x57, 0x86, 0xf7, 0xe5, 0xf6, 0x26, 0xd7, 0xb6, 0x41, 0x11, 0x07,
373 0x6f, 0x1c, 0xe8, 0x80, 0x1c, 0x90, 0x72, 0x08, 0x03, 0x73, 0x18, 0xaa,
374 0xb0, 0xb1, 0xd9, 0xb5, 0xb9, 0xa4, 0x91, 0x95, 0xb9, 0xd1, 0x4d, 0x09,
375 0x82, 0x2a, 0x64, 0x78, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
376 0x53, 0x02, 0xa2, 0x09, 0x19, 0x9e, 0x8b, 0x5d, 0x18, 0x9b, 0x5d, 0x99,
377 0xdc, 0x94, 0xa0, 0xa8, 0x43, 0x86, 0xe7, 0x32, 0x87, 0x16, 0x46, 0x56,
378 0x26, 0xd7, 0xf4, 0x46, 0x56, 0xc6, 0x36, 0x25, 0x40, 0xca, 0x90, 0xe1,
379 0xb9, 0xc8, 0x95, 0xcd, 0xbd, 0xd5, 0xc9, 0x8d, 0x95, 0xcd, 0x4d, 0x09,
380 0xb2, 0x4a, 0x64, 0x78, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x6e,
381 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x04, 0x51, 0x38,
382 0x85, 0x3a, 0x64, 0x78, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x53,
383 0x74, 0x61, 0x74, 0x65, 0x53, 0x82, 0x54, 0xa8, 0x43, 0x86, 0xe7, 0x52,
384 0xe6, 0x46, 0x27, 0x97, 0x07, 0xf5, 0x96, 0xe6, 0x46, 0x37, 0x37, 0x25,
385 0x00, 0x87, 0x2e, 0x64, 0x78, 0x2e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65,
386 0x72, 0x73, 0x53, 0x02, 0x73, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00,
387 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c,
388 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80,
389 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed,
390 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d,
391 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83,
392 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78,
393 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70,
394 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc,
395 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3,
396 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c,
397 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83,
398 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03,
399 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68,
400 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60,
401 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80,
402 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98,
403 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec,
404 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c,
405 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d,
406 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43,
407 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03,
408 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03,
409 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28,
410 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4,
411 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1,
412 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00,
413 0x00, 0x18, 0x00, 0x00, 0x00, 0x46, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe,
414 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02,
415 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11,
416 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe,
417 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6,
418 0x0d, 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, 0xb3, 0x10, 0x7e,
419 0x71, 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, 0x39, 0x11,
420 0x81, 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x06, 0x40, 0x30, 0x00,
421 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53,
422 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x58, 0xef,
423 0xcd, 0x6c, 0xfa, 0x5e, 0xef, 0x87, 0x2e, 0x7c, 0xbc, 0x3b, 0x5f, 0x38,
424 0xb8, 0x44, 0x58, 0x49, 0x4c, 0x8c, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00,
425 0x00, 0xe3, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00,
426 0x00, 0x10, 0x00, 0x00, 0x00, 0x74, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0,
427 0xde, 0x21, 0x0c, 0x00, 0x00, 0xda, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20,
428 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23,
429 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84,
430 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45,
431 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18,
432 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88,
433 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4,
434 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46,
435 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0,
436 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff,
437 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff,
438 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00,
439 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00,
440 0x00, 0x89, 0x20, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48,
441 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22,
442 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4,
443 0x4c, 0x10, 0x7c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08,
444 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18,
445 0x80, 0x10, 0x52, 0x06, 0xa1, 0x9b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90,
446 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46, 0xc5, 0x18, 0x63,
447 0x10, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0,
448 0x0c, 0x0b, 0x81, 0x82, 0x55, 0x18, 0x45, 0x18, 0x1b, 0x63, 0x0c, 0x42,
449 0xc8, 0xa0, 0x76, 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d,
450 0x54, 0xb1, 0x12, 0x93, 0x5f, 0xdc, 0x36, 0x22, 0xc6, 0x18, 0xa3, 0x10,
451 0x8f, 0x30, 0x42, 0x70, 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x10, 0x49,
452 0x73, 0x20, 0x60, 0x18, 0x81, 0x18, 0x66, 0x6a, 0x83, 0x71, 0x60, 0x87,
453 0x70, 0x98, 0x87, 0x79, 0x70, 0x03, 0x5a, 0x28, 0x07, 0x7c, 0xa0, 0x87,
454 0x7a, 0x90, 0x87, 0x72, 0x90, 0x03, 0x52, 0xe0, 0x03, 0x7b, 0x28, 0x87,
455 0x71, 0xa0, 0x87, 0x77, 0x90, 0x07, 0x3e, 0x30, 0x07, 0x76, 0x78, 0x87,
456 0x70, 0xa0, 0x07, 0x36, 0x00, 0x03, 0x3a, 0xf0, 0x03, 0x30, 0xf0, 0x03,
457 0x3d, 0xd0, 0x83, 0x76, 0x48, 0x07, 0x78, 0x98, 0x87, 0x5f, 0xa0, 0x87,
458 0x7c, 0x80, 0x87, 0x72, 0x40, 0x01, 0x99, 0x49, 0x0c, 0xc6, 0x81, 0x1d,
459 0xc2, 0x61, 0x1e, 0xe6, 0xc1, 0x0d, 0x68, 0xa1, 0x1c, 0xf0, 0x81, 0x1e,
460 0xea, 0x41, 0x1e, 0xca, 0x41, 0x0e, 0x48, 0x81, 0x0f, 0xec, 0xa1, 0x1c,
461 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xf8, 0xc0, 0x1c, 0xd8, 0xe1, 0x1d,
462 0xc2, 0x81, 0x1e, 0xd8, 0x00, 0x0c, 0xe8, 0xc0, 0x0f, 0xc0, 0xc0, 0x0f,
463 0x90, 0x60, 0x2f, 0xe1, 0x4b, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24,
464 0xc4, 0x8c, 0x31, 0xc6, 0x18, 0x63, 0x58, 0x6b, 0x2d, 0xe9, 0x9b, 0xa4,
465 0x29, 0xa2, 0x84, 0xc9, 0x67, 0x01, 0xe6, 0x59, 0x88, 0x88, 0x9d, 0x80,
466 0x89, 0x40, 0x01, 0x21, 0x9e, 0x0e, 0x04, 0x00, 0x00, 0x13, 0x14, 0x72,
467 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72,
468 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e,
469 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07,
470 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
471 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07,
472 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07,
473 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07,
474 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07,
475 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06,
476 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e,
477 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
478 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
479 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00,
480 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00,
481 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c,
482 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00,
483 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01,
484 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08,
485 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c,
486 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02,
487 0x50, 0x0c, 0x45, 0x50, 0x12, 0x05, 0x1c, 0x50, 0x06, 0xe5, 0x41, 0xa5,
488 0x24, 0xca, 0xa0, 0x10, 0x46, 0x00, 0x8a, 0xa0, 0x40, 0x28, 0xcf, 0x00,
489 0xd0, 0x9e, 0x01, 0xa0, 0x3e, 0x03, 0x40, 0x7e, 0x2c, 0x87, 0x21, 0x00,
490 0x00, 0x00, 0x9e, 0x07, 0x00, 0x02, 0x81, 0x40, 0x00, 0x79, 0x18, 0x00,
491 0x00, 0x6a, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13,
492 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b,
493 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b,
494 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9,
495 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13,
496 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x26, 0x08, 0x04,
497 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x70, 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26,
498 0x08, 0x19, 0x45, 0x60, 0x82, 0x40, 0x24, 0x13, 0x04, 0x42, 0xd9, 0x20,
499 0x10, 0xcd, 0x86, 0x84, 0x50, 0x16, 0x82, 0x18, 0x18, 0xc2, 0xd9, 0x10,
500 0x3c, 0x13, 0x84, 0xad, 0x9a, 0x20, 0x10, 0xcb, 0x06, 0x84, 0x88, 0x16,
501 0x62, 0x18, 0x24, 0x60, 0x43, 0x30, 0x4d, 0x10, 0x3a, 0x6b, 0x03, 0x42,
502 0x54, 0x0b, 0x41, 0x0c, 0x04, 0xb0, 0x21, 0xb0, 0x36, 0x10, 0x10, 0x40,
503 0x5d, 0x13, 0x04, 0xef, 0xda, 0x10, 0x64, 0x13, 0x04, 0x01, 0x20, 0xd1,
504 0x16, 0x96, 0xe6, 0xc6, 0x65, 0xca, 0xea, 0x0b, 0xea, 0x6d, 0x2e, 0x8d,
505 0x2e, 0xed, 0xcd, 0x6d, 0x82, 0x50, 0x38, 0x13, 0x84, 0xe2, 0xd9, 0x10,
506 0x10, 0x13, 0x84, 0x02, 0x9a, 0x20, 0x14, 0xd1, 0x86, 0x85, 0xe8, 0xbc,
507 0x0f, 0x0c, 0xc2, 0x60, 0x08, 0x03, 0x42, 0x0c, 0x00, 0x22, 0x54, 0x45,
508 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x13, 0x84, 0x42, 0x9a, 0x20, 0x10,
509 0xcc, 0x06, 0xc1, 0x0c, 0xcc, 0x60, 0xc3, 0x32, 0x90, 0x81, 0x27, 0x06,
510 0x60, 0x50, 0x06, 0x43, 0x19, 0x0c, 0x62, 0x70, 0x06, 0x2c, 0x86, 0x9e,
511 0x98, 0x9e, 0xa4, 0x26, 0x08, 0x44, 0xb3, 0x41, 0x30, 0x03, 0x35, 0xd8,
512 0xb0, 0x30, 0x69, 0xe0, 0x89, 0x01, 0x18, 0x94, 0xc1, 0x10, 0x06, 0x8c,
513 0x18, 0xac, 0xc1, 0x86, 0x61, 0x0c, 0xd0, 0x80, 0x0d, 0x98, 0x4c, 0x59,
514 0x7d, 0x51, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x4d, 0x10, 0x8a, 0x69, 0xc3,
515 0x42, 0xb8, 0x81, 0xf7, 0x06, 0x60, 0x20, 0x06, 0x43, 0x18, 0x10, 0x62,
516 0xb0, 0x06, 0x1b, 0x02, 0x38, 0xd8, 0x30, 0xb4, 0x41, 0x1c, 0x00, 0x1b,
517 0x8a, 0x8d, 0x93, 0x03, 0x0c, 0xa8, 0xc2, 0xc6, 0x66, 0xd7, 0xe6, 0x92,
518 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8,
519 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78,
520 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x02, 0xa3, 0x0e, 0x19,
521 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, 0x99, 0x5c, 0xd3, 0x1b, 0x59, 0x19,
522 0xdb, 0x94, 0x00, 0x29, 0x43, 0x86, 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56,
523 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, 0xb8, 0xea, 0x90, 0xe1, 0xb9, 0xd8,
524 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09,
525 0xb2, 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f,
526 0x69, 0x6e, 0x74, 0x73, 0x53, 0x02, 0x39, 0x00, 0x00, 0x79, 0x18, 0x00,
527 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c,
528 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80,
529 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed,
530 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d,
531 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83,
532 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78,
533 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70,
534 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc,
535 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3,
536 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c,
537 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83,
538 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03,
539 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68,
540 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60,
541 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80,
542 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98,
543 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec,
544 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c,
545 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d,
546 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43,
547 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03,
548 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03,
549 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28,
550 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4,
551 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1,
552 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00,
553 0x00, 0x18, 0x00, 0x00, 0x00, 0x46, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe,
554 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02,
555 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11,
556 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe,
557 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6,
558 0x0d, 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, 0xb3, 0x10, 0x7e,
559 0x71, 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, 0x39, 0x11,
560 0x81, 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x06, 0x40, 0x30, 0x00,
561 0xd2, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x46, 0x00, 0x00,
562 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
563 0x00, 0x24, 0x47, 0x00, 0x88, 0xcc, 0x00, 0x14, 0x42, 0x29, 0x94, 0x5c,
564 0xe1, 0x95, 0x1d, 0x95, 0x12, 0xa0, 0x31, 0x03, 0x00, 0x23, 0x06, 0x09,
565 0x00, 0x82, 0x60, 0x30, 0x71, 0x05, 0xa4, 0x69, 0xc9, 0x88, 0x41, 0x02,
566 0x80, 0x20, 0x18, 0x4c, 0x9d, 0x31, 0x6d, 0x9b, 0x32, 0x62, 0x90, 0x00,
567 0x20, 0x08, 0x06, 0x93, 0x77, 0x44, 0x5c, 0xb7, 0x8c, 0x18, 0x24, 0x00,
568 0x08, 0x82, 0x81, 0x31, 0x06, 0xca, 0xd6, 0x4d, 0xcb, 0x88, 0x41, 0x02,
569 0x80, 0x20, 0x18, 0x18, 0x64, 0xb0, 0x70, 0x9e, 0xc1, 0x8c, 0x18, 0x24,
570 0x00, 0x08, 0x82, 0x81, 0x51, 0x06, 0x4c, 0xf7, 0x51, 0xcd, 0x88, 0x41,
571 0x02, 0x80, 0x20, 0x18, 0x18, 0x66, 0xd0, 0x78, 0x60, 0x80, 0x39, 0x23,
572 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x9c, 0x81, 0x23, 0x06, 0x61, 0x70,
573 0x3d, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0xa0, 0xc1, 0x33, 0x06,
574 0x62, 0xa0, 0x40, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0x9c, 0x41,
575 0x93, 0x20, 0x42, 0xa0, 0x28, 0x63, 0x30, 0x06, 0x91, 0x32, 0x9a, 0x10,
576 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30,
577 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0xd0, 0x1a, 0x44, 0x0c, 0x1a, 0x8c,
578 0x26, 0x04, 0x83, 0x19, 0x8d, 0x7c, 0x2c, 0x10, 0xe4, 0x63, 0x87, 0x23,
579 0x1f, 0x0b, 0x08, 0xf9, 0x18, 0xf2, 0xc8, 0xc7, 0x02, 0x43, 0x3e, 0x96,
580 0x40, 0xf2, 0x19, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0xc4, 0x0e, 0xba,
581 0x38, 0x88, 0x83, 0x33, 0x30, 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00,
582 0xb1, 0x83, 0x2e, 0x0e, 0xe2, 0x20, 0x23, 0x46, 0x0c, 0x12, 0x00, 0x04,
583 0xc1, 0x00, 0xb1, 0x83, 0x2e, 0x0e, 0xe2, 0xc0, 0x0c, 0x84, 0x11, 0x83,
584 0x04, 0x00, 0x41, 0x30, 0x40, 0xec, 0xa0, 0x8b, 0x83, 0x38, 0x48, 0x83,
585 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
586};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.hlsl b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.hlsl
new file mode 100644
index 0000000..f705742
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_PixelShader_Textures.hlsl
@@ -0,0 +1,8 @@
1
2#include "D3D12_PixelShader_Common.hlsli"
3
4[RootSignature(TextureRS)]
5float4 main(PixelShaderInput input) : SV_TARGET
6{
7 return GetOutputColor(texture0.Sample(sampler0, input.tex)) * input.color;
8}
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Advanced.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Advanced.h
new file mode 100644
index 0000000..ac88cbb
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Advanced.h
@@ -0,0 +1,31 @@
1#if 0
2Disassembly failed
3#endif
4
5const unsigned char g_AdvancedRS[] = {
6 0x44, 0x58, 0x42, 0x43, 0x61, 0xd8, 0x65, 0x6e, 0x1d, 0x30, 0x64, 0x8a,
7 0x54, 0x75, 0xb7, 0x59, 0xea, 0x11, 0x73, 0xec, 0x01, 0x00, 0x00, 0x00,
8 0x24, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
9 0x52, 0x54, 0x53, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
10 0x06, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
11 0xf8, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
12 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
13 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14 0x05, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
15 0x05, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
16 0x05, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17 0x05, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
18 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
19 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
20 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
21 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
22 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00,
23 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
24 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
25 0x01, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
27 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
28 0xe0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
29 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30 0xff, 0xff, 0xff, 0xff
31};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Color.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Color.h
new file mode 100644
index 0000000..e47eb5c
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Color.h
@@ -0,0 +1,16 @@
1#if 0
2Disassembly failed
3#endif
4
5const unsigned char g_ColorRS[] = {
6 0x44, 0x58, 0x42, 0x43, 0x1a, 0x67, 0x3b, 0x20, 0xac, 0xdc, 0xbb, 0xa0,
7 0x3c, 0x72, 0xa7, 0xdf, 0x14, 0xa5, 0x3a, 0x2e, 0x01, 0x00, 0x00, 0x00,
8 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
9 0x52, 0x54, 0x53, 0x30, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
10 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
11 0x48, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
12 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
13 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
15 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00
16};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Texture.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Texture.h
new file mode 100644
index 0000000..2675b98
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_RootSig_Texture.h
@@ -0,0 +1,23 @@
1#if 0
2Disassembly failed
3#endif
4
5const unsigned char g_TextureRS[] = {
6 0x44, 0x58, 0x42, 0x43, 0xbc, 0x46, 0x63, 0x56, 0xe3, 0xea, 0x41, 0x4c,
7 0xf7, 0x90, 0x24, 0xc2, 0x14, 0x4d, 0x79, 0xdd, 0x01, 0x00, 0x00, 0x00,
8 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
9 0x52, 0x54, 0x53, 0x30, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
10 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
11 0xa0, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
12 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
13 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14 0x05, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
15 0x05, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
16 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
17 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
18 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
19 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
21 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
22 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
23};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_Shader_Common.hlsli b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_Shader_Common.hlsli
new file mode 100644
index 0000000..4bf8074
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_Shader_Common.hlsli
@@ -0,0 +1,37 @@
1#pragma pack_matrix( row_major )
2
3cbuffer VertexShaderConstants : register(b0)
4{
5 matrix model;
6 matrix projectionAndView;
7};
8
9#define ColorRS \
10 "RootFlags ( ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT |" \
11 "DENY_DOMAIN_SHADER_ROOT_ACCESS |" \
12 "DENY_GEOMETRY_SHADER_ROOT_ACCESS |" \
13 "DENY_HULL_SHADER_ROOT_ACCESS )," \
14 "RootConstants(num32BitConstants=32, b0)," \
15 "RootConstants(num32BitConstants=24, b1)"\
16
17#define TextureRS \
18 "RootFlags ( ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT |" \
19 " DENY_DOMAIN_SHADER_ROOT_ACCESS |" \
20 " DENY_GEOMETRY_SHADER_ROOT_ACCESS |" \
21 " DENY_HULL_SHADER_ROOT_ACCESS )," \
22 "RootConstants(num32BitConstants=32, b0),"\
23 "RootConstants(num32BitConstants=24, b1),"\
24 "DescriptorTable ( SRV(t0), visibility = SHADER_VISIBILITY_PIXEL ),"\
25 "DescriptorTable ( Sampler(s0), visibility = SHADER_VISIBILITY_PIXEL )"
26
27#define AdvancedRS \
28 "RootFlags ( ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT |" \
29 " DENY_DOMAIN_SHADER_ROOT_ACCESS |" \
30 " DENY_GEOMETRY_SHADER_ROOT_ACCESS |" \
31 " DENY_HULL_SHADER_ROOT_ACCESS )," \
32 "RootConstants(num32BitConstants=32, b0),"\
33 "RootConstants(num32BitConstants=24, b1),"\
34 "DescriptorTable ( SRV(t0), visibility = SHADER_VISIBILITY_PIXEL ),"\
35 "DescriptorTable ( SRV(t1), visibility = SHADER_VISIBILITY_PIXEL ),"\
36 "DescriptorTable ( SRV(t2), visibility = SHADER_VISIBILITY_PIXEL ),"\
37 "DescriptorTable ( Sampler(s0), visibility = SHADER_VISIBILITY_PIXEL )"
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader.hlsl b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader.hlsl
new file mode 100644
index 0000000..c7d2433
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader.hlsl
@@ -0,0 +1,45 @@
1#include "D3D12_Shader_Common.hlsli"
2
3struct VertexShaderInput
4{
5 float3 pos : POSITION;
6 float2 tex : TEXCOORD0;
7 float4 color : COLOR0;
8};
9
10struct VertexShaderOutput
11{
12 float4 pos : SV_POSITION;
13 float2 tex : TEXCOORD0;
14 float4 color : COLOR0;
15};
16
17[RootSignature(ColorRS)]
18VertexShaderOutput mainColor(VertexShaderInput input)
19{
20 VertexShaderOutput output;
21 float4 pos = float4(input.pos, 1.0f);
22
23 // Transform the vertex position into projected space.
24 pos = mul(pos, model);
25 pos = mul(pos, projectionAndView);
26 output.pos = pos;
27
28 // Pass through texture coordinates and color values without transformation
29 output.tex = input.tex;
30 output.color = input.color;
31
32 return output;
33}
34
35[RootSignature(TextureRS)]
36VertexShaderOutput mainTexture(VertexShaderInput input)
37{
38 return mainColor(input);
39}
40
41[RootSignature(AdvancedRS)]
42VertexShaderOutput mainAdvanced(VertexShaderInput input)
43{
44 return mainColor(input);
45}
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Advanced.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Advanced.h
new file mode 100644
index 0000000..5c358d5
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Advanced.h
@@ -0,0 +1,653 @@
1#if 0
2;
3; Input signature:
4;
5; Name Index Mask Register SysValue Format Used
6; -------------------- ----- ------ -------- -------- ------- ------
7; POSITION 0 xyz 0 NONE float xyz
8; TEXCOORD 0 xy 1 NONE float xy
9; COLOR 0 xyzw 2 NONE float xyzw
10;
11;
12; Output signature:
13;
14; Name Index Mask Register SysValue Format Used
15; -------------------- ----- ------ -------- -------- ------- ------
16; SV_Position 0 xyzw 0 POS float xyzw
17; TEXCOORD 0 xy 1 NONE float xy
18; COLOR 0 xyzw 2 NONE float xyzw
19;
20; shader hash: c170d994513745a8e268b8d54da903ed
21;
22; Pipeline Runtime Information:
23;
24; Vertex Shader
25; OutputPositionPresent=1
26;
27;
28; Input signature:
29;
30; Name Index InterpMode DynIdx
31; -------------------- ----- ---------------------- ------
32; POSITION 0
33; TEXCOORD 0
34; COLOR 0
35;
36; Output signature:
37;
38; Name Index InterpMode DynIdx
39; -------------------- ----- ---------------------- ------
40; SV_Position 0 noperspective
41; TEXCOORD 0 linear
42; COLOR 0 linear
43;
44; Buffer Definitions:
45;
46; cbuffer VertexShaderConstants
47; {
48;
49; struct hostlayout.VertexShaderConstants
50; {
51;
52; row_major float4x4 model; ; Offset: 0
53; row_major float4x4 projectionAndView; ; Offset: 64
54;
55; } VertexShaderConstants; ; Offset: 0 Size: 128
56;
57; }
58;
59;
60; Resource Bindings:
61;
62; Name Type Format Dim ID HLSL Bind Count
63; ------------------------------ ---------- ------- ----------- ------- -------------- ------
64; VertexShaderConstants cbuffer NA NA CB0 cb0 1
65;
66;
67; ViewId state:
68;
69; Number of inputs: 12, outputs: 12
70; Outputs dependent on ViewId: { }
71; Inputs contributing to computation of Outputs:
72; output 0 depends on inputs: { 0, 1, 2 }
73; output 1 depends on inputs: { 0, 1, 2 }
74; output 2 depends on inputs: { 0, 1, 2 }
75; output 3 depends on inputs: { 0, 1, 2 }
76; output 4 depends on inputs: { 4 }
77; output 5 depends on inputs: { 5 }
78; output 8 depends on inputs: { 8 }
79; output 9 depends on inputs: { 9 }
80; output 10 depends on inputs: { 10 }
81; output 11 depends on inputs: { 11 }
82;
83target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
84target triple = "dxil-ms-dx"
85
86%dx.types.Handle = type { i8* }
87%dx.types.CBufRet.f32 = type { float, float, float, float }
88%hostlayout.VertexShaderConstants = type { [4 x <4 x float>], [4 x <4 x float>] }
89
90define void @mainAdvanced() {
91 %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
92 %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
93 %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
94 %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
95 %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
96 %6 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
97 %7 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
98 %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
99 %9 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
100 %10 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
101 %11 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex)
102 %12 = extractvalue %dx.types.CBufRet.f32 %11, 0
103 %13 = extractvalue %dx.types.CBufRet.f32 %11, 1
104 %14 = extractvalue %dx.types.CBufRet.f32 %11, 2
105 %15 = extractvalue %dx.types.CBufRet.f32 %11, 3
106 %16 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex)
107 %17 = extractvalue %dx.types.CBufRet.f32 %16, 0
108 %18 = extractvalue %dx.types.CBufRet.f32 %16, 1
109 %19 = extractvalue %dx.types.CBufRet.f32 %16, 2
110 %20 = extractvalue %dx.types.CBufRet.f32 %16, 3
111 %21 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 2) ; CBufferLoadLegacy(handle,regIndex)
112 %22 = extractvalue %dx.types.CBufRet.f32 %21, 0
113 %23 = extractvalue %dx.types.CBufRet.f32 %21, 1
114 %24 = extractvalue %dx.types.CBufRet.f32 %21, 2
115 %25 = extractvalue %dx.types.CBufRet.f32 %21, 3
116 %26 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex)
117 %27 = extractvalue %dx.types.CBufRet.f32 %26, 0
118 %28 = extractvalue %dx.types.CBufRet.f32 %26, 1
119 %29 = extractvalue %dx.types.CBufRet.f32 %26, 2
120 %30 = extractvalue %dx.types.CBufRet.f32 %26, 3
121 %31 = fmul fast float %12, %8
122 %32 = call float @dx.op.tertiary.f32(i32 46, float %9, float %17, float %31) ; FMad(a,b,c)
123 %33 = call float @dx.op.tertiary.f32(i32 46, float %10, float %22, float %32) ; FMad(a,b,c)
124 %34 = fadd fast float %33, %27
125 %35 = fmul fast float %13, %8
126 %36 = call float @dx.op.tertiary.f32(i32 46, float %9, float %18, float %35) ; FMad(a,b,c)
127 %37 = call float @dx.op.tertiary.f32(i32 46, float %10, float %23, float %36) ; FMad(a,b,c)
128 %38 = fadd fast float %37, %28
129 %39 = fmul fast float %14, %8
130 %40 = call float @dx.op.tertiary.f32(i32 46, float %9, float %19, float %39) ; FMad(a,b,c)
131 %41 = call float @dx.op.tertiary.f32(i32 46, float %10, float %24, float %40) ; FMad(a,b,c)
132 %42 = fadd fast float %41, %29
133 %43 = fmul fast float %15, %8
134 %44 = call float @dx.op.tertiary.f32(i32 46, float %9, float %20, float %43) ; FMad(a,b,c)
135 %45 = call float @dx.op.tertiary.f32(i32 46, float %10, float %25, float %44) ; FMad(a,b,c)
136 %46 = fadd fast float %45, %30
137 %47 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 4) ; CBufferLoadLegacy(handle,regIndex)
138 %48 = extractvalue %dx.types.CBufRet.f32 %47, 0
139 %49 = extractvalue %dx.types.CBufRet.f32 %47, 1
140 %50 = extractvalue %dx.types.CBufRet.f32 %47, 2
141 %51 = extractvalue %dx.types.CBufRet.f32 %47, 3
142 %52 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 5) ; CBufferLoadLegacy(handle,regIndex)
143 %53 = extractvalue %dx.types.CBufRet.f32 %52, 0
144 %54 = extractvalue %dx.types.CBufRet.f32 %52, 1
145 %55 = extractvalue %dx.types.CBufRet.f32 %52, 2
146 %56 = extractvalue %dx.types.CBufRet.f32 %52, 3
147 %57 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 6) ; CBufferLoadLegacy(handle,regIndex)
148 %58 = extractvalue %dx.types.CBufRet.f32 %57, 0
149 %59 = extractvalue %dx.types.CBufRet.f32 %57, 1
150 %60 = extractvalue %dx.types.CBufRet.f32 %57, 2
151 %61 = extractvalue %dx.types.CBufRet.f32 %57, 3
152 %62 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 7) ; CBufferLoadLegacy(handle,regIndex)
153 %63 = extractvalue %dx.types.CBufRet.f32 %62, 0
154 %64 = extractvalue %dx.types.CBufRet.f32 %62, 1
155 %65 = extractvalue %dx.types.CBufRet.f32 %62, 2
156 %66 = extractvalue %dx.types.CBufRet.f32 %62, 3
157 %67 = fmul fast float %48, %34
158 %68 = call float @dx.op.tertiary.f32(i32 46, float %38, float %53, float %67) ; FMad(a,b,c)
159 %69 = call float @dx.op.tertiary.f32(i32 46, float %42, float %58, float %68) ; FMad(a,b,c)
160 %70 = call float @dx.op.tertiary.f32(i32 46, float %46, float %63, float %69) ; FMad(a,b,c)
161 %71 = fmul fast float %49, %34
162 %72 = call float @dx.op.tertiary.f32(i32 46, float %38, float %54, float %71) ; FMad(a,b,c)
163 %73 = call float @dx.op.tertiary.f32(i32 46, float %42, float %59, float %72) ; FMad(a,b,c)
164 %74 = call float @dx.op.tertiary.f32(i32 46, float %46, float %64, float %73) ; FMad(a,b,c)
165 %75 = fmul fast float %50, %34
166 %76 = call float @dx.op.tertiary.f32(i32 46, float %38, float %55, float %75) ; FMad(a,b,c)
167 %77 = call float @dx.op.tertiary.f32(i32 46, float %42, float %60, float %76) ; FMad(a,b,c)
168 %78 = call float @dx.op.tertiary.f32(i32 46, float %46, float %65, float %77) ; FMad(a,b,c)
169 %79 = fmul fast float %51, %34
170 %80 = call float @dx.op.tertiary.f32(i32 46, float %38, float %56, float %79) ; FMad(a,b,c)
171 %81 = call float @dx.op.tertiary.f32(i32 46, float %42, float %61, float %80) ; FMad(a,b,c)
172 %82 = call float @dx.op.tertiary.f32(i32 46, float %46, float %66, float %81) ; FMad(a,b,c)
173 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %70) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
174 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %74) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
175 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %78) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
176 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %82) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
177 call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %6) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
178 call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %7) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
179 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 0, float %2) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
180 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 1, float %3) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
181 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 2, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
182 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
183 ret void
184}
185
186; Function Attrs: nounwind readnone
187declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0
188
189; Function Attrs: nounwind
190declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1
191
192; Function Attrs: nounwind readonly
193declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2
194
195; Function Attrs: nounwind readnone
196declare float @dx.op.tertiary.f32(i32, float, float, float) #0
197
198; Function Attrs: nounwind readonly
199declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2
200
201attributes #0 = { nounwind readnone }
202attributes #1 = { nounwind }
203attributes #2 = { nounwind readonly }
204
205!llvm.ident = !{!0}
206!dx.version = !{!1}
207!dx.valver = !{!2}
208!dx.shaderModel = !{!3}
209!dx.resources = !{!4}
210!dx.viewIdState = !{!7}
211!dx.entryPoints = !{!8}
212
213!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
214!1 = !{i32 1, i32 0}
215!2 = !{i32 1, i32 6}
216!3 = !{!"vs", i32 6, i32 0}
217!4 = !{null, null, !5, null}
218!5 = !{!6}
219!6 = !{i32 0, %hostlayout.VertexShaderConstants* undef, !"", i32 0, i32 0, i32 1, i32 128, null}
220!7 = !{[14 x i32] [i32 12, i32 12, i32 15, i32 15, i32 15, i32 0, i32 16, i32 32, i32 0, i32 0, i32 256, i32 512, i32 1024, i32 2048]}
221!8 = !{void ()* @mainAdvanced, !"mainAdvanced", !9, !4, null}
222!9 = !{!10, !18, null}
223!10 = !{!11, !14, !16}
224!11 = !{i32 0, !"POSITION", i8 9, i8 0, !12, i8 0, i32 1, i8 3, i32 0, i8 0, !13}
225!12 = !{i32 0}
226!13 = !{i32 3, i32 7}
227!14 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 1, i8 0, !15}
228!15 = !{i32 3, i32 3}
229!16 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 0, i32 1, i8 4, i32 2, i8 0, !17}
230!17 = !{i32 3, i32 15}
231!18 = !{!19, !20, !21}
232!19 = !{i32 0, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 0, i8 0, !17}
233!20 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 2, i32 1, i8 0, !15}
234!21 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 2, i8 0, !17}
235
236#endif
237
238const unsigned char g_mainAdvanced[] = {
239 0x44, 0x58, 0x42, 0x43, 0xff, 0x5d, 0x02, 0x19, 0xed, 0x89, 0xe9, 0x33,
240 0xf6, 0x5b, 0x76, 0x8c, 0x9f, 0x8b, 0x4d, 0xf1, 0x01, 0x00, 0x00, 0x00,
241 0x63, 0x13, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
242 0x50, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00,
243 0x87, 0x02, 0x00, 0x00, 0x87, 0x03, 0x00, 0x00, 0x3f, 0x0a, 0x00, 0x00,
244 0x5b, 0x0a, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31,
246 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
247 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
250 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
254 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58,
256 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00,
257 0x4f, 0x53, 0x47, 0x31, 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
258 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
259 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
260 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
262 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
263 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
265 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74,
267 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44,
268 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x53, 0x56, 0x30, 0x1c,
269 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x03,
272 0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18,
274 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00,
276 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49,
277 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52,
278 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43,
279 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00, 0x03,
282 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
283 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03,
286 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
287 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00,
288 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, 0x0f,
289 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
290 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
291 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
292 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x52,
293 0x54, 0x53, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06,
294 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
295 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
296 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
297 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
298 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
299 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
300 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
301 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
302 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
303 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80,
304 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
305 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
306 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00,
307 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
308 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01,
309 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
310 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
311 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xe0,
312 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
313 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
314 0xff, 0xff, 0xff, 0x53, 0x54, 0x41, 0x54, 0xb0, 0x06, 0x00, 0x00, 0x60,
315 0x00, 0x01, 0x00, 0xac, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00,
316 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x98, 0x06, 0x00, 0x00, 0x42,
317 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xa3, 0x01, 0x00, 0x00, 0x0b,
318 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07,
319 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92,
320 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80,
321 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38,
322 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43,
323 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91,
324 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04,
325 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b,
326 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84,
327 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff,
328 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03,
329 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00,
330 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32,
331 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04,
332 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b,
333 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00,
334 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42,
335 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0,
336 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11,
337 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2,
338 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad,
339 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10,
340 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83,
341 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a, 0xf2, 0x5f, 0x22, 0x9a, 0x88,
342 0x8b, 0x3d, 0x80, 0x81, 0x88, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24,
343 0x24, 0x58, 0x4b, 0x37, 0x1d, 0x08, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87,
344 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87,
345 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00,
346 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90,
347 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0,
348 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30,
349 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
350 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0,
351 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60,
352 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60,
353 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0,
354 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40,
355 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
356 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
357 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00,
358 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00,
359 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00,
360 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30,
361 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x14,
362 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c,
363 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c,
364 0x05, 0x28, 0x50, 0x04, 0x85, 0x50, 0x06, 0xe5, 0x50, 0x12, 0x05, 0x18,
365 0x50, 0x1e, 0x85, 0x51, 0xba, 0x01, 0x45, 0x41, 0xa5, 0x24, 0x46, 0x00,
366 0xca, 0xa0, 0x08, 0x0a, 0x81, 0x62, 0x0d, 0xd0, 0x9d, 0x01, 0x20, 0x3c,
367 0x03, 0x40, 0x79, 0x2c, 0x87, 0x61, 0x9e, 0xe7, 0x01, 0x20, 0x30, 0x00,
368 0x00, 0x10, 0x01, 0x21, 0x10, 0x0c, 0x40, 0x50, 0x00, 0x00, 0x00, 0x79,
369 0x18, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46,
370 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b,
371 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1,
372 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa,
373 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10,
374 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36,
375 0x08, 0x04, 0x41, 0xc1, 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03,
376 0x21, 0x26, 0x08, 0xd8, 0xc6, 0xca, 0xaa, 0x4c, 0x8e, 0xae, 0x0c, 0x6f,
377 0x0a, 0x2d, 0x8c, 0xac, 0x4c, 0x6e, 0xe8, 0xcd, 0x6d, 0x8e, 0x2e, 0xcc,
378 0x8d, 0x6e, 0x6e, 0x82, 0x40, 0x24, 0x1b, 0x10, 0x42, 0x59, 0x08, 0x62,
379 0x60, 0x80, 0x0d, 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x5c,
380 0x1a, 0x8b, 0xb6, 0x37, 0xb2, 0x32, 0xb6, 0x09, 0x02, 0xa1, 0x4c, 0x10,
381 0x88, 0x65, 0xc3, 0x30, 0x4d, 0xc3, 0x04, 0x81, 0x60, 0x26, 0x08, 0x44,
382 0x33, 0x41, 0x20, 0x9c, 0x09, 0x42, 0x94, 0x6d, 0x50, 0x90, 0x48, 0xa2,
383 0x2a, 0xc2, 0xba, 0x2e, 0x8c, 0x11, 0x9c, 0xdc, 0x9b, 0x5a, 0xd9, 0x18,
384 0x5d, 0xda, 0x9b, 0x5b, 0x90, 0x1b, 0x99, 0x55, 0x5a, 0xd9, 0xdd, 0x04,
385 0x81, 0x78, 0x36, 0x28, 0x88, 0x26, 0x51, 0xd5, 0x66, 0x5d, 0x17, 0xb6,
386 0x61, 0x60, 0x32, 0x6e, 0xc3, 0x40, 0x40, 0xdd, 0x04, 0x41, 0x00, 0x36,
387 0x00, 0x1b, 0x06, 0x02, 0x0c, 0xc0, 0x60, 0x43, 0x10, 0x06, 0x1b, 0x86,
388 0xe1, 0x13, 0x83, 0x09, 0x42, 0xc6, 0x6d, 0x08, 0xc8, 0x80, 0x4c, 0x5b,
389 0x58, 0x9a, 0x5b, 0x10, 0x99, 0x5d, 0x98, 0xdb, 0x58, 0x19, 0x19, 0x11,
390 0xa8, 0xa7, 0xa9, 0x24, 0xaa, 0xa4, 0x27, 0xa7, 0x09, 0x42, 0x41, 0x4d,
391 0x10, 0x8a, 0x6a, 0x43, 0x40, 0x4c, 0x10, 0x0a, 0x6b, 0x83, 0x50, 0x59,
392 0x1b, 0x16, 0xe2, 0x0c, 0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, 0x35,
393 0x20, 0xd2, 0x80, 0x0d, 0x88, 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d, 0x49,
394 0x11, 0x4d, 0x10, 0x8a, 0x6b, 0x83, 0x50, 0x55, 0x1b, 0x96, 0xc1, 0x0d,
395 0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, 0x37, 0x18, 0xd2, 0x00, 0x0e,
396 0x58, 0x0c, 0x3d, 0x31, 0x3d, 0x49, 0x4d, 0x10, 0x0a, 0x6c, 0x82, 0x40,
397 0x40, 0x1b, 0x84, 0x8a, 0x0e, 0x36, 0x2c, 0x92, 0x1c, 0xa0, 0x41, 0x1a,
398 0xa8, 0x41, 0x1a, 0x0c, 0x73, 0x20, 0xa5, 0x41, 0x1d, 0x6c, 0x18, 0xda,
399 0x20, 0x0e, 0xec, 0x80, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a,
400 0x5d, 0xda, 0x9b, 0xdb, 0x86, 0x85, 0xc0, 0x03, 0x34, 0x58, 0x03, 0x35,
401 0x98, 0x83, 0x61, 0x0e, 0x88, 0x34, 0xa8, 0x83, 0x0d, 0xcb, 0xe0, 0x06,
402 0x68, 0x90, 0x06, 0x6a, 0xf0, 0x06, 0xc3, 0x1b, 0x0c, 0x69, 0x00, 0x07,
403 0x1b, 0x16, 0x49, 0x0e, 0xd0, 0x20, 0x0d, 0xd4, 0xe0, 0x0d, 0x86, 0x39,
404 0x90, 0xd2, 0xa0, 0x0e, 0x36, 0x0c, 0x79, 0xa0, 0x07, 0x7b, 0xb0, 0x61,
405 0xb8, 0x03, 0x3e, 0x00, 0x36, 0x14, 0x9f, 0x19, 0xf4, 0xc1, 0x03, 0xd0,
406 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x9b, 0x9b, 0x20, 0x10, 0x11, 0x8b, 0x34,
407 0xb7, 0x39, 0xba, 0xb9, 0x09, 0x02, 0x21, 0xd1, 0x98, 0x4b, 0x3b, 0xfb,
408 0x62, 0x23, 0xa3, 0x31, 0x97, 0x76, 0xf6, 0x35, 0x47, 0x37, 0x41, 0x20,
409 0xa6, 0x0d, 0xc8, 0x1f, 0x80, 0x42, 0x28, 0x88, 0xc2, 0x28, 0x5c, 0xa4,
410 0x50, 0x0a, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca, 0xdc,
411 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, 0xbb, 0x32, 0xb9, 0xb9,
412 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, 0xc5, 0x2e, 0x8c,
413 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x50, 0xd4, 0x21, 0xc3, 0x73, 0x99, 0x43,
414 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, 0x9b, 0x12, 0x20,
415 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, 0xea, 0xe4, 0xc6, 0xca,
416 0xe6, 0xa6, 0x04, 0x4e, 0x25, 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8, 0xb2,
417 0x20, 0x37, 0xb7, 0x37, 0xba, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x29,
418 0x42, 0x27, 0x06, 0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, 0x92,
419 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, 0x64, 0x50, 0x87, 0x0c,
420 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, 0x6e,
421 0x6e, 0x4a, 0xd0, 0x07, 0x5d, 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, 0xdc,
422 0xe8, 0xca, 0xe4, 0xe6, 0xa6, 0x04, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x79,
423 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4,
424 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c,
425 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00,
426 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2,
427 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38,
428 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d,
429 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87,
430 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87,
431 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30,
432 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde,
433 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b,
434 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c,
435 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07,
436 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87,
437 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87,
438 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87,
439 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0,
440 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc,
441 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4,
442 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39,
443 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38,
444 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b,
445 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03,
446 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87,
447 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x71,
448 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef,
449 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61,
450 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3,
451 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34,
452 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f,
453 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44,
454 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, 0xe5,
455 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d,
456 0x00, 0x0c, 0x03, 0x20, 0x8d, 0x36, 0x54, 0x40, 0x23, 0x10, 0x03, 0x00,
457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14,
458 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x70, 0xd9, 0x94, 0x51,
459 0x37, 0x45, 0xa8, 0xe2, 0x68, 0xb8, 0xd5, 0x4d, 0xa9, 0x03, 0xed, 0x44,
460 0x58, 0x49, 0x4c, 0x00, 0x09, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x40,
461 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10,
462 0x00, 0x00, 0x00, 0xe8, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21,
463 0x0c, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02,
464 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41,
465 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25,
466 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42,
467 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a,
468 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00,
469 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41,
470 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51,
471 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff,
472 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff,
473 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
474 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13,
475 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89,
476 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20,
477 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84,
478 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10,
479 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60,
480 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10,
481 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e,
482 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54,
483 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16,
484 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31,
485 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04,
486 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05,
487 0xc0, 0x1c, 0x6a, 0xf2, 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81,
488 0x88, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37,
489 0x1d, 0x08, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36,
490 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e,
491 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07,
492 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07,
493 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07,
494 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06,
495 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
496 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07,
497 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07,
498 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07,
499 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07,
500 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00,
501 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c,
502 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
503 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
504 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
505 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
506 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00,
507 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32,
508 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6,
509 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x06,
510 0xe5, 0x50, 0x04, 0xe5, 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08,
511 0x0a, 0x81, 0xf0, 0x0c, 0x00, 0xe5, 0xb1, 0x1c, 0x86, 0x79, 0x9e, 0x07,
512 0x80, 0xc0, 0x00, 0x00, 0x40, 0x04, 0x84, 0x40, 0x30, 0x00, 0x41, 0x01,
513 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x1a,
514 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73,
515 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71,
516 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a,
517 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b,
518 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7,
519 0x06, 0x61, 0x20, 0x26, 0x08, 0x04, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76,
520 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0xd8, 0x44, 0x60, 0x82, 0x40,
521 0x24, 0x1b, 0x10, 0x42, 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3,
522 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x64, 0xd4, 0x86, 0x00, 0x9a, 0x20,
523 0x08, 0x00, 0x99, 0xb6, 0xb0, 0x34, 0xb7, 0x20, 0x32, 0xbb, 0x30, 0xb7,
524 0xb1, 0x32, 0x32, 0x22, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e,
525 0x13, 0x84, 0xc2, 0x99, 0x20, 0x14, 0xcf, 0x86, 0x80, 0x98, 0x20, 0x14,
526 0xd0, 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4, 0xb2, 0x41, 0xc8, 0xb4, 0x0d,
527 0x0b, 0x41, 0x55, 0xd6, 0x65, 0x0d, 0x18, 0x61, 0x6d, 0x44, 0xa8, 0x8a,
528 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x45, 0xb4, 0x41, 0xc8,
529 0xb2, 0x0d, 0xcb, 0xd0, 0x55, 0xd6, 0x65, 0x0d, 0xde, 0x60, 0x7d, 0x13,
530 0x04, 0x82, 0x61, 0x31, 0xf4, 0xc4, 0xf4, 0x24, 0x35, 0x41, 0x28, 0xa4,
531 0x09, 0x02, 0xd1, 0x6c, 0x10, 0x32, 0x32, 0xd8, 0xb0, 0x84, 0x81, 0x18,
532 0x54, 0xd6, 0x65, 0x0d, 0x63, 0x10, 0x06, 0x56, 0x19, 0x6c, 0x18, 0x38,
533 0x30, 0x30, 0x03, 0x2e, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74,
534 0x69, 0x6f, 0x6e, 0x1b, 0x16, 0x02, 0x0d, 0x2a, 0xec, 0x1a, 0x83, 0x61,
535 0x0c, 0x08, 0xab, 0x0c, 0x36, 0x2c, 0x43, 0x57, 0x59, 0x97, 0x37, 0x78,
536 0x83, 0xf5, 0x6d, 0x58, 0xc2, 0x40, 0x0c, 0x2a, 0xeb, 0xf2, 0x86, 0x31,
537 0x08, 0x03, 0xab, 0x0c, 0x36, 0x0c, 0x69, 0xa0, 0x06, 0x6b, 0xb0, 0x61,
538 0x38, 0x03, 0x36, 0x00, 0x36, 0x14, 0xd2, 0xd4, 0x06, 0x0f, 0x50, 0x85,
539 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10,
540 0x54, 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b,
541 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4,
542 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32,
543 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf,
544 0x45, 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0xe0,
545 0xd4, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2,
546 0x0b, 0xa3, 0x2b, 0x9b, 0x12, 0x40, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc,
547 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x6d,
548 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33,
549 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43,
550 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98,
551 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33,
552 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05,
553 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43,
554 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08,
555 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78,
556 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1,
557 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33,
558 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e,
559 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03,
560 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60,
561 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80,
562 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8,
563 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18,
564 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee,
565 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c,
566 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c,
567 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43,
568 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3,
569 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83,
570 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21,
571 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08,
572 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00,
573 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x36,
574 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5,
575 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2,
576 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3,
577 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62,
578 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f,
579 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6,
580 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11,
581 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x0c, 0x03, 0x20, 0x8d, 0x36, 0x54, 0x40,
582 0x23, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0xcf,
583 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05,
584 0x00, 0x00, 0x00, 0x44, 0x8a, 0xab, 0x14, 0x0a, 0x61, 0x06, 0xa0, 0xec,
585 0x4a, 0x8e, 0x4a, 0x09, 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23,
586 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0x61, 0x03, 0x63, 0x59, 0xc1, 0x88,
587 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0xdd, 0x21, 0x5d, 0x8f, 0x31, 0x62,
588 0x90, 0x00, 0x20, 0x08, 0x06, 0x86, 0x87, 0x4c, 0x18, 0x71, 0x8c, 0x18,
589 0x24, 0x00, 0x08, 0x82, 0x81, 0xf1, 0x25, 0x54, 0xf6, 0x20, 0x23, 0x06,
590 0x09, 0x00, 0x82, 0x60, 0x60, 0x80, 0x81, 0x52, 0x69, 0x51, 0x32, 0x62,
591 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x18, 0x2c, 0xdc, 0x36, 0x29, 0x23,
592 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x88, 0x01, 0xd3, 0x71, 0xc8, 0x32,
593 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x18, 0x34, 0x5d, 0x57, 0x31,
594 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x90, 0x81, 0xe3, 0x79, 0x4a,
595 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x19, 0x3c, 0xdf, 0x57,
596 0x39, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0x90, 0x81, 0xa3, 0x80,
597 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c,
598 0x26, 0x10, 0xc3, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x69, 0x30,
599 0x3d, 0x66, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30,
600 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d,
601 0x1b, 0x60, 0x54, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c,
602 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82,
603 0x41, 0x33, 0x07, 0x5d, 0xc6, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20,
604 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x36, 0x5d, 0xf2, 0x19,
605 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x07, 0x0f, 0xce, 0xe0, 0x7a, 0x82,
606 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xf2, 0x00, 0x0d, 0xae, 0x25,
607 0xb0, 0xe0, 0x80, 0x8e, 0x59, 0x9b, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04,
608 0xc1, 0xe0, 0xe1, 0x83, 0x35, 0xd8, 0xa4, 0x60, 0xc4, 0x00, 0x01, 0x40,
609 0x10, 0x0c, 0x9e, 0x3e, 0x60, 0x83, 0xcd, 0x09, 0x2c, 0x50, 0xa0, 0x63,
610 0xd9, 0x27, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x40, 0xe1,
611 0x0d, 0xbe, 0x2a, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x27, 0x14,
612 0xe0, 0xe0, 0x8b, 0x02, 0x0b, 0x1a, 0xe8, 0x18, 0x37, 0x06, 0xf2, 0x19,
613 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x14, 0xe6, 0x60, 0x0c, 0xb0,
614 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x52, 0xa0, 0x83, 0x31,
615 0xa0, 0x02, 0x0b, 0x20, 0xe8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41,
616 0x83, 0x0a, 0x72, 0xe0, 0x06, 0x74, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09,
617 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00,
618 0x20, 0x08, 0x06, 0x4d, 0x2b, 0xdc, 0xc1, 0x1c, 0xe8, 0xc1, 0x68, 0x42,
619 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3,
620 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0xb2, 0xc0, 0x07, 0x78, 0xd0,
621 0x0a, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30,
622 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0xdc, 0x42,
623 0x28, 0xf4, 0xc1, 0x2b, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c,
624 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0xd8, 0x14, 0x06, 0xf2, 0x19, 0x31,
625 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x17, 0x56, 0xc1, 0x7b, 0x82, 0x11,
626 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x7a, 0x81, 0x15, 0xb6, 0x25, 0x18,
627 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0xc7, 0x17, 0x5a, 0x01, 0x3b, 0x02,
628 0xb3, 0xca, 0x40, 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0xf0, 0x80,
629 0xc3, 0x2b, 0x88, 0x81, 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0xc1,
630 0x13, 0x0e, 0xb0, 0xf0, 0x39, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18,
631 0x3c, 0xe2, 0x10, 0x0b, 0x9c, 0x12, 0x58, 0x96, 0x06, 0xf2, 0x19, 0x31,
632 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x1c, 0x66, 0xc1, 0x0c, 0xaa, 0x60,
633 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x72, 0xa0, 0x85, 0x31, 0x88,
634 0x82, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xcc, 0xa1, 0x16, 0xc0,
635 0xa0, 0x09, 0x8c, 0x6b, 0x03, 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82,
636 0xc1, 0x83, 0x0e, 0xb7, 0xa0, 0x06, 0x58, 0x30, 0x62, 0x80, 0x00, 0x20,
637 0x08, 0x06, 0x4f, 0x3a, 0xe0, 0xc2, 0x19, 0x50, 0xc1, 0x88, 0x01, 0x02,
638 0x80, 0x20, 0x18, 0x3c, 0xea, 0x90, 0x0b, 0x64, 0x00, 0x05, 0x23, 0x06,
639 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0x80,
640 0x43, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02,
641 0x3a, 0xa0, 0x03, 0x2d, 0x24, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80,
642 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0xf8, 0x42, 0x31, 0x62, 0x90, 0x00,
643 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02, 0x3a, 0xa0, 0xc3, 0x2f, 0x04,
644 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa4, 0x03,
645 0x3a, 0x80, 0x43, 0x2b, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2,
646 0x0e, 0xb9, 0x90, 0x0e, 0xe8, 0x40, 0x0b, 0xac, 0x30, 0x62, 0x90, 0x00,
647 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0xc2, 0x38, 0xa0, 0x03, 0x38, 0xc4,
648 0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0xed, 0x90, 0x0b, 0xe3,
649 0x80, 0x0e, 0xb4, 0x00, 0x0b, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80,
650 0xb4, 0x43, 0x2e, 0x8c, 0x03, 0x3a, 0xf8, 0xc2, 0x2b, 0x8c, 0x18, 0x24,
651 0x00, 0x08, 0x82, 0x01, 0xd2, 0x0e, 0xb9, 0x30, 0x0e, 0xe8, 0xf0, 0x0b,
652 0xae, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00
653};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Color.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Color.h
new file mode 100644
index 0000000..36909c1
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Color.h
@@ -0,0 +1,637 @@
1#if 0
2;
3; Input signature:
4;
5; Name Index Mask Register SysValue Format Used
6; -------------------- ----- ------ -------- -------- ------- ------
7; POSITION 0 xyz 0 NONE float xyz
8; TEXCOORD 0 xy 1 NONE float xy
9; COLOR 0 xyzw 2 NONE float xyzw
10;
11;
12; Output signature:
13;
14; Name Index Mask Register SysValue Format Used
15; -------------------- ----- ------ -------- -------- ------- ------
16; SV_Position 0 xyzw 0 POS float xyzw
17; TEXCOORD 0 xy 1 NONE float xy
18; COLOR 0 xyzw 2 NONE float xyzw
19;
20; shader hash: 466968c79e75899fd3e9065346b2df1c
21;
22; Pipeline Runtime Information:
23;
24; Vertex Shader
25; OutputPositionPresent=1
26;
27;
28; Input signature:
29;
30; Name Index InterpMode DynIdx
31; -------------------- ----- ---------------------- ------
32; POSITION 0
33; TEXCOORD 0
34; COLOR 0
35;
36; Output signature:
37;
38; Name Index InterpMode DynIdx
39; -------------------- ----- ---------------------- ------
40; SV_Position 0 noperspective
41; TEXCOORD 0 linear
42; COLOR 0 linear
43;
44; Buffer Definitions:
45;
46; cbuffer VertexShaderConstants
47; {
48;
49; struct hostlayout.VertexShaderConstants
50; {
51;
52; row_major float4x4 model; ; Offset: 0
53; row_major float4x4 projectionAndView; ; Offset: 64
54;
55; } VertexShaderConstants; ; Offset: 0 Size: 128
56;
57; }
58;
59;
60; Resource Bindings:
61;
62; Name Type Format Dim ID HLSL Bind Count
63; ------------------------------ ---------- ------- ----------- ------- -------------- ------
64; VertexShaderConstants cbuffer NA NA CB0 cb0 1
65;
66;
67; ViewId state:
68;
69; Number of inputs: 12, outputs: 12
70; Outputs dependent on ViewId: { }
71; Inputs contributing to computation of Outputs:
72; output 0 depends on inputs: { 0, 1, 2 }
73; output 1 depends on inputs: { 0, 1, 2 }
74; output 2 depends on inputs: { 0, 1, 2 }
75; output 3 depends on inputs: { 0, 1, 2 }
76; output 4 depends on inputs: { 4 }
77; output 5 depends on inputs: { 5 }
78; output 8 depends on inputs: { 8 }
79; output 9 depends on inputs: { 9 }
80; output 10 depends on inputs: { 10 }
81; output 11 depends on inputs: { 11 }
82;
83target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
84target triple = "dxil-ms-dx"
85
86%dx.types.Handle = type { i8* }
87%dx.types.CBufRet.f32 = type { float, float, float, float }
88%hostlayout.VertexShaderConstants = type { [4 x <4 x float>], [4 x <4 x float>] }
89
90define void @mainColor() {
91 %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
92 %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
93 %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
94 %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
95 %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
96 %6 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
97 %7 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
98 %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
99 %9 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
100 %10 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
101 %11 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex)
102 %12 = extractvalue %dx.types.CBufRet.f32 %11, 0
103 %13 = extractvalue %dx.types.CBufRet.f32 %11, 1
104 %14 = extractvalue %dx.types.CBufRet.f32 %11, 2
105 %15 = extractvalue %dx.types.CBufRet.f32 %11, 3
106 %16 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex)
107 %17 = extractvalue %dx.types.CBufRet.f32 %16, 0
108 %18 = extractvalue %dx.types.CBufRet.f32 %16, 1
109 %19 = extractvalue %dx.types.CBufRet.f32 %16, 2
110 %20 = extractvalue %dx.types.CBufRet.f32 %16, 3
111 %21 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 2) ; CBufferLoadLegacy(handle,regIndex)
112 %22 = extractvalue %dx.types.CBufRet.f32 %21, 0
113 %23 = extractvalue %dx.types.CBufRet.f32 %21, 1
114 %24 = extractvalue %dx.types.CBufRet.f32 %21, 2
115 %25 = extractvalue %dx.types.CBufRet.f32 %21, 3
116 %26 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex)
117 %27 = extractvalue %dx.types.CBufRet.f32 %26, 0
118 %28 = extractvalue %dx.types.CBufRet.f32 %26, 1
119 %29 = extractvalue %dx.types.CBufRet.f32 %26, 2
120 %30 = extractvalue %dx.types.CBufRet.f32 %26, 3
121 %31 = fmul fast float %12, %8
122 %32 = call float @dx.op.tertiary.f32(i32 46, float %9, float %17, float %31) ; FMad(a,b,c)
123 %33 = call float @dx.op.tertiary.f32(i32 46, float %10, float %22, float %32) ; FMad(a,b,c)
124 %34 = fadd fast float %33, %27
125 %35 = fmul fast float %13, %8
126 %36 = call float @dx.op.tertiary.f32(i32 46, float %9, float %18, float %35) ; FMad(a,b,c)
127 %37 = call float @dx.op.tertiary.f32(i32 46, float %10, float %23, float %36) ; FMad(a,b,c)
128 %38 = fadd fast float %37, %28
129 %39 = fmul fast float %14, %8
130 %40 = call float @dx.op.tertiary.f32(i32 46, float %9, float %19, float %39) ; FMad(a,b,c)
131 %41 = call float @dx.op.tertiary.f32(i32 46, float %10, float %24, float %40) ; FMad(a,b,c)
132 %42 = fadd fast float %41, %29
133 %43 = fmul fast float %15, %8
134 %44 = call float @dx.op.tertiary.f32(i32 46, float %9, float %20, float %43) ; FMad(a,b,c)
135 %45 = call float @dx.op.tertiary.f32(i32 46, float %10, float %25, float %44) ; FMad(a,b,c)
136 %46 = fadd fast float %45, %30
137 %47 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 4) ; CBufferLoadLegacy(handle,regIndex)
138 %48 = extractvalue %dx.types.CBufRet.f32 %47, 0
139 %49 = extractvalue %dx.types.CBufRet.f32 %47, 1
140 %50 = extractvalue %dx.types.CBufRet.f32 %47, 2
141 %51 = extractvalue %dx.types.CBufRet.f32 %47, 3
142 %52 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 5) ; CBufferLoadLegacy(handle,regIndex)
143 %53 = extractvalue %dx.types.CBufRet.f32 %52, 0
144 %54 = extractvalue %dx.types.CBufRet.f32 %52, 1
145 %55 = extractvalue %dx.types.CBufRet.f32 %52, 2
146 %56 = extractvalue %dx.types.CBufRet.f32 %52, 3
147 %57 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 6) ; CBufferLoadLegacy(handle,regIndex)
148 %58 = extractvalue %dx.types.CBufRet.f32 %57, 0
149 %59 = extractvalue %dx.types.CBufRet.f32 %57, 1
150 %60 = extractvalue %dx.types.CBufRet.f32 %57, 2
151 %61 = extractvalue %dx.types.CBufRet.f32 %57, 3
152 %62 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 7) ; CBufferLoadLegacy(handle,regIndex)
153 %63 = extractvalue %dx.types.CBufRet.f32 %62, 0
154 %64 = extractvalue %dx.types.CBufRet.f32 %62, 1
155 %65 = extractvalue %dx.types.CBufRet.f32 %62, 2
156 %66 = extractvalue %dx.types.CBufRet.f32 %62, 3
157 %67 = fmul fast float %48, %34
158 %68 = call float @dx.op.tertiary.f32(i32 46, float %38, float %53, float %67) ; FMad(a,b,c)
159 %69 = call float @dx.op.tertiary.f32(i32 46, float %42, float %58, float %68) ; FMad(a,b,c)
160 %70 = call float @dx.op.tertiary.f32(i32 46, float %46, float %63, float %69) ; FMad(a,b,c)
161 %71 = fmul fast float %49, %34
162 %72 = call float @dx.op.tertiary.f32(i32 46, float %38, float %54, float %71) ; FMad(a,b,c)
163 %73 = call float @dx.op.tertiary.f32(i32 46, float %42, float %59, float %72) ; FMad(a,b,c)
164 %74 = call float @dx.op.tertiary.f32(i32 46, float %46, float %64, float %73) ; FMad(a,b,c)
165 %75 = fmul fast float %50, %34
166 %76 = call float @dx.op.tertiary.f32(i32 46, float %38, float %55, float %75) ; FMad(a,b,c)
167 %77 = call float @dx.op.tertiary.f32(i32 46, float %42, float %60, float %76) ; FMad(a,b,c)
168 %78 = call float @dx.op.tertiary.f32(i32 46, float %46, float %65, float %77) ; FMad(a,b,c)
169 %79 = fmul fast float %51, %34
170 %80 = call float @dx.op.tertiary.f32(i32 46, float %38, float %56, float %79) ; FMad(a,b,c)
171 %81 = call float @dx.op.tertiary.f32(i32 46, float %42, float %61, float %80) ; FMad(a,b,c)
172 %82 = call float @dx.op.tertiary.f32(i32 46, float %46, float %66, float %81) ; FMad(a,b,c)
173 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %70) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
174 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %74) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
175 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %78) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
176 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %82) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
177 call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %6) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
178 call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %7) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
179 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 0, float %2) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
180 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 1, float %3) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
181 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 2, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
182 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
183 ret void
184}
185
186; Function Attrs: nounwind readnone
187declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0
188
189; Function Attrs: nounwind
190declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1
191
192; Function Attrs: nounwind readonly
193declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2
194
195; Function Attrs: nounwind readnone
196declare float @dx.op.tertiary.f32(i32, float, float, float) #0
197
198; Function Attrs: nounwind readonly
199declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2
200
201attributes #0 = { nounwind readnone }
202attributes #1 = { nounwind }
203attributes #2 = { nounwind readonly }
204
205!llvm.ident = !{!0}
206!dx.version = !{!1}
207!dx.valver = !{!2}
208!dx.shaderModel = !{!3}
209!dx.resources = !{!4}
210!dx.viewIdState = !{!7}
211!dx.entryPoints = !{!8}
212
213!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
214!1 = !{i32 1, i32 0}
215!2 = !{i32 1, i32 6}
216!3 = !{!"vs", i32 6, i32 0}
217!4 = !{null, null, !5, null}
218!5 = !{!6}
219!6 = !{i32 0, %hostlayout.VertexShaderConstants* undef, !"", i32 0, i32 0, i32 1, i32 128, null}
220!7 = !{[14 x i32] [i32 12, i32 12, i32 15, i32 15, i32 15, i32 0, i32 16, i32 32, i32 0, i32 0, i32 256, i32 512, i32 1024, i32 2048]}
221!8 = !{void ()* @mainColor, !"mainColor", !9, !4, null}
222!9 = !{!10, !18, null}
223!10 = !{!11, !14, !16}
224!11 = !{i32 0, !"POSITION", i8 9, i8 0, !12, i8 0, i32 1, i8 3, i32 0, i8 0, !13}
225!12 = !{i32 0}
226!13 = !{i32 3, i32 7}
227!14 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 1, i8 0, !15}
228!15 = !{i32 3, i32 3}
229!16 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 0, i32 1, i8 4, i32 2, i8 0, !17}
230!17 = !{i32 3, i32 15}
231!18 = !{!19, !20, !21}
232!19 = !{i32 0, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 0, i8 0, !17}
233!20 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 2, i32 1, i8 0, !15}
234!21 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 2, i8 0, !17}
235
236#endif
237
238const unsigned char g_mainColor[] = {
239 0x44, 0x58, 0x42, 0x43, 0x28, 0x20, 0xca, 0xe8, 0xab, 0xe5, 0x24, 0x7a,
240 0x5d, 0x2b, 0x6f, 0xa4, 0x2c, 0x10, 0xa8, 0xb6, 0x01, 0x00, 0x00, 0x00,
241 0xa3, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
242 0x50, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00,
243 0x87, 0x02, 0x00, 0x00, 0xd7, 0x02, 0x00, 0x00, 0x87, 0x09, 0x00, 0x00,
244 0xa3, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31,
246 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
247 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
250 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
254 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58,
256 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00,
257 0x4f, 0x53, 0x47, 0x31, 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
258 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
259 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
260 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
262 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
263 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
265 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74,
267 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44,
268 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x53, 0x56, 0x30, 0x1c,
269 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x03,
272 0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18,
274 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00,
276 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49,
277 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52,
278 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43,
279 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00, 0x03,
282 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
283 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03,
286 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
287 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00,
288 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, 0x0f,
289 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
290 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
291 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
292 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x52,
293 0x54, 0x53, 0x30, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02,
294 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48,
295 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
296 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
297 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
298 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
299 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0xa8,
300 0x06, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0xaa, 0x01, 0x00, 0x00, 0x44,
301 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x90,
302 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xa1,
303 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13,
304 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06,
305 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e,
306 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4,
307 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48,
308 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4,
309 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1,
310 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08,
311 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40,
312 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d,
313 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49,
314 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20,
315 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x26,
316 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93,
317 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12,
318 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25,
319 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6,
320 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3,
321 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98,
322 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f,
323 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10,
324 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04,
325 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43,
326 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a, 0xf2,
327 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81, 0x88, 0x38, 0xa7, 0x91,
328 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37, 0x1d, 0x08, 0x00, 0x13,
329 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68,
330 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a,
331 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73,
332 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
333 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71,
334 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72,
335 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a,
336 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73,
337 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72,
338 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d,
339 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72,
340 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00,
341 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01,
342 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00,
343 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40,
344 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79,
345 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8,
346 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
347 0x16, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19,
348 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25,
349 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x04, 0x85, 0x50, 0x06, 0xe5,
350 0x50, 0x12, 0x05, 0x18, 0x50, 0x1e, 0x85, 0x51, 0xba, 0x01, 0x45, 0x41,
351 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08, 0x0a, 0x81, 0x62, 0x0d, 0xd0,
352 0x9d, 0x01, 0x20, 0x3c, 0x03, 0x40, 0x79, 0x2c, 0x87, 0x61, 0x9e, 0xe7,
353 0x01, 0x20, 0x30, 0x00, 0x00, 0x10, 0x01, 0x21, 0x10, 0x0c, 0x40, 0x50,
354 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x1a,
355 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73,
356 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71,
357 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a,
358 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b,
359 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7,
360 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, 0x41, 0xc1, 0x6e, 0x6e, 0x82, 0x40,
361 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26, 0x08, 0xd8, 0xc6, 0xca, 0xaa, 0x4c,
362 0x8e, 0xae, 0x0c, 0x6f, 0x0a, 0x2d, 0x8c, 0xac, 0x4c, 0x6e, 0xe8, 0xcd,
363 0x6d, 0x8e, 0x2e, 0xcc, 0x8d, 0x6e, 0x6e, 0x82, 0x40, 0x24, 0x1b, 0x10,
364 0x42, 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, 0x81, 0x00, 0x00,
365 0x07, 0x98, 0x20, 0x5c, 0x1a, 0x8b, 0xb6, 0x37, 0xb2, 0x32, 0xb6, 0x09,
366 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0xc3, 0x30, 0x4d, 0xc3, 0x04, 0x81,
367 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c, 0x09, 0x42, 0x94, 0x6d,
368 0x50, 0x90, 0x48, 0xa2, 0x2a, 0xc2, 0xba, 0x2e, 0x8c, 0x11, 0x9c, 0xdc,
369 0x9b, 0x5a, 0xd9, 0x18, 0x5d, 0xda, 0x9b, 0x5b, 0x90, 0x1b, 0x99, 0x55,
370 0x5a, 0xd9, 0xdd, 0x04, 0x81, 0x78, 0x36, 0x28, 0x88, 0x26, 0x51, 0xd5,
371 0x66, 0x5d, 0x17, 0xb6, 0x61, 0x60, 0x32, 0x6e, 0xc3, 0x40, 0x40, 0xdd,
372 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, 0x02, 0x0c, 0xc0, 0x60, 0x43,
373 0x10, 0x06, 0x1b, 0x86, 0xe1, 0x13, 0x83, 0x09, 0x42, 0xc6, 0x6d, 0x08,
374 0xc8, 0x80, 0x49, 0x5b, 0x58, 0x9a, 0xdb, 0xd0, 0x1b, 0xdb, 0x9b, 0x1c,
375 0x11, 0xa8, 0xa7, 0xa9, 0x24, 0xaa, 0xa4, 0x27, 0xa7, 0x09, 0x42, 0x41,
376 0x4d, 0x10, 0x8a, 0x6a, 0x43, 0x40, 0x4c, 0x10, 0x0a, 0x6b, 0x83, 0x50,
377 0x59, 0x1b, 0x16, 0xe2, 0x0c, 0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86,
378 0x35, 0x20, 0xd2, 0x80, 0x0d, 0x88, 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d,
379 0x49, 0x11, 0x4d, 0x10, 0x8a, 0x6b, 0x83, 0x50, 0x55, 0x1b, 0x96, 0xc1,
380 0x0d, 0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, 0x37, 0x18, 0xd2, 0x00,
381 0x0e, 0x58, 0x0c, 0x3d, 0x31, 0x3d, 0x49, 0x4d, 0x10, 0x0a, 0x6c, 0x82,
382 0x40, 0x40, 0x1b, 0x84, 0x8a, 0x0e, 0x36, 0x2c, 0x92, 0x1c, 0xa0, 0x41,
383 0x1a, 0xa8, 0x41, 0x1a, 0x0c, 0x73, 0x20, 0xa5, 0x41, 0x1d, 0x6c, 0x18,
384 0xda, 0x20, 0x0e, 0xec, 0x80, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c,
385 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x86, 0x85, 0xc0, 0x03, 0x34, 0x58, 0x03,
386 0x35, 0x98, 0x83, 0x61, 0x0e, 0x88, 0x34, 0xa8, 0x83, 0x0d, 0xcb, 0xe0,
387 0x06, 0x68, 0x90, 0x06, 0x6a, 0xf0, 0x06, 0xc3, 0x1b, 0x0c, 0x69, 0x00,
388 0x07, 0x1b, 0x16, 0x49, 0x0e, 0xd0, 0x20, 0x0d, 0xd4, 0xe0, 0x0d, 0x86,
389 0x39, 0x90, 0xd2, 0xa0, 0x0e, 0x36, 0x0c, 0x79, 0xa0, 0x07, 0x7b, 0xb0,
390 0x61, 0xb8, 0x03, 0x3e, 0x00, 0x36, 0x14, 0x9f, 0x19, 0xf4, 0xc1, 0x03,
391 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x9b, 0x9b, 0x20, 0x10, 0x11, 0x8b,
392 0x34, 0xb7, 0x39, 0xba, 0xb9, 0x09, 0x02, 0x21, 0xd1, 0x98, 0x4b, 0x3b,
393 0xfb, 0x62, 0x23, 0xa3, 0x31, 0x97, 0x76, 0xf6, 0x35, 0x47, 0x37, 0x41,
394 0x20, 0xa6, 0x0d, 0xc8, 0x1f, 0x80, 0x42, 0x28, 0x88, 0xc2, 0x28, 0x5c,
395 0xa4, 0x50, 0x0a, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca,
396 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, 0xbb, 0x32, 0xb9,
397 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, 0xc5, 0x2e,
398 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x50, 0xd4, 0x21, 0xc3, 0x73, 0x99,
399 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, 0x9b, 0x12,
400 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, 0xea, 0xe4, 0xc6,
401 0xca, 0xe6, 0xa6, 0x04, 0x4e, 0x25, 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8,
402 0xb2, 0x20, 0x37, 0xb7, 0x37, 0xba, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9,
403 0x29, 0x42, 0x27, 0x06, 0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee,
404 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, 0x64, 0x50, 0x87,
405 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d,
406 0x6e, 0x6e, 0x4a, 0xd0, 0x07, 0x5d, 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea,
407 0xdc, 0xe8, 0xca, 0xe4, 0xe6, 0xa6, 0x04, 0xa5, 0x00, 0x00, 0x00, 0x79,
408 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4,
409 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c,
410 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00,
411 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2,
412 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38,
413 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d,
414 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87,
415 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87,
416 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30,
417 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde,
418 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b,
419 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c,
420 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07,
421 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87,
422 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87,
423 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87,
424 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0,
425 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc,
426 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4,
427 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39,
428 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38,
429 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b,
430 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03,
431 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87,
432 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x71,
433 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef,
434 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61,
435 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3,
436 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34,
437 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f,
438 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44,
439 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, 0xe5,
440 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d,
441 0x00, 0x09, 0x03, 0x20, 0x0d, 0xe7, 0x2c, 0x4e, 0x04, 0x00, 0x00, 0x00,
442 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00,
443 0x00, 0x00, 0x00, 0x46, 0x69, 0x68, 0xc7, 0x9e, 0x75, 0x89, 0x9f, 0xd3,
444 0xe9, 0x06, 0x53, 0x46, 0xb2, 0xdf, 0x1c, 0x44, 0x58, 0x49, 0x4c, 0xf8,
445 0x08, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x3e, 0x02, 0x00, 0x00, 0x44,
446 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe0,
447 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x35,
448 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13,
449 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06,
450 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e,
451 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4,
452 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48,
453 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4,
454 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1,
455 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08,
456 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40,
457 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d,
458 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49,
459 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20,
460 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x26,
461 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93,
462 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12,
463 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25,
464 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6,
465 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3,
466 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98,
467 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f,
468 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10,
469 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04,
470 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10, 0x43,
471 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a, 0xf2,
472 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81, 0x88, 0x38, 0xa7, 0x91,
473 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37, 0x1d, 0x08, 0x00, 0x13,
474 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68,
475 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a,
476 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73,
477 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
478 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71,
479 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72,
480 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a,
481 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73,
482 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72,
483 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d,
484 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72,
485 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00,
486 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01,
487 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00,
488 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40,
489 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x79,
490 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8,
491 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
492 0x16, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19,
493 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25,
494 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x06, 0xe5, 0x50, 0x04, 0xe5,
495 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08, 0x0a, 0x81, 0xf0, 0x0c,
496 0x00, 0xe5, 0xb1, 0x1c, 0x86, 0x79, 0x9e, 0x07, 0x80, 0xc0, 0x00, 0x00,
497 0x40, 0x04, 0x84, 0x40, 0x30, 0x00, 0x41, 0x01, 0x00, 0x00, 0x00, 0x79,
498 0x18, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46,
499 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b,
500 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1,
501 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa,
502 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10,
503 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x26,
504 0x08, 0x04, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76, 0x73, 0x1b, 0x06, 0xc4,
505 0x20, 0x26, 0x08, 0xd8, 0x44, 0x60, 0x82, 0x40, 0x24, 0x1b, 0x10, 0x42,
506 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07,
507 0x98, 0x20, 0x64, 0xd4, 0x86, 0x00, 0x9a, 0x20, 0x08, 0x00, 0x93, 0xb6,
508 0xb0, 0x34, 0xb7, 0xa1, 0x37, 0xb6, 0x37, 0x39, 0x22, 0x50, 0x4f, 0x53,
509 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x13, 0x84, 0xc2, 0x99, 0x20, 0x14, 0xcf,
510 0x86, 0x80, 0x98, 0x20, 0x14, 0xd0, 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4,
511 0xb2, 0x41, 0xc8, 0xb4, 0x0d, 0x0b, 0x41, 0x55, 0xd6, 0x65, 0x0d, 0x18,
512 0x61, 0x6d, 0x44, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26,
513 0x08, 0x45, 0xb4, 0x41, 0xc8, 0xb2, 0x0d, 0xcb, 0xd0, 0x55, 0xd6, 0x65,
514 0x0d, 0xde, 0x60, 0x7d, 0x13, 0x04, 0x82, 0x61, 0x31, 0xf4, 0xc4, 0xf4,
515 0x24, 0x35, 0x41, 0x28, 0xa4, 0x09, 0x02, 0xd1, 0x6c, 0x10, 0x32, 0x32,
516 0xd8, 0xb0, 0x84, 0x81, 0x18, 0x54, 0xd6, 0x65, 0x0d, 0x63, 0x10, 0x06,
517 0x56, 0x19, 0x6c, 0x18, 0x38, 0x30, 0x30, 0x03, 0x2e, 0x53, 0x56, 0x5f,
518 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1b, 0x16, 0x02, 0x0d,
519 0x2a, 0xec, 0x1a, 0x83, 0x61, 0x0c, 0x08, 0xab, 0x0c, 0x36, 0x2c, 0x43,
520 0x57, 0x59, 0x97, 0x37, 0x78, 0x83, 0xf5, 0x6d, 0x58, 0xc2, 0x40, 0x0c,
521 0x2a, 0xeb, 0xf2, 0x86, 0x31, 0x08, 0x03, 0xab, 0x0c, 0x36, 0x0c, 0x69,
522 0xa0, 0x06, 0x6b, 0xb0, 0x61, 0x38, 0x03, 0x36, 0x00, 0x36, 0x14, 0xd2,
523 0xd4, 0x06, 0x0f, 0x50, 0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac,
524 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93,
525 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec,
526 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97,
527 0x39, 0xb4, 0x30, 0xb2, 0x32, 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29,
528 0x01, 0x52, 0x86, 0x0c, 0xcf, 0x45, 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e,
529 0xac, 0x6c, 0x6e, 0x4a, 0xe0, 0xd4, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b,
530 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, 0x2b, 0x9b, 0x12, 0x40, 0x75,
531 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc,
532 0xe8, 0xe6, 0xa6, 0x04, 0x6d, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x49,
533 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14,
534 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79,
535 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e,
536 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1,
537 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc,
538 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74,
539 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a,
540 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e,
541 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e,
542 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21,
543 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0,
544 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc,
545 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72,
546 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76,
547 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f,
548 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c,
549 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03,
550 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1,
551 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61,
552 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8,
553 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94,
554 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0,
555 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73,
556 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77,
557 0xa8, 0x07, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x19,
558 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50,
559 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17,
560 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c,
561 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8,
562 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54,
563 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50,
564 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11,
565 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x09, 0x03, 0x20,
566 0x0d, 0xe7, 0x2c, 0x4e, 0x04, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0xcf,
567 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05,
568 0x00, 0x00, 0x00, 0x44, 0x8a, 0xab, 0x14, 0x0a, 0x61, 0x06, 0xa0, 0xec,
569 0x4a, 0x8e, 0x4a, 0x09, 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23,
570 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0x61, 0x03, 0x63, 0x59, 0xc1, 0x88,
571 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0xdd, 0x21, 0x5d, 0x8f, 0x31, 0x62,
572 0x90, 0x00, 0x20, 0x08, 0x06, 0x86, 0x87, 0x4c, 0x18, 0x71, 0x8c, 0x18,
573 0x24, 0x00, 0x08, 0x82, 0x81, 0xf1, 0x25, 0x54, 0xf6, 0x20, 0x23, 0x06,
574 0x09, 0x00, 0x82, 0x60, 0x60, 0x80, 0x81, 0x52, 0x69, 0x51, 0x32, 0x62,
575 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x18, 0x2c, 0xdc, 0x36, 0x29, 0x23,
576 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x88, 0x01, 0xd3, 0x71, 0xc8, 0x32,
577 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x18, 0x34, 0x5d, 0x57, 0x31,
578 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x90, 0x81, 0xe3, 0x79, 0x4a,
579 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x19, 0x3c, 0xdf, 0x57,
580 0x39, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0x90, 0x81, 0xa3, 0x80,
581 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c,
582 0x26, 0x10, 0xc3, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x69, 0x30,
583 0x3d, 0x66, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30,
584 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d,
585 0x1b, 0x60, 0x54, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c,
586 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82,
587 0x41, 0x33, 0x07, 0x5d, 0xc6, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20,
588 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x36, 0x5d, 0xf2, 0x19,
589 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x07, 0x0f, 0xce, 0xe0, 0x7a, 0x82,
590 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xf2, 0x00, 0x0d, 0xae, 0x25,
591 0xb0, 0xe0, 0x80, 0x8e, 0x59, 0x9b, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04,
592 0xc1, 0xe0, 0xe1, 0x83, 0x35, 0xd8, 0xa4, 0x60, 0xc4, 0x00, 0x01, 0x40,
593 0x10, 0x0c, 0x9e, 0x3e, 0x60, 0x83, 0xcd, 0x09, 0x2c, 0x50, 0xa0, 0x63,
594 0xd9, 0x27, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x40, 0xe1,
595 0x0d, 0xbe, 0x2a, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x27, 0x14,
596 0xe0, 0xe0, 0x8b, 0x02, 0x0b, 0x1a, 0xe8, 0x18, 0x37, 0x06, 0xf2, 0x19,
597 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x14, 0xe6, 0x60, 0x0c, 0xb0,
598 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x52, 0xa0, 0x83, 0x31,
599 0xa0, 0x02, 0x0b, 0x20, 0xe8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41,
600 0x83, 0x0a, 0x72, 0xe0, 0x06, 0x74, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09,
601 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00,
602 0x20, 0x08, 0x06, 0x4d, 0x2b, 0xdc, 0xc1, 0x1c, 0xe8, 0xc1, 0x68, 0x42,
603 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3,
604 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0xb2, 0xc0, 0x07, 0x78, 0xd0,
605 0x0a, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30,
606 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0xdc, 0x42,
607 0x28, 0xf4, 0xc1, 0x2b, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c,
608 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0xd8, 0x14, 0x06, 0xf2, 0x19, 0x31,
609 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x17, 0x56, 0xc1, 0x7b, 0x82, 0x11,
610 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x7a, 0x81, 0x15, 0xb6, 0x25, 0x18,
611 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0xc7, 0x17, 0x5a, 0x01, 0x3b, 0x02,
612 0xb3, 0xca, 0x40, 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0xf0, 0x80,
613 0xc3, 0x2b, 0x88, 0x81, 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0xc1,
614 0x13, 0x0e, 0xb0, 0xf0, 0x39, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18,
615 0x3c, 0xe2, 0x10, 0x0b, 0x9c, 0x12, 0x58, 0x96, 0x06, 0xf2, 0x19, 0x31,
616 0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x1c, 0x66, 0xc1, 0x0c, 0xaa, 0x60,
617 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x72, 0xa0, 0x85, 0x31, 0x88,
618 0x82, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xcc, 0xa1, 0x16, 0xc0,
619 0xa0, 0x09, 0x8c, 0x6b, 0x03, 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82,
620 0xc1, 0x83, 0x0e, 0xb7, 0xa0, 0x06, 0x58, 0x30, 0x62, 0x80, 0x00, 0x20,
621 0x08, 0x06, 0x4f, 0x3a, 0xe0, 0xc2, 0x19, 0x50, 0xc1, 0x88, 0x01, 0x02,
622 0x80, 0x20, 0x18, 0x3c, 0xea, 0x90, 0x0b, 0x64, 0x00, 0x05, 0x23, 0x06,
623 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0x80,
624 0x43, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02,
625 0x3a, 0xa0, 0x03, 0x2d, 0x24, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80,
626 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0xf8, 0x42, 0x31, 0x62, 0x90, 0x00,
627 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02, 0x3a, 0xa0, 0xc3, 0x2f, 0x04,
628 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa4, 0x03,
629 0x3a, 0x80, 0x43, 0x2b, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2,
630 0x0e, 0xb9, 0x90, 0x0e, 0xe8, 0x40, 0x0b, 0xac, 0x30, 0x62, 0x90, 0x00,
631 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0xc2, 0x38, 0xa0, 0x03, 0x38, 0xc4,
632 0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0xed, 0x90, 0x0b, 0xe3,
633 0x80, 0x0e, 0xb4, 0x00, 0x0b, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80,
634 0xb4, 0x43, 0x2e, 0x8c, 0x03, 0x3a, 0xf8, 0xc2, 0x2b, 0x8c, 0x18, 0x24,
635 0x00, 0x08, 0x82, 0x01, 0xd2, 0x0e, 0xb9, 0x30, 0x0e, 0xe8, 0xf0, 0x0b,
636 0xae, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00
637};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Texture.h b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Texture.h
new file mode 100644
index 0000000..ac68e32
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/D3D12_VertexShader_Texture.h
@@ -0,0 +1,645 @@
1#if 0
2;
3; Input signature:
4;
5; Name Index Mask Register SysValue Format Used
6; -------------------- ----- ------ -------- -------- ------- ------
7; POSITION 0 xyz 0 NONE float xyz
8; TEXCOORD 0 xy 1 NONE float xy
9; COLOR 0 xyzw 2 NONE float xyzw
10;
11;
12; Output signature:
13;
14; Name Index Mask Register SysValue Format Used
15; -------------------- ----- ------ -------- -------- ------- ------
16; SV_Position 0 xyzw 0 POS float xyzw
17; TEXCOORD 0 xy 1 NONE float xy
18; COLOR 0 xyzw 2 NONE float xyzw
19;
20; shader hash: 6b5daf1892267550d482ef06f687d614
21;
22; Pipeline Runtime Information:
23;
24; Vertex Shader
25; OutputPositionPresent=1
26;
27;
28; Input signature:
29;
30; Name Index InterpMode DynIdx
31; -------------------- ----- ---------------------- ------
32; POSITION 0
33; TEXCOORD 0
34; COLOR 0
35;
36; Output signature:
37;
38; Name Index InterpMode DynIdx
39; -------------------- ----- ---------------------- ------
40; SV_Position 0 noperspective
41; TEXCOORD 0 linear
42; COLOR 0 linear
43;
44; Buffer Definitions:
45;
46; cbuffer VertexShaderConstants
47; {
48;
49; struct hostlayout.VertexShaderConstants
50; {
51;
52; row_major float4x4 model; ; Offset: 0
53; row_major float4x4 projectionAndView; ; Offset: 64
54;
55; } VertexShaderConstants; ; Offset: 0 Size: 128
56;
57; }
58;
59;
60; Resource Bindings:
61;
62; Name Type Format Dim ID HLSL Bind Count
63; ------------------------------ ---------- ------- ----------- ------- -------------- ------
64; VertexShaderConstants cbuffer NA NA CB0 cb0 1
65;
66;
67; ViewId state:
68;
69; Number of inputs: 12, outputs: 12
70; Outputs dependent on ViewId: { }
71; Inputs contributing to computation of Outputs:
72; output 0 depends on inputs: { 0, 1, 2 }
73; output 1 depends on inputs: { 0, 1, 2 }
74; output 2 depends on inputs: { 0, 1, 2 }
75; output 3 depends on inputs: { 0, 1, 2 }
76; output 4 depends on inputs: { 4 }
77; output 5 depends on inputs: { 5 }
78; output 8 depends on inputs: { 8 }
79; output 9 depends on inputs: { 9 }
80; output 10 depends on inputs: { 10 }
81; output 11 depends on inputs: { 11 }
82;
83target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
84target triple = "dxil-ms-dx"
85
86%dx.types.Handle = type { i8* }
87%dx.types.CBufRet.f32 = type { float, float, float, float }
88%hostlayout.VertexShaderConstants = type { [4 x <4 x float>], [4 x <4 x float>] }
89
90define void @mainTexture() {
91 %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
92 %2 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
93 %3 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
94 %4 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
95 %5 = call float @dx.op.loadInput.f32(i32 4, i32 2, i32 0, i8 3, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
96 %6 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
97 %7 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
98 %8 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
99 %9 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
100 %10 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 2, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis)
101 %11 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 0) ; CBufferLoadLegacy(handle,regIndex)
102 %12 = extractvalue %dx.types.CBufRet.f32 %11, 0
103 %13 = extractvalue %dx.types.CBufRet.f32 %11, 1
104 %14 = extractvalue %dx.types.CBufRet.f32 %11, 2
105 %15 = extractvalue %dx.types.CBufRet.f32 %11, 3
106 %16 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 1) ; CBufferLoadLegacy(handle,regIndex)
107 %17 = extractvalue %dx.types.CBufRet.f32 %16, 0
108 %18 = extractvalue %dx.types.CBufRet.f32 %16, 1
109 %19 = extractvalue %dx.types.CBufRet.f32 %16, 2
110 %20 = extractvalue %dx.types.CBufRet.f32 %16, 3
111 %21 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 2) ; CBufferLoadLegacy(handle,regIndex)
112 %22 = extractvalue %dx.types.CBufRet.f32 %21, 0
113 %23 = extractvalue %dx.types.CBufRet.f32 %21, 1
114 %24 = extractvalue %dx.types.CBufRet.f32 %21, 2
115 %25 = extractvalue %dx.types.CBufRet.f32 %21, 3
116 %26 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 3) ; CBufferLoadLegacy(handle,regIndex)
117 %27 = extractvalue %dx.types.CBufRet.f32 %26, 0
118 %28 = extractvalue %dx.types.CBufRet.f32 %26, 1
119 %29 = extractvalue %dx.types.CBufRet.f32 %26, 2
120 %30 = extractvalue %dx.types.CBufRet.f32 %26, 3
121 %31 = fmul fast float %12, %8
122 %32 = call float @dx.op.tertiary.f32(i32 46, float %9, float %17, float %31) ; FMad(a,b,c)
123 %33 = call float @dx.op.tertiary.f32(i32 46, float %10, float %22, float %32) ; FMad(a,b,c)
124 %34 = fadd fast float %33, %27
125 %35 = fmul fast float %13, %8
126 %36 = call float @dx.op.tertiary.f32(i32 46, float %9, float %18, float %35) ; FMad(a,b,c)
127 %37 = call float @dx.op.tertiary.f32(i32 46, float %10, float %23, float %36) ; FMad(a,b,c)
128 %38 = fadd fast float %37, %28
129 %39 = fmul fast float %14, %8
130 %40 = call float @dx.op.tertiary.f32(i32 46, float %9, float %19, float %39) ; FMad(a,b,c)
131 %41 = call float @dx.op.tertiary.f32(i32 46, float %10, float %24, float %40) ; FMad(a,b,c)
132 %42 = fadd fast float %41, %29
133 %43 = fmul fast float %15, %8
134 %44 = call float @dx.op.tertiary.f32(i32 46, float %9, float %20, float %43) ; FMad(a,b,c)
135 %45 = call float @dx.op.tertiary.f32(i32 46, float %10, float %25, float %44) ; FMad(a,b,c)
136 %46 = fadd fast float %45, %30
137 %47 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 4) ; CBufferLoadLegacy(handle,regIndex)
138 %48 = extractvalue %dx.types.CBufRet.f32 %47, 0
139 %49 = extractvalue %dx.types.CBufRet.f32 %47, 1
140 %50 = extractvalue %dx.types.CBufRet.f32 %47, 2
141 %51 = extractvalue %dx.types.CBufRet.f32 %47, 3
142 %52 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 5) ; CBufferLoadLegacy(handle,regIndex)
143 %53 = extractvalue %dx.types.CBufRet.f32 %52, 0
144 %54 = extractvalue %dx.types.CBufRet.f32 %52, 1
145 %55 = extractvalue %dx.types.CBufRet.f32 %52, 2
146 %56 = extractvalue %dx.types.CBufRet.f32 %52, 3
147 %57 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 6) ; CBufferLoadLegacy(handle,regIndex)
148 %58 = extractvalue %dx.types.CBufRet.f32 %57, 0
149 %59 = extractvalue %dx.types.CBufRet.f32 %57, 1
150 %60 = extractvalue %dx.types.CBufRet.f32 %57, 2
151 %61 = extractvalue %dx.types.CBufRet.f32 %57, 3
152 %62 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %1, i32 7) ; CBufferLoadLegacy(handle,regIndex)
153 %63 = extractvalue %dx.types.CBufRet.f32 %62, 0
154 %64 = extractvalue %dx.types.CBufRet.f32 %62, 1
155 %65 = extractvalue %dx.types.CBufRet.f32 %62, 2
156 %66 = extractvalue %dx.types.CBufRet.f32 %62, 3
157 %67 = fmul fast float %48, %34
158 %68 = call float @dx.op.tertiary.f32(i32 46, float %38, float %53, float %67) ; FMad(a,b,c)
159 %69 = call float @dx.op.tertiary.f32(i32 46, float %42, float %58, float %68) ; FMad(a,b,c)
160 %70 = call float @dx.op.tertiary.f32(i32 46, float %46, float %63, float %69) ; FMad(a,b,c)
161 %71 = fmul fast float %49, %34
162 %72 = call float @dx.op.tertiary.f32(i32 46, float %38, float %54, float %71) ; FMad(a,b,c)
163 %73 = call float @dx.op.tertiary.f32(i32 46, float %42, float %59, float %72) ; FMad(a,b,c)
164 %74 = call float @dx.op.tertiary.f32(i32 46, float %46, float %64, float %73) ; FMad(a,b,c)
165 %75 = fmul fast float %50, %34
166 %76 = call float @dx.op.tertiary.f32(i32 46, float %38, float %55, float %75) ; FMad(a,b,c)
167 %77 = call float @dx.op.tertiary.f32(i32 46, float %42, float %60, float %76) ; FMad(a,b,c)
168 %78 = call float @dx.op.tertiary.f32(i32 46, float %46, float %65, float %77) ; FMad(a,b,c)
169 %79 = fmul fast float %51, %34
170 %80 = call float @dx.op.tertiary.f32(i32 46, float %38, float %56, float %79) ; FMad(a,b,c)
171 %81 = call float @dx.op.tertiary.f32(i32 46, float %42, float %61, float %80) ; FMad(a,b,c)
172 %82 = call float @dx.op.tertiary.f32(i32 46, float %46, float %66, float %81) ; FMad(a,b,c)
173 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %70) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
174 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %74) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
175 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %78) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
176 call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %82) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
177 call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %6) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
178 call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %7) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
179 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 0, float %2) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
180 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 1, float %3) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
181 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 2, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
182 call void @dx.op.storeOutput.f32(i32 5, i32 2, i32 0, i8 3, float %5) ; StoreOutput(outputSigId,rowIndex,colIndex,value)
183 ret void
184}
185
186; Function Attrs: nounwind readnone
187declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0
188
189; Function Attrs: nounwind
190declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1
191
192; Function Attrs: nounwind readonly
193declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2
194
195; Function Attrs: nounwind readnone
196declare float @dx.op.tertiary.f32(i32, float, float, float) #0
197
198; Function Attrs: nounwind readonly
199declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2
200
201attributes #0 = { nounwind readnone }
202attributes #1 = { nounwind }
203attributes #2 = { nounwind readonly }
204
205!llvm.ident = !{!0}
206!dx.version = !{!1}
207!dx.valver = !{!2}
208!dx.shaderModel = !{!3}
209!dx.resources = !{!4}
210!dx.viewIdState = !{!7}
211!dx.entryPoints = !{!8}
212
213!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
214!1 = !{i32 1, i32 0}
215!2 = !{i32 1, i32 6}
216!3 = !{!"vs", i32 6, i32 0}
217!4 = !{null, null, !5, null}
218!5 = !{!6}
219!6 = !{i32 0, %hostlayout.VertexShaderConstants* undef, !"", i32 0, i32 0, i32 1, i32 128, null}
220!7 = !{[14 x i32] [i32 12, i32 12, i32 15, i32 15, i32 15, i32 0, i32 16, i32 32, i32 0, i32 0, i32 256, i32 512, i32 1024, i32 2048]}
221!8 = !{void ()* @mainTexture, !"mainTexture", !9, !4, null}
222!9 = !{!10, !18, null}
223!10 = !{!11, !14, !16}
224!11 = !{i32 0, !"POSITION", i8 9, i8 0, !12, i8 0, i32 1, i8 3, i32 0, i8 0, !13}
225!12 = !{i32 0}
226!13 = !{i32 3, i32 7}
227!14 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 0, i32 1, i8 2, i32 1, i8 0, !15}
228!15 = !{i32 3, i32 3}
229!16 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 0, i32 1, i8 4, i32 2, i8 0, !17}
230!17 = !{i32 3, i32 15}
231!18 = !{!19, !20, !21}
232!19 = !{i32 0, !"SV_Position", i8 9, i8 3, !12, i8 4, i32 1, i8 4, i32 0, i8 0, !17}
233!20 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !12, i8 2, i32 1, i8 2, i32 1, i8 0, !15}
234!21 = !{i32 2, !"COLOR", i8 9, i8 0, !12, i8 2, i32 1, i8 4, i32 2, i8 0, !17}
235
236#endif
237
238const unsigned char g_mainTexture[] = {
239 0x44, 0x58, 0x42, 0x43, 0xda, 0xc9, 0x75, 0xea, 0x0d, 0x18, 0xc7, 0xf5,
240 0xb4, 0x80, 0x10, 0xd9, 0xd7, 0x88, 0x5a, 0x23, 0x01, 0x00, 0x00, 0x00,
241 0xff, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
242 0x50, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00,
243 0x87, 0x02, 0x00, 0x00, 0x2f, 0x03, 0x00, 0x00, 0xdf, 0x09, 0x00, 0x00,
244 0xfb, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31,
246 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
247 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
250 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
254 0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58,
256 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00,
257 0x4f, 0x53, 0x47, 0x31, 0x83, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
258 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
259 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
260 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
262 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
263 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
265 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74,
267 0x69, 0x6f, 0x6e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44,
268 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x53, 0x56, 0x30, 0x1c,
269 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x03,
272 0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18,
274 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00,
276 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49,
277 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52,
278 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43,
279 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x01,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00, 0x03,
282 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
283 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
285 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03,
286 0x04, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
287 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00,
288 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, 0x0f,
289 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
290 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
291 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
292 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x52,
293 0x54, 0x53, 0x30, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04,
294 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0,
295 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
296 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
297 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
298 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
299 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
300 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
301 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68,
302 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
303 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
304 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x03,
305 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
306 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x53,
307 0x54, 0x41, 0x54, 0xa8, 0x06, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0xaa,
308 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10,
309 0x00, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21,
310 0x0c, 0x00, 0x00, 0xa1, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02,
311 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41,
312 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25,
313 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42,
314 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a,
315 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00,
316 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41,
317 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51,
318 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff,
319 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff,
320 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
321 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13,
322 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89,
323 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20,
324 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84,
325 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10,
326 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60,
327 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10,
328 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e,
329 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54,
330 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16,
331 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31,
332 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04,
333 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05,
334 0xc0, 0x1c, 0x6a, 0xf2, 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81,
335 0x88, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37,
336 0x1d, 0x08, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36,
337 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e,
338 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07,
339 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07,
340 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07,
341 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06,
342 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
343 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07,
344 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07,
345 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07,
346 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07,
347 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00,
348 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c,
349 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
350 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
351 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
352 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
353 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00,
354 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x32,
355 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6,
356 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x04,
357 0x85, 0x50, 0x06, 0xe5, 0x50, 0x12, 0x05, 0x18, 0x50, 0x1e, 0x85, 0x51,
358 0xba, 0x01, 0x45, 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08, 0x0a,
359 0x81, 0x62, 0x0d, 0xd0, 0x9d, 0x01, 0x20, 0x3c, 0x03, 0x40, 0x79, 0x2c,
360 0x87, 0x61, 0x9e, 0xe7, 0x01, 0x20, 0x30, 0x00, 0x00, 0x10, 0x01, 0x21,
361 0x10, 0x0c, 0x40, 0x50, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x9f,
362 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35,
363 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b,
364 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b,
365 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79,
366 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2,
367 0x98, 0x20, 0x10, 0xc7, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, 0x41, 0xc1,
368 0x6e, 0x6e, 0x82, 0x40, 0x20, 0x1b, 0x86, 0x03, 0x21, 0x26, 0x08, 0xd8,
369 0xc6, 0xca, 0xaa, 0x4c, 0x8e, 0xae, 0x0c, 0x6f, 0x0a, 0x2d, 0x8c, 0xac,
370 0x4c, 0x6e, 0xe8, 0xcd, 0x6d, 0x8e, 0x2e, 0xcc, 0x8d, 0x6e, 0x6e, 0x82,
371 0x40, 0x24, 0x1b, 0x10, 0x42, 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41,
372 0xb3, 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x5c, 0x1a, 0x8b, 0xb6, 0x37,
373 0xb2, 0x32, 0xb6, 0x09, 0x02, 0xa1, 0x4c, 0x10, 0x88, 0x65, 0xc3, 0x30,
374 0x4d, 0xc3, 0x04, 0x81, 0x60, 0x26, 0x08, 0x44, 0x33, 0x41, 0x20, 0x9c,
375 0x09, 0x42, 0x94, 0x6d, 0x50, 0x90, 0x48, 0xa2, 0x2a, 0xc2, 0xba, 0x2e,
376 0x8c, 0x11, 0x9c, 0xdc, 0x9b, 0x5a, 0xd9, 0x18, 0x5d, 0xda, 0x9b, 0x5b,
377 0x90, 0x1b, 0x99, 0x55, 0x5a, 0xd9, 0xdd, 0x04, 0x81, 0x78, 0x36, 0x28,
378 0x88, 0x26, 0x51, 0xd5, 0x66, 0x5d, 0x17, 0xb6, 0x61, 0x60, 0x32, 0x6e,
379 0xc3, 0x40, 0x40, 0xdd, 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, 0x02,
380 0x0c, 0xc0, 0x60, 0x43, 0x10, 0x06, 0x1b, 0x86, 0xe1, 0x13, 0x83, 0x09,
381 0x42, 0xc6, 0x6d, 0x08, 0xc8, 0x80, 0x4b, 0x5b, 0x58, 0x9a, 0x1b, 0x55,
382 0x19, 0x1e, 0x5d, 0x9d, 0x5c, 0x19, 0x11, 0xa8, 0xa7, 0xa9, 0x24, 0xaa,
383 0xa4, 0x27, 0xa7, 0x09, 0x42, 0x41, 0x4d, 0x10, 0x8a, 0x6a, 0x43, 0x40,
384 0x4c, 0x10, 0x0a, 0x6b, 0x83, 0x50, 0x59, 0x1b, 0x16, 0xe2, 0x0c, 0xd0,
385 0x20, 0x0d, 0xd4, 0x20, 0x0d, 0x86, 0x35, 0x20, 0xd2, 0x80, 0x0d, 0x88,
386 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d, 0x49, 0x11, 0x4d, 0x10, 0x8a, 0x6b,
387 0x83, 0x50, 0x55, 0x1b, 0x96, 0xc1, 0x0d, 0xd0, 0x20, 0x0d, 0xd4, 0x20,
388 0x0d, 0x86, 0x37, 0x18, 0xd2, 0x00, 0x0e, 0x58, 0x0c, 0x3d, 0x31, 0x3d,
389 0x49, 0x4d, 0x10, 0x0a, 0x6c, 0x82, 0x40, 0x40, 0x1b, 0x84, 0x8a, 0x0e,
390 0x36, 0x2c, 0x92, 0x1c, 0xa0, 0x41, 0x1a, 0xa8, 0x41, 0x1a, 0x0c, 0x73,
391 0x20, 0xa5, 0x41, 0x1d, 0x6c, 0x18, 0xda, 0x20, 0x0e, 0xec, 0x80, 0xcb,
392 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x86,
393 0x85, 0xc0, 0x03, 0x34, 0x58, 0x03, 0x35, 0x98, 0x83, 0x61, 0x0e, 0x88,
394 0x34, 0xa8, 0x83, 0x0d, 0xcb, 0xe0, 0x06, 0x68, 0x90, 0x06, 0x6a, 0xf0,
395 0x06, 0xc3, 0x1b, 0x0c, 0x69, 0x00, 0x07, 0x1b, 0x16, 0x49, 0x0e, 0xd0,
396 0x20, 0x0d, 0xd4, 0xe0, 0x0d, 0x86, 0x39, 0x90, 0xd2, 0xa0, 0x0e, 0x36,
397 0x0c, 0x79, 0xa0, 0x07, 0x7b, 0xb0, 0x61, 0xb8, 0x03, 0x3e, 0x00, 0x36,
398 0x14, 0x9f, 0x19, 0xf4, 0xc1, 0x03, 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3,
399 0x9b, 0x9b, 0x20, 0x10, 0x11, 0x8b, 0x34, 0xb7, 0x39, 0xba, 0xb9, 0x09,
400 0x02, 0x21, 0xd1, 0x98, 0x4b, 0x3b, 0xfb, 0x62, 0x23, 0xa3, 0x31, 0x97,
401 0x76, 0xf6, 0x35, 0x47, 0x37, 0x41, 0x20, 0xa6, 0x0d, 0xc8, 0x1f, 0x80,
402 0x42, 0x28, 0x88, 0xc2, 0x28, 0x5c, 0xa4, 0x50, 0x0a, 0x55, 0xd8, 0xd8,
403 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15,
404 0x32, 0x3c, 0x17, 0xbb, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01,
405 0xd1, 0x84, 0x0c, 0xcf, 0xc5, 0x2e, 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a,
406 0x50, 0xd4, 0x21, 0xc3, 0x73, 0x99, 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b,
407 0x7a, 0x23, 0x2b, 0x63, 0x9b, 0x12, 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4,
408 0xca, 0xe6, 0xde, 0xea, 0xe4, 0xc6, 0xca, 0xe6, 0xa6, 0x04, 0x4e, 0x25,
409 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8, 0xb2, 0x20, 0x37, 0xb7, 0x37, 0xba,
410 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x29, 0x42, 0x27, 0x06, 0x75, 0xc8,
411 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8,
412 0xca, 0xa6, 0x04, 0x64, 0x50, 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e,
413 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, 0x6e, 0x6e, 0x4a, 0xd0, 0x07, 0x5d,
414 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, 0xdc, 0xe8, 0xca, 0xe4, 0xe6, 0xa6,
415 0x04, 0xa5, 0x00, 0x79, 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33,
416 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43,
417 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98,
418 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33,
419 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05,
420 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43,
421 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08,
422 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78,
423 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1,
424 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33,
425 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e,
426 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03,
427 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60,
428 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80,
429 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8,
430 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18,
431 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee,
432 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c,
433 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c,
434 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43,
435 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3,
436 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83,
437 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21,
438 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08,
439 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00,
440 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x36,
441 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5,
442 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2,
443 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3,
444 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62,
445 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f,
446 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6,
447 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11,
448 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x0b, 0x03, 0x20, 0x4d, 0x4b, 0x5c, 0x13,
449 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14,
450 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x5d, 0xaf, 0x18, 0x92,
451 0x26, 0x75, 0x50, 0xd4, 0x82, 0xef, 0x06, 0xf6, 0x87, 0xd6, 0x14, 0x44,
452 0x58, 0x49, 0x4c, 0xfc, 0x08, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x3f,
453 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10,
454 0x00, 0x00, 0x00, 0xe4, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21,
455 0x0c, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02,
456 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41,
457 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25,
458 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42,
459 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a,
460 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00,
461 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41,
462 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51,
463 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff,
464 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff,
465 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
466 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13,
467 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89,
468 0x20, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20,
469 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84,
470 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10,
471 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60,
472 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, 0x10,
473 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e,
474 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54,
475 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16,
476 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c, 0x31,
477 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04,
478 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05,
479 0xc0, 0x1c, 0x6a, 0xf2, 0x5f, 0x22, 0x9a, 0x88, 0x8b, 0x3d, 0x80, 0x81,
480 0x88, 0x38, 0xa7, 0x91, 0x26, 0xa0, 0x99, 0x24, 0x24, 0x58, 0x4b, 0x37,
481 0x1d, 0x08, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36,
482 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e,
483 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07,
484 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07,
485 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07,
486 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06,
487 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
488 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07,
489 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07,
490 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07,
491 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07,
492 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00,
493 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c,
494 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
495 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
496 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
497 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
498 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00,
499 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32,
500 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6,
501 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x06,
502 0xe5, 0x50, 0x04, 0xe5, 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08,
503 0x0a, 0x81, 0xf0, 0x0c, 0x00, 0xe5, 0xb1, 0x1c, 0x86, 0x79, 0x9e, 0x07,
504 0x80, 0xc0, 0x00, 0x00, 0x40, 0x04, 0x84, 0x40, 0x30, 0x00, 0x41, 0x01,
505 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x1a,
506 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73,
507 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71,
508 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a,
509 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b,
510 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xc2, 0x98, 0x20, 0x10, 0xc7,
511 0x06, 0x61, 0x20, 0x26, 0x08, 0x04, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x76,
512 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0xd8, 0x44, 0x60, 0x82, 0x40,
513 0x24, 0x1b, 0x10, 0x42, 0x59, 0x08, 0x62, 0x60, 0x80, 0x0d, 0x41, 0xb3,
514 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x64, 0xd4, 0x86, 0x00, 0x9a, 0x20,
515 0x08, 0x00, 0x97, 0xb6, 0xb0, 0x34, 0x37, 0xaa, 0x32, 0x3c, 0xba, 0x3a,
516 0xb9, 0x32, 0x22, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x13,
517 0x84, 0xc2, 0x99, 0x20, 0x14, 0xcf, 0x86, 0x80, 0x98, 0x20, 0x14, 0xd0,
518 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4, 0xb2, 0x41, 0xc8, 0xb4, 0x0d, 0x0b,
519 0x41, 0x55, 0xd6, 0x65, 0x0d, 0x18, 0x61, 0x6d, 0x44, 0xa8, 0x8a, 0xb0,
520 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x45, 0xb4, 0x41, 0xc8, 0xb2,
521 0x0d, 0xcb, 0xd0, 0x55, 0xd6, 0x65, 0x0d, 0xde, 0x60, 0x7d, 0x13, 0x04,
522 0x82, 0x61, 0x31, 0xf4, 0xc4, 0xf4, 0x24, 0x35, 0x41, 0x28, 0xa4, 0x09,
523 0x02, 0xd1, 0x6c, 0x10, 0x32, 0x32, 0xd8, 0xb0, 0x84, 0x81, 0x18, 0x54,
524 0xd6, 0x65, 0x0d, 0x63, 0x10, 0x06, 0x56, 0x19, 0x6c, 0x18, 0x38, 0x30,
525 0x30, 0x03, 0x2e, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
526 0x6f, 0x6e, 0x1b, 0x16, 0x02, 0x0d, 0x2a, 0xec, 0x1a, 0x83, 0x61, 0x0c,
527 0x08, 0xab, 0x0c, 0x36, 0x2c, 0x43, 0x57, 0x59, 0x97, 0x37, 0x78, 0x83,
528 0xf5, 0x6d, 0x58, 0xc2, 0x40, 0x0c, 0x2a, 0xeb, 0xf2, 0x86, 0x31, 0x08,
529 0x03, 0xab, 0x0c, 0x36, 0x0c, 0x69, 0xa0, 0x06, 0x6b, 0xb0, 0x61, 0x38,
530 0x03, 0x36, 0x00, 0x36, 0x14, 0xd2, 0xd4, 0x06, 0x0f, 0x50, 0x85, 0x8d,
531 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54,
532 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12,
533 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6,
534 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, 0xb9,
535 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, 0x45,
536 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0xe0, 0xd4,
537 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b,
538 0xa3, 0x2b, 0x9b, 0x12, 0x40, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8,
539 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x6d, 0x00,
540 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x33,
541 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43,
542 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98,
543 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33,
544 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05,
545 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43,
546 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08,
547 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78,
548 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1,
549 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33,
550 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e,
551 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03,
552 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60,
553 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80,
554 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8,
555 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18,
556 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee,
557 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c,
558 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c,
559 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43,
560 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3,
561 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83,
562 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21,
563 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08,
564 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x00,
565 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x36,
566 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5,
567 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2,
568 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3,
569 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62,
570 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f,
571 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6,
572 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11,
573 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x0b, 0x03, 0x20, 0x4d, 0x4b, 0x5c, 0x13,
574 0x15, 0x11, 0x00, 0x61, 0x20, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x13,
575 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x44,
576 0x8a, 0xab, 0x14, 0x0a, 0x61, 0x06, 0xa0, 0xec, 0x4a, 0x8e, 0x4a, 0x09,
577 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82,
578 0x60, 0x20, 0x61, 0x03, 0x63, 0x59, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20,
579 0x18, 0x18, 0xdd, 0x21, 0x5d, 0x8f, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08,
580 0x06, 0x86, 0x87, 0x4c, 0x18, 0x71, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82,
581 0x81, 0xf1, 0x25, 0x54, 0xf6, 0x20, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60,
582 0x60, 0x80, 0x81, 0x52, 0x69, 0x51, 0x32, 0x62, 0x90, 0x00, 0x20, 0x08,
583 0x06, 0x46, 0x18, 0x2c, 0xdc, 0x36, 0x29, 0x23, 0x06, 0x09, 0x00, 0x82,
584 0x60, 0x60, 0x88, 0x01, 0xd3, 0x71, 0xc8, 0x32, 0x62, 0x90, 0x00, 0x20,
585 0x08, 0x06, 0xc6, 0x18, 0x34, 0x5d, 0x57, 0x31, 0x23, 0x06, 0x09, 0x00,
586 0x82, 0x60, 0x60, 0x90, 0x81, 0xe3, 0x79, 0x4a, 0x33, 0x62, 0x90, 0x00,
587 0x20, 0x08, 0x06, 0x46, 0x19, 0x3c, 0xdf, 0x57, 0x39, 0x23, 0x06, 0x07,
588 0x00, 0x82, 0x60, 0xd0, 0x90, 0x81, 0xa3, 0x80, 0xc1, 0x68, 0x42, 0x00,
589 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x88,
590 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x69, 0x30, 0x3d, 0x66, 0x30, 0x9a,
591 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4,
592 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d, 0x1b, 0x60, 0x54, 0x19,
593 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68,
594 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x33, 0x07, 0x5d,
595 0xc6, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83,
596 0x30, 0x9a, 0x40, 0x0c, 0x36, 0x5d, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10,
597 0x04, 0x83, 0x07, 0x0f, 0xce, 0xe0, 0x7a, 0x82, 0x11, 0x03, 0x04, 0x00,
598 0x41, 0x30, 0x78, 0xf2, 0x00, 0x0d, 0xae, 0x25, 0xb0, 0xe0, 0x80, 0x8e,
599 0x59, 0x9b, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0xe0, 0xe1, 0x83,
600 0x35, 0xd8, 0xa4, 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x9e, 0x3e,
601 0x60, 0x83, 0xcd, 0x09, 0x2c, 0x50, 0xa0, 0x63, 0xd9, 0x27, 0x9f, 0x11,
602 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0x40, 0xe1, 0x0d, 0xbe, 0x2a, 0x18,
603 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x27, 0x14, 0xe0, 0xe0, 0x8b, 0x02,
604 0x0b, 0x1a, 0xe8, 0x18, 0x37, 0x06, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10,
605 0x04, 0x83, 0x87, 0x14, 0xe6, 0x60, 0x0c, 0xb0, 0x60, 0xc4, 0x00, 0x01,
606 0x40, 0x10, 0x0c, 0x9e, 0x52, 0xa0, 0x83, 0x31, 0xa0, 0x02, 0x0b, 0x20,
607 0xe8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x83, 0x0a, 0x72, 0xe0,
608 0x06, 0x74, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30,
609 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x4d,
610 0x2b, 0xdc, 0xc1, 0x1c, 0xe8, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08,
611 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x88, 0xc1, 0x01, 0x80,
612 0x20, 0x18, 0x34, 0xb2, 0xc0, 0x07, 0x78, 0xd0, 0x0a, 0xa3, 0x09, 0x01,
613 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x23,
614 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0xdc, 0x42, 0x28, 0xf4, 0xc1, 0x2b,
615 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68,
616 0x02, 0x31, 0xd8, 0x14, 0x06, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04,
617 0x83, 0x87, 0x17, 0x56, 0xc1, 0x7b, 0x82, 0x11, 0x03, 0x04, 0x00, 0x41,
618 0x30, 0x78, 0x7a, 0x81, 0x15, 0xb6, 0x25, 0x18, 0x31, 0x40, 0x00, 0x10,
619 0x04, 0x83, 0xc7, 0x17, 0x5a, 0x01, 0x3b, 0x02, 0xb3, 0xca, 0x40, 0x3e,
620 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0xf0, 0x80, 0xc3, 0x2b, 0x88, 0x81,
621 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0xc1, 0x13, 0x0e, 0xb0, 0xf0,
622 0x39, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x3c, 0xe2, 0x10, 0x0b,
623 0x9c, 0x12, 0x58, 0x96, 0x06, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04,
624 0x83, 0x87, 0x1c, 0x66, 0xc1, 0x0c, 0xaa, 0x60, 0xc4, 0x00, 0x01, 0x40,
625 0x10, 0x0c, 0x9e, 0x72, 0xa0, 0x85, 0x31, 0x88, 0x82, 0x11, 0x03, 0x04,
626 0x00, 0x41, 0x30, 0x78, 0xcc, 0xa1, 0x16, 0xc0, 0xa0, 0x09, 0x8c, 0x6b,
627 0x03, 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0xc1, 0x83, 0x0e, 0xb7,
628 0xa0, 0x06, 0x58, 0x30, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x4f, 0x3a,
629 0xe0, 0xc2, 0x19, 0x50, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x3c,
630 0xea, 0x90, 0x0b, 0x64, 0x00, 0x05, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60,
631 0x80, 0xb4, 0x43, 0x2e, 0xa0, 0x03, 0x3a, 0x80, 0x43, 0x33, 0x62, 0x90,
632 0x00, 0x20, 0x08, 0x06, 0x48, 0x3b, 0xe4, 0x02, 0x3a, 0xa0, 0x03, 0x2d,
633 0x24, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa0,
634 0x03, 0x3a, 0xf8, 0x42, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48,
635 0x3b, 0xe4, 0x02, 0x3a, 0xa0, 0xc3, 0x2f, 0x04, 0x23, 0x06, 0x09, 0x00,
636 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0xa4, 0x03, 0x3a, 0x80, 0x43, 0x2b,
637 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2, 0x0e, 0xb9, 0x90, 0x0e,
638 0xe8, 0x40, 0x0b, 0xac, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48,
639 0x3b, 0xe4, 0xc2, 0x38, 0xa0, 0x03, 0x38, 0xc4, 0xc2, 0x88, 0x41, 0x02,
640 0x80, 0x20, 0x18, 0x20, 0xed, 0x90, 0x0b, 0xe3, 0x80, 0x0e, 0xb4, 0x00,
641 0x0b, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xb4, 0x43, 0x2e, 0x8c,
642 0x03, 0x3a, 0xf8, 0xc2, 0x2b, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01,
643 0xd2, 0x0e, 0xb9, 0x30, 0x0e, 0xe8, 0xf0, 0x0b, 0xae, 0x80, 0x00, 0x00,
644 0x00, 0x00, 0x00
645};
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12.c b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12.c
new file mode 100644
index 0000000..06535f0
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12.c
@@ -0,0 +1,3309 @@
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21#include "SDL_internal.h"
22
23#ifdef SDL_VIDEO_RENDER_D3D12
24
25#define SDL_D3D12_NUM_BUFFERS 2
26#define SDL_D3D12_NUM_VERTEX_BUFFERS 256
27#define SDL_D3D12_MAX_NUM_TEXTURES 16384
28#define SDL_D3D12_NUM_UPLOAD_BUFFERS 32
29
30#include "../../core/windows/SDL_windows.h"
31#include "../../video/windows/SDL_windowswindow.h"
32#include "../SDL_sysrender.h"
33#include "../SDL_d3dmath.h"
34#include "../../video/directx/SDL_d3d12.h"
35
36#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
37#include "SDL_render_d3d12_xbox.h"
38#endif
39
40#include "SDL_shaders_d3d12.h"
41
42#if defined(_MSC_VER) && !defined(__clang__)
43#define SDL_COMPOSE_ERROR(str) __FUNCTION__ ", " str
44#else
45#define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str
46#endif
47
48// Set up for C function definitions, even when using C++
49#ifdef __cplusplus
50extern "C" {
51#endif
52
53// This must be included here as the function definitions in SDL_pixels.c/_c.h are C, not C++
54#include "../../video/SDL_pixels_c.h"
55
56/* !!! FIXME: vertex buffer bandwidth could be lower; only use UV coords when
57 !!! FIXME: textures are needed. */
58
59// Sampler types
60typedef enum
61{
62 D3D12_SAMPLER_NEAREST_CLAMP,
63 D3D12_SAMPLER_NEAREST_WRAP,
64 D3D12_SAMPLER_LINEAR_CLAMP,
65 D3D12_SAMPLER_LINEAR_WRAP,
66 D3D12_SAMPLER_COUNT
67} D3D12_Sampler;
68
69// Vertex shader, common values
70typedef struct
71{
72 Float4X4 model;
73 Float4X4 projectionAndView;
74} D3D12_VertexShaderConstants;
75
76// These should mirror the definitions in D3D12_PixelShader_Common.hlsli
77//static const float TONEMAP_NONE = 0;
78//static const float TONEMAP_LINEAR = 1;
79static const float TONEMAP_CHROME = 2;
80
81//static const float TEXTURETYPE_NONE = 0;
82static const float TEXTURETYPE_RGB = 1;
83static const float TEXTURETYPE_NV12 = 2;
84static const float TEXTURETYPE_NV21 = 3;
85static const float TEXTURETYPE_YUV = 4;
86
87static const float INPUTTYPE_UNSPECIFIED = 0;
88static const float INPUTTYPE_SRGB = 1;
89static const float INPUTTYPE_SCRGB = 2;
90static const float INPUTTYPE_HDR10 = 3;
91
92typedef struct
93{
94 float scRGB_output;
95 float texture_type;
96 float input_type;
97 float color_scale;
98
99 float tonemap_method;
100 float tonemap_factor1;
101 float tonemap_factor2;
102 float sdr_white_point;
103
104 float YCbCr_matrix[16];
105} D3D12_PixelShaderConstants;
106
107// Per-vertex data
108typedef struct
109{
110 Float2 pos;
111 Float2 tex;
112 SDL_FColor color;
113} D3D12_VertexPositionColor;
114
115// Per-texture data
116typedef struct
117{
118 int w, h;
119 ID3D12Resource *mainTexture;
120 D3D12_CPU_DESCRIPTOR_HANDLE mainTextureResourceView;
121 D3D12_RESOURCE_STATES mainResourceState;
122 SIZE_T mainSRVIndex;
123 D3D12_CPU_DESCRIPTOR_HANDLE mainTextureRenderTargetView;
124 DXGI_FORMAT mainTextureFormat;
125 ID3D12Resource *stagingBuffer;
126 D3D12_RESOURCE_STATES stagingResourceState;
127 D3D12_FILTER scaleMode;
128 D3D12_Shader shader;
129 const float *YCbCr_matrix;
130#ifdef SDL_HAVE_YUV
131 // YV12 texture support
132 bool yuv;
133 ID3D12Resource *mainTextureU;
134 D3D12_CPU_DESCRIPTOR_HANDLE mainTextureResourceViewU;
135 D3D12_RESOURCE_STATES mainResourceStateU;
136 SIZE_T mainSRVIndexU;
137 ID3D12Resource *mainTextureV;
138 D3D12_CPU_DESCRIPTOR_HANDLE mainTextureResourceViewV;
139 D3D12_RESOURCE_STATES mainResourceStateV;
140 SIZE_T mainSRVIndexV;
141
142 // NV12 texture support
143 bool nv12;
144 D3D12_CPU_DESCRIPTOR_HANDLE mainTextureResourceViewNV;
145 SIZE_T mainSRVIndexNV;
146
147 Uint8 *pixels;
148 int pitch;
149#endif
150 SDL_Rect lockedRect;
151} D3D12_TextureData;
152
153// Pipeline State Object data
154typedef struct
155{
156 D3D12_Shader shader;
157 D3D12_PixelShaderConstants shader_constants;
158 SDL_BlendMode blendMode;
159 D3D12_PRIMITIVE_TOPOLOGY_TYPE topology;
160 DXGI_FORMAT rtvFormat;
161 ID3D12PipelineState *pipelineState;
162} D3D12_PipelineState;
163
164// Vertex Buffer
165typedef struct
166{
167 ID3D12Resource *resource;
168 D3D12_VERTEX_BUFFER_VIEW view;
169 size_t size;
170} D3D12_VertexBuffer;
171
172// For SRV pool allocator
173typedef struct
174{
175 SIZE_T index;
176 void *next;
177} D3D12_SRVPoolNode;
178
179// Private renderer data
180typedef struct
181{
182 SDL_SharedObject *hDXGIMod;
183 SDL_SharedObject *hD3D12Mod;
184#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
185 UINT64 frameToken;
186#else
187 IDXGIFactory6 *dxgiFactory;
188 IDXGIAdapter4 *dxgiAdapter;
189 IDXGIDebug *dxgiDebug;
190 IDXGISwapChain4 *swapChain;
191#endif
192 ID3D12Device1 *d3dDevice;
193 ID3D12Debug *debugInterface;
194 ID3D12CommandQueue *commandQueue;
195 ID3D12GraphicsCommandList2 *commandList;
196 DXGI_SWAP_EFFECT swapEffect;
197 UINT swapFlags;
198 UINT syncInterval;
199 UINT presentFlags;
200 DXGI_FORMAT renderTargetFormat;
201 bool pixelSizeChanged;
202
203 // Descriptor heaps
204 ID3D12DescriptorHeap *rtvDescriptorHeap;
205 UINT rtvDescriptorSize;
206 ID3D12DescriptorHeap *textureRTVDescriptorHeap;
207 ID3D12DescriptorHeap *srvDescriptorHeap;
208 UINT srvDescriptorSize;
209 ID3D12DescriptorHeap *samplerDescriptorHeap;
210 UINT samplerDescriptorSize;
211
212 // Data needed per backbuffer
213 ID3D12CommandAllocator *commandAllocators[SDL_D3D12_NUM_BUFFERS];
214 ID3D12Resource *renderTargets[SDL_D3D12_NUM_BUFFERS];
215 UINT64 fenceValue;
216 int currentBackBufferIndex;
217
218 // Fences
219 ID3D12Fence *fence;
220 HANDLE fenceEvent;
221
222 // Root signature and pipeline state data
223 ID3D12RootSignature *rootSignatures[NUM_ROOTSIGS];
224 int pipelineStateCount;
225 D3D12_PipelineState *pipelineStates;
226 D3D12_PipelineState *currentPipelineState;
227
228 D3D12_VertexBuffer vertexBuffers[SDL_D3D12_NUM_VERTEX_BUFFERS];
229 D3D12_CPU_DESCRIPTOR_HANDLE samplers[D3D12_SAMPLER_COUNT];
230
231 // Data for staging/allocating textures
232 ID3D12Resource *uploadBuffers[SDL_D3D12_NUM_UPLOAD_BUFFERS];
233 int currentUploadBuffer;
234
235 // Pool allocator to handle reusing SRV heap indices
236 D3D12_SRVPoolNode *srvPoolHead;
237 D3D12_SRVPoolNode srvPoolNodes[SDL_D3D12_MAX_NUM_TEXTURES];
238
239 // Vertex buffer constants
240 D3D12_VertexShaderConstants vertexShaderConstantsData;
241
242 // Cached renderer properties
243 DXGI_MODE_ROTATION rotation;
244 D3D12_TextureData *textureRenderTarget;
245 D3D12_CPU_DESCRIPTOR_HANDLE currentRenderTargetView;
246 D3D12_CPU_DESCRIPTOR_HANDLE currentShaderResource;
247 D3D12_CPU_DESCRIPTOR_HANDLE currentSampler;
248 bool cliprectDirty;
249 bool currentCliprectEnabled;
250 SDL_Rect currentCliprect;
251 SDL_Rect currentViewport;
252 int currentViewportRotation;
253 bool viewportDirty;
254 Float4X4 identity;
255 int currentVertexBuffer;
256 bool issueBatch;
257} D3D12_RenderData;
258
259// Define D3D GUIDs here so we don't have to include uuid.lib.
260
261#ifdef HAVE_GCC_DIAGNOSTIC_PRAGMA
262#pragma GCC diagnostic push
263#pragma GCC diagnostic ignored "-Wunused-const-variable"
264#endif
265
266static const GUID SDL_IID_IDXGIFactory6 = { 0xc1b6694f, 0xff09, 0x44a9, { 0xb0, 0x3c, 0x77, 0x90, 0x0a, 0x0a, 0x1d, 0x17 } };
267static const GUID SDL_IID_IDXGIAdapter4 = { 0x3c8d99d1, 0x4fbf, 0x4181, { 0xa8, 0x2c, 0xaf, 0x66, 0xbf, 0x7b, 0xd2, 0x4e } };
268static const GUID SDL_IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } };
269static const GUID SDL_IID_ID3D12Device1 = { 0x77acce80, 0x638e, 0x4e65, { 0x88, 0x95, 0xc1, 0xf2, 0x33, 0x86, 0x86, 0x3e } };
270static const GUID SDL_IID_IDXGISwapChain4 = { 0x3D585D5A, 0xBD4A, 0x489E, { 0xB1, 0xF4, 0x3D, 0xBC, 0xB6, 0x45, 0x2F, 0xFB } };
271static const GUID SDL_IID_IDXGIDebug1 = { 0xc5a05f0c, 0x16f2, 0x4adf, { 0x9f, 0x4d, 0xa8, 0xc4, 0xd5, 0x8a, 0xc5, 0x50 } };
272static const GUID SDL_IID_IDXGIInfoQueue = { 0xD67441C7, 0x672A, 0x476f, { 0x9E, 0x82, 0xCD, 0x55, 0xB4, 0x49, 0x49, 0xCE } };
273static const GUID SDL_IID_ID3D12Debug = { 0x344488b7, 0x6846, 0x474b, { 0xb9, 0x89, 0xf0, 0x27, 0x44, 0x82, 0x45, 0xe0 } };
274static const GUID SDL_DXGI_DEBUG_ALL = { 0xe48ae283, 0xda80, 0x490b, { 0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x8 } };
275static const GUID SDL_IID_ID3D12CommandQueue = { 0x0ec870a6, 0x5d7e, 0x4c22, { 0x8c, 0xfc, 0x5b, 0xaa, 0xe0, 0x76, 0x16, 0xed } };
276static const GUID SDL_IID_ID3D12DescriptorHeap = { 0x8efb471d, 0x616c, 0x4f49, { 0x90, 0xf7, 0x12, 0x7b, 0xb7, 0x63, 0xfa, 0x51 } };
277static const GUID SDL_IID_ID3D12CommandAllocator = { 0x6102dee4, 0xaf59, 0x4b09, { 0xb9, 0x99, 0xb4, 0x4d, 0x73, 0xf0, 0x9b, 0x24 } };
278static const GUID SDL_IID_ID3D12GraphicsCommandList2 = { 0x38C3E585, 0xFF17, 0x412C, { 0x91, 0x50, 0x4F, 0xC6, 0xF9, 0xD7, 0x2A, 0x28 } };
279static const GUID SDL_IID_ID3D12Fence = { 0x0a753dcf, 0xc4d8, 0x4b91, { 0xad, 0xf6, 0xbe, 0x5a, 0x60, 0xd9, 0x5a, 0x76 } };
280static const GUID SDL_IID_ID3D12Resource = { 0x696442be, 0xa72e, 0x4059, { 0xbc, 0x79, 0x5b, 0x5c, 0x98, 0x04, 0x0f, 0xad } };
281static const GUID SDL_IID_ID3D12RootSignature = { 0xc54a6b66, 0x72df, 0x4ee8, { 0x8b, 0xe5, 0xa9, 0x46, 0xa1, 0x42, 0x92, 0x14 } };
282static const GUID SDL_IID_ID3D12PipelineState = { 0x765a30f3, 0xf624, 0x4c6f, { 0xa8, 0x28, 0xac, 0xe9, 0x48, 0x62, 0x24, 0x45 } };
283static const GUID SDL_IID_ID3D12Heap = { 0x6b3b2502, 0x6e51, 0x45b3, { 0x90, 0xee, 0x98, 0x84, 0x26, 0x5e, 0x8d, 0xf3 } };
284static const GUID SDL_IID_ID3D12InfoQueue = { 0x0742a90b, 0xc387, 0x483f, { 0xb9, 0x46, 0x30, 0xa7, 0xe4, 0xe6, 0x14, 0x58 } };
285
286#ifdef HAVE_GCC_DIAGNOSTIC_PRAGMA
287#pragma GCC diagnostic pop
288#endif
289
290static UINT D3D12_Align(UINT location, UINT alignment)
291{
292 return (location + (alignment - 1)) & ~(alignment - 1);
293}
294
295static SDL_PixelFormat D3D12_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat)
296{
297 switch (dxgiFormat) {
298 case DXGI_FORMAT_B8G8R8A8_UNORM:
299 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
300 return SDL_PIXELFORMAT_ARGB8888;
301 case DXGI_FORMAT_R8G8B8A8_UNORM:
302 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
303 return SDL_PIXELFORMAT_ABGR8888;
304 case DXGI_FORMAT_B8G8R8X8_UNORM:
305 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
306 return SDL_PIXELFORMAT_XRGB8888;
307 case DXGI_FORMAT_R10G10B10A2_UNORM:
308 return SDL_PIXELFORMAT_ABGR2101010;
309 case DXGI_FORMAT_R16G16B16A16_FLOAT:
310 return SDL_PIXELFORMAT_RGBA64_FLOAT;
311 default:
312 return SDL_PIXELFORMAT_UNKNOWN;
313 }
314}
315
316static DXGI_FORMAT SDLPixelFormatToDXGITextureFormat(Uint32 format, Uint32 output_colorspace)
317{
318 switch (format) {
319 case SDL_PIXELFORMAT_RGBA64_FLOAT:
320 return DXGI_FORMAT_R16G16B16A16_FLOAT;
321 case SDL_PIXELFORMAT_ABGR2101010:
322 return DXGI_FORMAT_R10G10B10A2_UNORM;
323 case SDL_PIXELFORMAT_ARGB8888:
324 if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
325 return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
326 }
327 return DXGI_FORMAT_B8G8R8A8_UNORM;
328 case SDL_PIXELFORMAT_ABGR8888:
329 if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
330 return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
331 }
332 return DXGI_FORMAT_R8G8B8A8_UNORM;
333 case SDL_PIXELFORMAT_XRGB8888:
334 if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
335 return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
336 }
337 return DXGI_FORMAT_B8G8R8X8_UNORM;
338 case SDL_PIXELFORMAT_YV12:
339 case SDL_PIXELFORMAT_IYUV:
340 return DXGI_FORMAT_R8_UNORM;
341 case SDL_PIXELFORMAT_NV12:
342 case SDL_PIXELFORMAT_NV21:
343 return DXGI_FORMAT_NV12;
344 case SDL_PIXELFORMAT_P010:
345 return DXGI_FORMAT_P010;
346 default:
347 return DXGI_FORMAT_UNKNOWN;
348 }
349}
350
351static DXGI_FORMAT SDLPixelFormatToDXGIMainResourceViewFormat(Uint32 format, Uint32 colorspace)
352{
353 switch (format) {
354 case SDL_PIXELFORMAT_RGBA64_FLOAT:
355 return DXGI_FORMAT_R16G16B16A16_FLOAT;
356 case SDL_PIXELFORMAT_ABGR2101010:
357 return DXGI_FORMAT_R10G10B10A2_UNORM;
358 case SDL_PIXELFORMAT_ARGB8888:
359 if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
360 return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
361 }
362 return DXGI_FORMAT_B8G8R8A8_UNORM;
363 case SDL_PIXELFORMAT_ABGR8888:
364 if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
365 return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
366 }
367 return DXGI_FORMAT_R8G8B8A8_UNORM;
368 case SDL_PIXELFORMAT_XRGB8888:
369 if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
370 return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
371 }
372 return DXGI_FORMAT_B8G8R8X8_UNORM;
373 case SDL_PIXELFORMAT_YV12:
374 case SDL_PIXELFORMAT_IYUV:
375 case SDL_PIXELFORMAT_NV12: // For the Y texture
376 case SDL_PIXELFORMAT_NV21: // For the Y texture
377 return DXGI_FORMAT_R8_UNORM;
378 case SDL_PIXELFORMAT_P010: // For the Y texture
379 return DXGI_FORMAT_R16_UNORM;
380 default:
381 return DXGI_FORMAT_UNKNOWN;
382 }
383}
384
385static void D3D12_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture);
386
387static void D3D12_ReleaseAll(SDL_Renderer *renderer)
388{
389 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
390
391 SDL_PropertiesID props = SDL_GetRendererProperties(renderer);
392 SDL_SetPointerProperty(props, SDL_PROP_RENDERER_D3D12_DEVICE_POINTER, NULL);
393 SDL_SetPointerProperty(props, SDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER, NULL);
394
395 // Release all textures
396 for (SDL_Texture *texture = renderer->textures; texture; texture = texture->next) {
397 D3D12_DestroyTexture(renderer, texture);
398 }
399
400 // Release/reset everything else
401 if (data) {
402 int i;
403
404#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
405 D3D_SAFE_RELEASE(data->dxgiFactory);
406 D3D_SAFE_RELEASE(data->dxgiAdapter);
407 D3D_SAFE_RELEASE(data->swapChain);
408#endif
409 D3D_SAFE_RELEASE(data->d3dDevice);
410 D3D_SAFE_RELEASE(data->debugInterface);
411 D3D_SAFE_RELEASE(data->commandQueue);
412 D3D_SAFE_RELEASE(data->commandList);
413 D3D_SAFE_RELEASE(data->rtvDescriptorHeap);
414 D3D_SAFE_RELEASE(data->textureRTVDescriptorHeap);
415 D3D_SAFE_RELEASE(data->srvDescriptorHeap);
416 D3D_SAFE_RELEASE(data->samplerDescriptorHeap);
417 D3D_SAFE_RELEASE(data->fence);
418
419 for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) {
420 D3D_SAFE_RELEASE(data->commandAllocators[i]);
421 D3D_SAFE_RELEASE(data->renderTargets[i]);
422 }
423
424 if (data->pipelineStateCount > 0) {
425 for (i = 0; i < data->pipelineStateCount; ++i) {
426 D3D_SAFE_RELEASE(data->pipelineStates[i].pipelineState);
427 }
428 SDL_free(data->pipelineStates);
429 data->pipelineStates = NULL;
430 data->pipelineStateCount = 0;
431 }
432
433 for (i = 0; i < NUM_ROOTSIGS; ++i) {
434 D3D_SAFE_RELEASE(data->rootSignatures[i]);
435 }
436
437 for (i = 0; i < SDL_D3D12_NUM_VERTEX_BUFFERS; ++i) {
438 D3D_SAFE_RELEASE(data->vertexBuffers[i].resource);
439 data->vertexBuffers[i].size = 0;
440 }
441
442 data->swapEffect = (DXGI_SWAP_EFFECT)0;
443 data->swapFlags = 0;
444 data->currentRenderTargetView.ptr = 0;
445 data->currentSampler.ptr = 0;
446
447#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
448 // Check for any leaks if in debug mode
449 if (data->dxgiDebug) {
450 DXGI_DEBUG_RLO_FLAGS rloFlags = (DXGI_DEBUG_RLO_FLAGS)(DXGI_DEBUG_RLO_DETAIL | DXGI_DEBUG_RLO_IGNORE_INTERNAL);
451 IDXGIDebug_ReportLiveObjects(data->dxgiDebug, SDL_DXGI_DEBUG_ALL, rloFlags);
452 D3D_SAFE_RELEASE(data->dxgiDebug);
453 }
454#endif
455
456 /* Unload the D3D libraries. This should be done last, in order
457 * to prevent IUnknown::Release() calls from crashing.
458 */
459 if (data->hD3D12Mod) {
460 SDL_UnloadObject(data->hD3D12Mod);
461 data->hD3D12Mod = NULL;
462 }
463 if (data->hDXGIMod) {
464 SDL_UnloadObject(data->hDXGIMod);
465 data->hDXGIMod = NULL;
466 }
467 }
468}
469
470static D3D12_GPU_DESCRIPTOR_HANDLE D3D12_CPUtoGPUHandle(ID3D12DescriptorHeap *heap, D3D12_CPU_DESCRIPTOR_HANDLE CPUHandle)
471{
472 D3D12_CPU_DESCRIPTOR_HANDLE CPUHeapStart;
473 D3D12_GPU_DESCRIPTOR_HANDLE GPUHandle;
474 SIZE_T offset;
475
476 // Calculate the correct offset into the heap
477 D3D_CALL_RET(heap, GetCPUDescriptorHandleForHeapStart, &CPUHeapStart);
478 offset = CPUHandle.ptr - CPUHeapStart.ptr;
479
480 D3D_CALL_RET(heap, GetGPUDescriptorHandleForHeapStart, &GPUHandle);
481 GPUHandle.ptr += offset;
482
483 return GPUHandle;
484}
485
486static void D3D12_WaitForGPU(D3D12_RenderData *data)
487{
488 if (data->commandQueue && data->fence && data->fenceEvent) {
489 ID3D12CommandQueue_Signal(data->commandQueue, data->fence, data->fenceValue);
490 if (ID3D12Fence_GetCompletedValue(data->fence) < data->fenceValue) {
491 ID3D12Fence_SetEventOnCompletion(data->fence,
492 data->fenceValue,
493 data->fenceEvent);
494 WaitForSingleObjectEx(data->fenceEvent, INFINITE, FALSE);
495 }
496
497 data->fenceValue++;
498 }
499}
500
501static D3D12_CPU_DESCRIPTOR_HANDLE D3D12_GetCurrentRenderTargetView(SDL_Renderer *renderer)
502{
503 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
504 D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor;
505
506 if (data->textureRenderTarget) {
507 return data->textureRenderTarget->mainTextureRenderTargetView;
508 }
509
510 SDL_zero(rtvDescriptor);
511 D3D_CALL_RET(data->rtvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &rtvDescriptor);
512 rtvDescriptor.ptr += data->currentBackBufferIndex * data->rtvDescriptorSize;
513 return rtvDescriptor;
514}
515
516static void D3D12_TransitionResource(D3D12_RenderData *data,
517 ID3D12Resource *resource,
518 D3D12_RESOURCE_STATES beforeState,
519 D3D12_RESOURCE_STATES afterState)
520{
521 D3D12_RESOURCE_BARRIER barrier;
522
523 if (beforeState != afterState) {
524 SDL_zero(barrier);
525 barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
526 barrier.Transition.pResource = resource;
527 barrier.Transition.StateBefore = beforeState;
528 barrier.Transition.StateAfter = afterState;
529 barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
530
531 ID3D12GraphicsCommandList2_ResourceBarrier(data->commandList, 1, &barrier);
532 }
533}
534
535static void D3D12_ResetCommandList(D3D12_RenderData *data)
536{
537 int i;
538 ID3D12DescriptorHeap *rootDescriptorHeaps[] = { data->srvDescriptorHeap, data->samplerDescriptorHeap };
539 ID3D12CommandAllocator *commandAllocator = data->commandAllocators[data->currentBackBufferIndex];
540
541 ID3D12CommandAllocator_Reset(commandAllocator);
542 ID3D12GraphicsCommandList2_Reset(data->commandList, commandAllocator, NULL);
543 data->currentPipelineState = NULL;
544 data->currentVertexBuffer = 0;
545 data->issueBatch = false;
546 data->cliprectDirty = true;
547 data->viewportDirty = true;
548 data->currentRenderTargetView.ptr = 0;
549 // FIXME should we also clear currentSampler.ptr and currentRenderTargetView.ptr ? (and use D3D12_InvalidateCachedState() instead)
550
551 // Release any upload buffers that were inflight
552 for (i = 0; i < data->currentUploadBuffer; ++i) {
553 D3D_SAFE_RELEASE(data->uploadBuffers[i]);
554 }
555 data->currentUploadBuffer = 0;
556
557 ID3D12GraphicsCommandList2_SetDescriptorHeaps(data->commandList, 2, rootDescriptorHeaps);
558}
559
560static HRESULT D3D12_IssueBatch(D3D12_RenderData *data)
561{
562 HRESULT result = S_OK;
563
564 // Issue the command list
565 result = ID3D12GraphicsCommandList2_Close(data->commandList);
566 if (FAILED(result)) {
567 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("D3D12_IssueBatch"), result);
568 return result;
569 }
570 ID3D12CommandQueue_ExecuteCommandLists(data->commandQueue, 1, (ID3D12CommandList *const *)&data->commandList);
571
572 D3D12_WaitForGPU(data);
573
574 D3D12_ResetCommandList(data);
575
576 return result;
577}
578
579static void D3D12_DestroyRenderer(SDL_Renderer *renderer)
580{
581 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
582 if (data) {
583 D3D12_WaitForGPU(data);
584 D3D12_ReleaseAll(renderer);
585 SDL_free(data);
586 }
587}
588
589static D3D12_BLEND GetBlendFunc(SDL_BlendFactor factor)
590{
591 switch (factor) {
592 case SDL_BLENDFACTOR_ZERO:
593 return D3D12_BLEND_ZERO;
594 case SDL_BLENDFACTOR_ONE:
595 return D3D12_BLEND_ONE;
596 case SDL_BLENDFACTOR_SRC_COLOR:
597 return D3D12_BLEND_SRC_COLOR;
598 case SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR:
599 return D3D12_BLEND_INV_SRC_COLOR;
600 case SDL_BLENDFACTOR_SRC_ALPHA:
601 return D3D12_BLEND_SRC_ALPHA;
602 case SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA:
603 return D3D12_BLEND_INV_SRC_ALPHA;
604 case SDL_BLENDFACTOR_DST_COLOR:
605 return D3D12_BLEND_DEST_COLOR;
606 case SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR:
607 return D3D12_BLEND_INV_DEST_COLOR;
608 case SDL_BLENDFACTOR_DST_ALPHA:
609 return D3D12_BLEND_DEST_ALPHA;
610 case SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA:
611 return D3D12_BLEND_INV_DEST_ALPHA;
612 default:
613 return (D3D12_BLEND)0;
614 }
615}
616
617static D3D12_BLEND_OP GetBlendEquation(SDL_BlendOperation operation)
618{
619 switch (operation) {
620 case SDL_BLENDOPERATION_ADD:
621 return D3D12_BLEND_OP_ADD;
622 case SDL_BLENDOPERATION_SUBTRACT:
623 return D3D12_BLEND_OP_SUBTRACT;
624 case SDL_BLENDOPERATION_REV_SUBTRACT:
625 return D3D12_BLEND_OP_REV_SUBTRACT;
626 case SDL_BLENDOPERATION_MINIMUM:
627 return D3D12_BLEND_OP_MIN;
628 case SDL_BLENDOPERATION_MAXIMUM:
629 return D3D12_BLEND_OP_MAX;
630 default:
631 return (D3D12_BLEND_OP)0;
632 }
633}
634
635static void D3D12_CreateBlendState(SDL_Renderer *renderer, SDL_BlendMode blendMode, D3D12_BLEND_DESC *outBlendDesc)
636{
637 SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode);
638 SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode);
639 SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode);
640 SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode);
641 SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode);
642 SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode);
643
644 SDL_zerop(outBlendDesc);
645 outBlendDesc->AlphaToCoverageEnable = FALSE;
646 outBlendDesc->IndependentBlendEnable = FALSE;
647 outBlendDesc->RenderTarget[0].BlendEnable = TRUE;
648 outBlendDesc->RenderTarget[0].SrcBlend = GetBlendFunc(srcColorFactor);
649 outBlendDesc->RenderTarget[0].DestBlend = GetBlendFunc(dstColorFactor);
650 outBlendDesc->RenderTarget[0].BlendOp = GetBlendEquation(colorOperation);
651 outBlendDesc->RenderTarget[0].SrcBlendAlpha = GetBlendFunc(srcAlphaFactor);
652 outBlendDesc->RenderTarget[0].DestBlendAlpha = GetBlendFunc(dstAlphaFactor);
653 outBlendDesc->RenderTarget[0].BlendOpAlpha = GetBlendEquation(alphaOperation);
654 outBlendDesc->RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL;
655}
656
657static D3D12_PipelineState *D3D12_CreatePipelineState(SDL_Renderer *renderer,
658 D3D12_Shader shader,
659 SDL_BlendMode blendMode,
660 D3D12_PRIMITIVE_TOPOLOGY_TYPE topology,
661 DXGI_FORMAT rtvFormat)
662{
663 const D3D12_INPUT_ELEMENT_DESC vertexDesc[] = {
664 { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
665 { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 8, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
666 { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 16, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 },
667 };
668 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
669 D3D12_GRAPHICS_PIPELINE_STATE_DESC pipelineDesc;
670 ID3D12PipelineState *pipelineState = NULL;
671 D3D12_PipelineState *pipelineStates;
672 HRESULT result = S_OK;
673
674 SDL_zero(pipelineDesc);
675 pipelineDesc.pRootSignature = data->rootSignatures[D3D12_GetRootSignatureType(shader)];
676 D3D12_GetVertexShader(shader, &pipelineDesc.VS);
677 D3D12_GetPixelShader(shader, &pipelineDesc.PS);
678 D3D12_CreateBlendState(renderer, blendMode, &pipelineDesc.BlendState);
679 pipelineDesc.SampleMask = 0xffffffff;
680
681 pipelineDesc.RasterizerState.AntialiasedLineEnable = FALSE;
682 pipelineDesc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;
683 pipelineDesc.RasterizerState.DepthBias = 0;
684 pipelineDesc.RasterizerState.DepthBiasClamp = 0.0f;
685 pipelineDesc.RasterizerState.DepthClipEnable = TRUE;
686 pipelineDesc.RasterizerState.FillMode = D3D12_FILL_MODE_SOLID;
687 pipelineDesc.RasterizerState.FrontCounterClockwise = FALSE;
688 pipelineDesc.RasterizerState.MultisampleEnable = FALSE;
689 pipelineDesc.RasterizerState.SlopeScaledDepthBias = 0.0f;
690
691 pipelineDesc.InputLayout.pInputElementDescs = vertexDesc;
692 pipelineDesc.InputLayout.NumElements = 3;
693
694 pipelineDesc.PrimitiveTopologyType = topology;
695
696 pipelineDesc.NumRenderTargets = 1;
697 pipelineDesc.RTVFormats[0] = rtvFormat;
698 pipelineDesc.SampleDesc.Count = 1;
699 pipelineDesc.SampleDesc.Quality = 0;
700
701 result = ID3D12Device1_CreateGraphicsPipelineState(data->d3dDevice,
702 &pipelineDesc,
703 D3D_GUID(SDL_IID_ID3D12PipelineState),
704 (void **)&pipelineState);
705 if (FAILED(result)) {
706 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateGraphicsPipelineState"), result);
707 return NULL;
708 }
709
710 pipelineStates = (D3D12_PipelineState *)SDL_realloc(data->pipelineStates, (data->pipelineStateCount + 1) * sizeof(*pipelineStates));
711 if (!pipelineStates) {
712 D3D_SAFE_RELEASE(pipelineState);
713 return NULL;
714 }
715
716 pipelineStates[data->pipelineStateCount].shader = shader;
717 pipelineStates[data->pipelineStateCount].blendMode = blendMode;
718 pipelineStates[data->pipelineStateCount].topology = topology;
719 pipelineStates[data->pipelineStateCount].rtvFormat = rtvFormat;
720 pipelineStates[data->pipelineStateCount].pipelineState = pipelineState;
721 data->pipelineStates = pipelineStates;
722 ++data->pipelineStateCount;
723
724 return &pipelineStates[data->pipelineStateCount - 1];
725}
726
727static HRESULT D3D12_CreateVertexBuffer(D3D12_RenderData *data, size_t vbidx, size_t size)
728{
729 D3D12_HEAP_PROPERTIES vbufferHeapProps;
730 D3D12_RESOURCE_DESC vbufferDesc;
731 HRESULT result;
732
733 D3D_SAFE_RELEASE(data->vertexBuffers[vbidx].resource);
734
735 SDL_zero(vbufferHeapProps);
736 vbufferHeapProps.Type = D3D12_HEAP_TYPE_UPLOAD;
737 vbufferHeapProps.CreationNodeMask = 1;
738 vbufferHeapProps.VisibleNodeMask = 1;
739
740 SDL_zero(vbufferDesc);
741 vbufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
742 vbufferDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT;
743 vbufferDesc.Width = size;
744 vbufferDesc.Height = 1;
745 vbufferDesc.DepthOrArraySize = 1;
746 vbufferDesc.MipLevels = 1;
747 vbufferDesc.Format = DXGI_FORMAT_UNKNOWN;
748 vbufferDesc.SampleDesc.Count = 1;
749 vbufferDesc.SampleDesc.Quality = 0;
750 vbufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
751 vbufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE;
752
753 result = ID3D12Device1_CreateCommittedResource(data->d3dDevice,
754 &vbufferHeapProps,
755 D3D12_HEAP_FLAG_NONE,
756 &vbufferDesc,
757 D3D12_RESOURCE_STATE_GENERIC_READ,
758 NULL,
759 D3D_GUID(SDL_IID_ID3D12Resource),
760 (void **)&data->vertexBuffers[vbidx].resource);
761
762 if (FAILED(result)) {
763 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreatePlacedResource [vertex buffer]"), result);
764 return result;
765 }
766
767 data->vertexBuffers[vbidx].view.BufferLocation = ID3D12Resource_GetGPUVirtualAddress(data->vertexBuffers[vbidx].resource);
768 data->vertexBuffers[vbidx].view.StrideInBytes = sizeof(D3D12_VertexPositionColor);
769 data->vertexBuffers[vbidx].size = size;
770
771 return result;
772}
773
774// Create resources that depend on the device.
775static HRESULT D3D12_CreateDeviceResources(SDL_Renderer *renderer)
776{
777#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
778 typedef HRESULT(WINAPI * PFN_CREATE_DXGI_FACTORY)(UINT flags, REFIID riid, void **ppFactory);
779 PFN_CREATE_DXGI_FACTORY CreateDXGIFactoryFunc;
780 PFN_D3D12_CREATE_DEVICE D3D12CreateDeviceFunc;
781#endif
782 typedef HANDLE(WINAPI * PFN_CREATE_EVENT_EX)(LPSECURITY_ATTRIBUTES lpEventAttributes, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess);
783 PFN_CREATE_EVENT_EX CreateEventExFunc;
784
785 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
786 ID3D12Device *d3dDevice = NULL;
787 HRESULT result = S_OK;
788 UINT creationFlags = 0;
789 int i;
790 bool createDebug;
791
792 D3D12_COMMAND_QUEUE_DESC queueDesc;
793 D3D12_DESCRIPTOR_HEAP_DESC descriptorHeapDesc;
794 D3D12_SAMPLER_DESC samplerDesc;
795 ID3D12DescriptorHeap *rootDescriptorHeaps[2];
796
797 // See if we need debug interfaces
798 createDebug = SDL_GetHintBoolean(SDL_HINT_RENDER_DIRECT3D11_DEBUG, false);
799
800#ifdef SDL_PLATFORM_GDK
801 CreateEventExFunc = CreateEventExW;
802#else
803 // CreateEventEx() arrived in Vista, so we need to load it with GetProcAddress for XP.
804 {
805 HMODULE kernel32 = GetModuleHandle(TEXT("kernel32.dll"));
806 CreateEventExFunc = NULL;
807 if (kernel32) {
808 CreateEventExFunc = (PFN_CREATE_EVENT_EX)GetProcAddress(kernel32, "CreateEventExW");
809 }
810 }
811#endif
812 if (!CreateEventExFunc) {
813 result = E_FAIL;
814 goto done;
815 }
816
817#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
818 data->hDXGIMod = SDL_LoadObject("dxgi.dll");
819 if (!data->hDXGIMod) {
820 result = E_FAIL;
821 goto done;
822 }
823
824 CreateDXGIFactoryFunc = (PFN_CREATE_DXGI_FACTORY)SDL_LoadFunction(data->hDXGIMod, "CreateDXGIFactory2");
825 if (!CreateDXGIFactoryFunc) {
826 result = E_FAIL;
827 goto done;
828 }
829
830 data->hD3D12Mod = SDL_LoadObject("D3D12.dll");
831 if (!data->hD3D12Mod) {
832 result = E_FAIL;
833 goto done;
834 }
835
836 D3D12CreateDeviceFunc = (PFN_D3D12_CREATE_DEVICE)SDL_LoadFunction(data->hD3D12Mod, "D3D12CreateDevice");
837 if (!D3D12CreateDeviceFunc) {
838 result = E_FAIL;
839 goto done;
840 }
841
842 if (createDebug) {
843 PFN_D3D12_GET_DEBUG_INTERFACE D3D12GetDebugInterfaceFunc;
844
845 D3D12GetDebugInterfaceFunc = (PFN_D3D12_GET_DEBUG_INTERFACE)SDL_LoadFunction(data->hD3D12Mod, "D3D12GetDebugInterface");
846 if (!D3D12GetDebugInterfaceFunc) {
847 result = E_FAIL;
848 goto done;
849 }
850 if (SUCCEEDED(D3D12GetDebugInterfaceFunc(D3D_GUID(SDL_IID_ID3D12Debug), (void **)&data->debugInterface))) {
851 ID3D12Debug_EnableDebugLayer(data->debugInterface);
852 }
853 }
854#endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
855
856#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
857 result = D3D12_XBOX_CreateDevice(&d3dDevice, createDebug);
858 if (FAILED(result)) {
859 // SDL Error is set by D3D12_XBOX_CreateDevice
860 goto done;
861 }
862#else
863 if (createDebug) {
864#ifdef __IDXGIInfoQueue_INTERFACE_DEFINED__
865 IDXGIInfoQueue *dxgiInfoQueue = NULL;
866 PFN_CREATE_DXGI_FACTORY DXGIGetDebugInterfaceFunc;
867
868 // If the debug hint is set, also create the DXGI factory in debug mode
869 DXGIGetDebugInterfaceFunc = (PFN_CREATE_DXGI_FACTORY)SDL_LoadFunction(data->hDXGIMod, "DXGIGetDebugInterface1");
870 if (!DXGIGetDebugInterfaceFunc) {
871 result = E_FAIL;
872 goto done;
873 }
874
875 result = DXGIGetDebugInterfaceFunc(0, D3D_GUID(SDL_IID_IDXGIDebug1), (void **)&data->dxgiDebug);
876 if (FAILED(result)) {
877 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("DXGIGetDebugInterface1"), result);
878 goto done;
879 }
880
881 result = DXGIGetDebugInterfaceFunc(0, D3D_GUID(SDL_IID_IDXGIInfoQueue), (void **)&dxgiInfoQueue);
882 if (FAILED(result)) {
883 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("DXGIGetDebugInterface1"), result);
884 goto done;
885 }
886
887 IDXGIInfoQueue_SetBreakOnSeverity(dxgiInfoQueue, SDL_DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, TRUE);
888 IDXGIInfoQueue_SetBreakOnSeverity(dxgiInfoQueue, SDL_DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, TRUE);
889 D3D_SAFE_RELEASE(dxgiInfoQueue);
890#endif // __IDXGIInfoQueue_INTERFACE_DEFINED__
891 creationFlags = DXGI_CREATE_FACTORY_DEBUG;
892 }
893
894 result = CreateDXGIFactoryFunc(creationFlags, D3D_GUID(SDL_IID_IDXGIFactory6), (void **)&data->dxgiFactory);
895 if (FAILED(result)) {
896 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("CreateDXGIFactory"), result);
897 goto done;
898 }
899
900 // Prefer a high performance adapter if there are multiple choices
901 result = IDXGIFactory6_EnumAdapterByGpuPreference(data->dxgiFactory,
902 0,
903 DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE,
904 D3D_GUID(SDL_IID_IDXGIAdapter4),
905 (void **)&data->dxgiAdapter);
906 if (FAILED(result)) {
907 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGIFactory6::EnumAdapterByGPUPreference"), result);
908 goto done;
909 }
910
911 result = D3D12CreateDeviceFunc((IUnknown *)data->dxgiAdapter,
912 D3D_FEATURE_LEVEL_11_0, // Request minimum feature level 11.0 for maximum compatibility
913 D3D_GUID(SDL_IID_ID3D12Device1),
914 (void **)&d3dDevice);
915 if (FAILED(result)) {
916 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("D3D12CreateDevice"), result);
917 goto done;
918 }
919
920 // Setup the info queue if in debug mode
921 if (createDebug) {
922 ID3D12InfoQueue *infoQueue = NULL;
923 D3D12_MESSAGE_SEVERITY severities[] = { D3D12_MESSAGE_SEVERITY_INFO };
924 D3D12_INFO_QUEUE_FILTER filter;
925
926 result = ID3D12Device1_QueryInterface(d3dDevice, D3D_GUID(SDL_IID_ID3D12InfoQueue), (void **)&infoQueue);
927 if (FAILED(result)) {
928 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device to ID3D12InfoQueue"), result);
929 goto done;
930 }
931
932 SDL_zero(filter);
933 filter.DenyList.NumSeverities = 1;
934 filter.DenyList.pSeverityList = severities;
935 ID3D12InfoQueue_PushStorageFilter(infoQueue, &filter);
936
937 ID3D12InfoQueue_SetBreakOnSeverity(infoQueue, D3D12_MESSAGE_SEVERITY_ERROR, TRUE);
938 ID3D12InfoQueue_SetBreakOnSeverity(infoQueue, D3D12_MESSAGE_SEVERITY_CORRUPTION, TRUE);
939
940 D3D_SAFE_RELEASE(infoQueue);
941 }
942#endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
943
944 result = ID3D12Device_QueryInterface(d3dDevice, D3D_GUID(SDL_IID_ID3D12Device1), (void **)&data->d3dDevice);
945 if (FAILED(result)) {
946 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device to ID3D12Device1"), result);
947 goto done;
948 }
949
950 // Create a command queue
951 SDL_zero(queueDesc);
952 queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
953 queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
954
955 result = ID3D12Device1_CreateCommandQueue(data->d3dDevice,
956 &queueDesc,
957 D3D_GUID(SDL_IID_ID3D12CommandQueue),
958 (void **)&data->commandQueue);
959 if (FAILED(result)) {
960 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommandQueue"), result);
961 goto done;
962 }
963
964 // Create the descriptor heaps for the render target view, texture SRVs, and samplers
965 SDL_zero(descriptorHeapDesc);
966 descriptorHeapDesc.NumDescriptors = SDL_D3D12_NUM_BUFFERS;
967 descriptorHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
968 result = ID3D12Device1_CreateDescriptorHeap(data->d3dDevice,
969 &descriptorHeapDesc,
970 D3D_GUID(SDL_IID_ID3D12DescriptorHeap),
971 (void **)&data->rtvDescriptorHeap);
972 if (FAILED(result)) {
973 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateDescriptorHeap [rtv]"), result);
974 goto done;
975 }
976 data->rtvDescriptorSize = ID3D12Device1_GetDescriptorHandleIncrementSize(d3dDevice, D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
977
978 descriptorHeapDesc.NumDescriptors = SDL_D3D12_MAX_NUM_TEXTURES;
979 result = ID3D12Device1_CreateDescriptorHeap(data->d3dDevice,
980 &descriptorHeapDesc,
981 D3D_GUID(SDL_IID_ID3D12DescriptorHeap),
982 (void **)&data->textureRTVDescriptorHeap);
983 if (FAILED(result)) {
984 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateDescriptorHeap [texture rtv]"), result);
985 goto done;
986 }
987
988 SDL_zero(descriptorHeapDesc);
989 descriptorHeapDesc.NumDescriptors = SDL_D3D12_MAX_NUM_TEXTURES;
990 descriptorHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
991 descriptorHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
992 result = ID3D12Device1_CreateDescriptorHeap(data->d3dDevice,
993 &descriptorHeapDesc,
994 D3D_GUID(SDL_IID_ID3D12DescriptorHeap),
995 (void **)&data->srvDescriptorHeap);
996 if (FAILED(result)) {
997 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateDescriptorHeap [srv]"), result);
998 goto done;
999 }
1000 rootDescriptorHeaps[0] = data->srvDescriptorHeap;
1001 data->srvDescriptorSize = ID3D12Device1_GetDescriptorHandleIncrementSize(d3dDevice, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
1002
1003 SDL_zero(descriptorHeapDesc);
1004 descriptorHeapDesc.NumDescriptors = 4;
1005 descriptorHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER;
1006 descriptorHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
1007 result = ID3D12Device1_CreateDescriptorHeap(data->d3dDevice,
1008 &descriptorHeapDesc,
1009 D3D_GUID(SDL_IID_ID3D12DescriptorHeap),
1010 (void **)&data->samplerDescriptorHeap);
1011 if (FAILED(result)) {
1012 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateDescriptorHeap [sampler]"), result);
1013 goto done;
1014 }
1015 rootDescriptorHeaps[1] = data->samplerDescriptorHeap;
1016 data->samplerDescriptorSize = ID3D12Device1_GetDescriptorHandleIncrementSize(d3dDevice, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER);
1017
1018 // Create a command allocator for each back buffer
1019 for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) {
1020 result = ID3D12Device1_CreateCommandAllocator(data->d3dDevice,
1021 D3D12_COMMAND_LIST_TYPE_DIRECT,
1022 D3D_GUID(SDL_IID_ID3D12CommandAllocator),
1023 (void **)&data->commandAllocators[i]);
1024 if (FAILED(result)) {
1025 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommandAllocator"), result);
1026 goto done;
1027 }
1028 }
1029
1030 // Create the command list
1031 result = ID3D12Device1_CreateCommandList(data->d3dDevice,
1032 0,
1033 D3D12_COMMAND_LIST_TYPE_DIRECT,
1034 data->commandAllocators[0],
1035 NULL,
1036 D3D_GUID(SDL_IID_ID3D12GraphicsCommandList2),
1037 (void **)&data->commandList);
1038 if (FAILED(result)) {
1039 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommandList"), result);
1040 goto done;
1041 }
1042
1043 // Set the descriptor heaps to the correct initial value
1044 ID3D12GraphicsCommandList2_SetDescriptorHeaps(data->commandList, 2, rootDescriptorHeaps);
1045
1046 // Create the fence and fence event
1047 result = ID3D12Device_CreateFence(data->d3dDevice,
1048 data->fenceValue,
1049 D3D12_FENCE_FLAG_NONE,
1050 D3D_GUID(SDL_IID_ID3D12Fence),
1051 (void **)&data->fence);
1052 if (FAILED(result)) {
1053 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateFence"), result);
1054 goto done;
1055 }
1056
1057 data->fenceValue++;
1058
1059 data->fenceEvent = CreateEventExFunc(NULL, NULL, 0, EVENT_MODIFY_STATE | SYNCHRONIZE);
1060 if (!data->fenceEvent) {
1061 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("CreateEventEx"), result);
1062 goto done;
1063 }
1064
1065 // Create all the root signatures
1066 for (i = 0; i < NUM_ROOTSIGS; ++i) {
1067 D3D12_SHADER_BYTECODE rootSigData;
1068 D3D12_GetRootSignatureData((D3D12_RootSignature)i, &rootSigData);
1069 result = ID3D12Device1_CreateRootSignature(data->d3dDevice,
1070 0,
1071 rootSigData.pShaderBytecode,
1072 rootSigData.BytecodeLength,
1073 D3D_GUID(SDL_IID_ID3D12RootSignature),
1074 (void **)&data->rootSignatures[i]);
1075 if (FAILED(result)) {
1076 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateRootSignature"), result);
1077 goto done;
1078 }
1079 }
1080
1081 {
1082 const SDL_BlendMode defaultBlendModes[] = {
1083 SDL_BLENDMODE_BLEND,
1084 };
1085 const DXGI_FORMAT defaultRTVFormats[] = {
1086 DXGI_FORMAT_B8G8R8A8_UNORM,
1087 };
1088 int j, k, l;
1089
1090 // Create a few default pipeline state objects, to verify that this renderer will work
1091 for (i = 0; i < NUM_SHADERS; ++i) {
1092 for (j = 0; j < SDL_arraysize(defaultBlendModes); ++j) {
1093 for (k = D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT; k < D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH; ++k) {
1094 for (l = 0; l < SDL_arraysize(defaultRTVFormats); ++l) {
1095 if (!D3D12_CreatePipelineState(renderer, (D3D12_Shader)i, defaultBlendModes[j], (D3D12_PRIMITIVE_TOPOLOGY_TYPE)k, defaultRTVFormats[l])) {
1096 // D3D12_CreatePipelineState will set the SDL error, if it fails
1097 result = E_FAIL;
1098 goto done;
1099 }
1100 }
1101 }
1102 }
1103 }
1104 }
1105
1106 // Create default vertex buffers
1107 for (i = 0; i < SDL_D3D12_NUM_VERTEX_BUFFERS; ++i) {
1108 D3D12_CreateVertexBuffer(data, i, D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT);
1109 }
1110
1111 // Create samplers to use when drawing textures:
1112 static struct
1113 {
1114 D3D12_FILTER filter;
1115 D3D12_TEXTURE_ADDRESS_MODE address;
1116 } samplerParams[] = {
1117 { D3D12_FILTER_MIN_MAG_MIP_POINT, D3D12_TEXTURE_ADDRESS_MODE_CLAMP },
1118 { D3D12_FILTER_MIN_MAG_MIP_POINT, D3D12_TEXTURE_ADDRESS_MODE_WRAP },
1119 { D3D12_FILTER_MIN_MAG_MIP_LINEAR, D3D12_TEXTURE_ADDRESS_MODE_CLAMP },
1120 { D3D12_FILTER_MIN_MAG_MIP_LINEAR, D3D12_TEXTURE_ADDRESS_MODE_WRAP },
1121 };
1122 SDL_COMPILE_TIME_ASSERT(samplerParams_SIZE, SDL_arraysize(samplerParams) == D3D12_SAMPLER_COUNT);
1123 SDL_zero(samplerDesc);
1124 samplerDesc.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
1125 samplerDesc.MipLODBias = 0.0f;
1126 samplerDesc.MaxAnisotropy = 1;
1127 samplerDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS;
1128 samplerDesc.MinLOD = 0.0f;
1129 samplerDesc.MaxLOD = D3D12_FLOAT32_MAX;
1130 D3D_CALL_RET(data->samplerDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &data->samplers[0]);
1131 for (i = 0; i < SDL_arraysize(samplerParams); ++i) {
1132 samplerDesc.Filter = samplerParams[i].filter;
1133 samplerDesc.AddressU = samplerParams[i].address;
1134 samplerDesc.AddressV = samplerParams[i].address;
1135 data->samplers[i].ptr = data->samplers[0].ptr + i * data->samplerDescriptorSize;
1136 ID3D12Device1_CreateSampler(data->d3dDevice, &samplerDesc, data->samplers[i]);
1137 }
1138
1139 // Initialize the pool allocator for SRVs
1140 for (i = 0; i < SDL_D3D12_MAX_NUM_TEXTURES; ++i) {
1141 data->srvPoolNodes[i].index = (SIZE_T)i;
1142 if (i != SDL_D3D12_MAX_NUM_TEXTURES - 1) {
1143 data->srvPoolNodes[i].next = &data->srvPoolNodes[i + 1];
1144 }
1145 }
1146 data->srvPoolHead = &data->srvPoolNodes[0];
1147
1148 SDL_PropertiesID props = SDL_GetRendererProperties(renderer);
1149 SDL_SetPointerProperty(props, SDL_PROP_RENDERER_D3D12_DEVICE_POINTER, data->d3dDevice);
1150 SDL_SetPointerProperty(props, SDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER, data->commandQueue);
1151
1152done:
1153 D3D_SAFE_RELEASE(d3dDevice);
1154 return result;
1155}
1156
1157static DXGI_MODE_ROTATION D3D12_GetCurrentRotation(void)
1158{
1159 // FIXME
1160 return DXGI_MODE_ROTATION_IDENTITY;
1161}
1162
1163static BOOL D3D12_IsDisplayRotated90Degrees(DXGI_MODE_ROTATION rotation)
1164{
1165 switch (rotation) {
1166 case DXGI_MODE_ROTATION_ROTATE90:
1167 case DXGI_MODE_ROTATION_ROTATE270:
1168 return TRUE;
1169 default:
1170 return FALSE;
1171 }
1172}
1173
1174static int D3D12_GetRotationForCurrentRenderTarget(SDL_Renderer *renderer)
1175{
1176 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
1177 if (data->textureRenderTarget) {
1178 return DXGI_MODE_ROTATION_IDENTITY;
1179 } else {
1180 return data->rotation;
1181 }
1182}
1183
1184static bool D3D12_GetViewportAlignedD3DRect(SDL_Renderer *renderer, const SDL_Rect *sdlRect, D3D12_RECT *outRect, BOOL includeViewportOffset)
1185{
1186 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
1187 const int rotation = D3D12_GetRotationForCurrentRenderTarget(renderer);
1188 const SDL_Rect *viewport = &data->currentViewport;
1189
1190 switch (rotation) {
1191 case DXGI_MODE_ROTATION_IDENTITY:
1192 outRect->left = sdlRect->x;
1193 outRect->right = (LONG)sdlRect->x + sdlRect->w;
1194 outRect->top = sdlRect->y;
1195 outRect->bottom = (LONG)sdlRect->y + sdlRect->h;
1196 if (includeViewportOffset) {
1197 outRect->left += viewport->x;
1198 outRect->right += viewport->x;
1199 outRect->top += viewport->y;
1200 outRect->bottom += viewport->y;
1201 }
1202 break;
1203 case DXGI_MODE_ROTATION_ROTATE270:
1204 outRect->left = sdlRect->y;
1205 outRect->right = (LONG)sdlRect->y + sdlRect->h;
1206 outRect->top = viewport->w - sdlRect->x - sdlRect->w;
1207 outRect->bottom = viewport->w - sdlRect->x;
1208 break;
1209 case DXGI_MODE_ROTATION_ROTATE180:
1210 outRect->left = viewport->w - sdlRect->x - sdlRect->w;
1211 outRect->right = viewport->w - sdlRect->x;
1212 outRect->top = viewport->h - sdlRect->y - sdlRect->h;
1213 outRect->bottom = viewport->h - sdlRect->y;
1214 break;
1215 case DXGI_MODE_ROTATION_ROTATE90:
1216 outRect->left = viewport->h - sdlRect->y - sdlRect->h;
1217 outRect->right = viewport->h - sdlRect->y;
1218 outRect->top = sdlRect->x;
1219 outRect->bottom = (LONG)sdlRect->x + sdlRect->h;
1220 break;
1221 default:
1222 return SDL_SetError("The physical display is in an unknown or unsupported rotation");
1223 }
1224 return true;
1225}
1226
1227#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
1228static HRESULT D3D12_CreateSwapChain(SDL_Renderer *renderer, int w, int h)
1229{
1230 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
1231 IDXGISwapChain1 *swapChain = NULL;
1232 HRESULT result = S_OK;
1233
1234 // Create a swap chain using the same adapter as the existing Direct3D device.
1235 DXGI_SWAP_CHAIN_DESC1 swapChainDesc;
1236 SDL_zero(swapChainDesc);
1237 swapChainDesc.Width = w;
1238 swapChainDesc.Height = h;
1239 switch (renderer->output_colorspace) {
1240 case SDL_COLORSPACE_SRGB_LINEAR:
1241 swapChainDesc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT;
1242 data->renderTargetFormat = DXGI_FORMAT_R16G16B16A16_FLOAT;
1243 break;
1244 case SDL_COLORSPACE_HDR10:
1245 swapChainDesc.Format = DXGI_FORMAT_R10G10B10A2_UNORM;
1246 data->renderTargetFormat = DXGI_FORMAT_R10G10B10A2_UNORM;
1247 break;
1248 default:
1249 swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // This is the most common swap chain format.
1250 data->renderTargetFormat = DXGI_FORMAT_B8G8R8A8_UNORM;
1251 break;
1252 }
1253 swapChainDesc.Stereo = FALSE;
1254 swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling.
1255 swapChainDesc.SampleDesc.Quality = 0;
1256 swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
1257 swapChainDesc.BufferCount = 2; // Use double-buffering to minimize latency.
1258 if (WIN_IsWindows8OrGreater()) {
1259 swapChainDesc.Scaling = DXGI_SCALING_NONE;
1260 } else {
1261 swapChainDesc.Scaling = DXGI_SCALING_STRETCH;
1262 }
1263 swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All Windows Store apps must use this SwapEffect.
1264 swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT | // To support SetMaximumFrameLatency
1265 DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING; // To support presenting with allow tearing on
1266
1267 HWND hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(renderer->window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL);
1268 if (!hwnd) {
1269 SDL_SetError("Couldn't get window handle");
1270 result = E_FAIL;
1271 goto done;
1272 }
1273
1274 result = IDXGIFactory2_CreateSwapChainForHwnd(data->dxgiFactory,
1275 (IUnknown *)data->commandQueue,
1276 hwnd,
1277 &swapChainDesc,
1278 NULL,
1279 NULL, // Allow on all displays.
1280 &swapChain);
1281 if (FAILED(result)) {
1282 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGIFactory2::CreateSwapChainForHwnd"), result);
1283 goto done;
1284 }
1285
1286 IDXGIFactory6_MakeWindowAssociation(data->dxgiFactory, hwnd, DXGI_MWA_NO_WINDOW_CHANGES);
1287
1288 result = IDXGISwapChain1_QueryInterface(swapChain, D3D_GUID(SDL_IID_IDXGISwapChain4), (void **)&data->swapChain);
1289 if (FAILED(result)) {
1290 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain1::QueryInterface"), result);
1291 goto done;
1292 }
1293
1294 /* Ensure that the swapchain does not queue more than one frame at a time. This both reduces latency
1295 * and ensures that the application will only render after each VSync, minimizing power consumption.
1296 */
1297 result = IDXGISwapChain4_SetMaximumFrameLatency(data->swapChain, 1);
1298 if (FAILED(result)) {
1299 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain4::SetMaximumFrameLatency"), result);
1300 goto done;
1301 }
1302
1303 data->swapEffect = swapChainDesc.SwapEffect;
1304 data->swapFlags = swapChainDesc.Flags;
1305
1306 UINT colorspace_support = 0;
1307 DXGI_COLOR_SPACE_TYPE colorspace;
1308 switch (renderer->output_colorspace) {
1309 case SDL_COLORSPACE_SRGB_LINEAR:
1310 colorspace = DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709;
1311 break;
1312 case SDL_COLORSPACE_HDR10:
1313 colorspace = DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020;
1314 break;
1315 default:
1316 // sRGB
1317 colorspace = DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709;
1318 break;
1319 }
1320 if (SUCCEEDED(IDXGISwapChain3_CheckColorSpaceSupport(data->swapChain, colorspace, &colorspace_support)) &&
1321 (colorspace_support & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT)) {
1322 result = IDXGISwapChain3_SetColorSpace1(data->swapChain, colorspace);
1323 if (FAILED(result)) {
1324 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain3::SetColorSpace1"), result);
1325 goto done;
1326 }
1327 } else {
1328 // Not the default, we're not going to be able to present in this colorspace
1329 SDL_SetError("Unsupported output colorspace");
1330 result = DXGI_ERROR_UNSUPPORTED;
1331 }
1332
1333 SDL_SetPointerProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER, data->swapChain);
1334
1335done:
1336 D3D_SAFE_RELEASE(swapChain);
1337 return result;
1338}
1339#endif
1340
1341// Initialize all resources that change when the window's size changes.
1342static HRESULT D3D12_CreateWindowSizeDependentResources(SDL_Renderer *renderer)
1343{
1344 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
1345 HRESULT result = S_OK;
1346 int i, w, h;
1347
1348 D3D12_RENDER_TARGET_VIEW_DESC rtvDesc;
1349 D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor;
1350
1351 // Release resources in the current command list
1352 D3D12_IssueBatch(data);
1353 ID3D12GraphicsCommandList2_OMSetRenderTargets(data->commandList, 0, NULL, FALSE, NULL);
1354
1355 // Release render targets
1356 for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) {
1357 D3D_SAFE_RELEASE(data->renderTargets[i]);
1358 }
1359
1360 /* The width and height of the swap chain must be based on the display's
1361 * non-rotated size.
1362 */
1363 SDL_GetWindowSizeInPixels(renderer->window, &w, &h);
1364 data->rotation = D3D12_GetCurrentRotation();
1365 if (D3D12_IsDisplayRotated90Degrees(data->rotation)) {
1366 int tmp = w;
1367 w = h;
1368 h = tmp;
1369 }
1370
1371#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
1372 if (data->swapChain) {
1373 // If the swap chain already exists, resize it.
1374 result = IDXGISwapChain_ResizeBuffers(data->swapChain,
1375 0,
1376 w, h,
1377 DXGI_FORMAT_UNKNOWN,
1378 data->swapFlags);
1379 if (FAILED(result)) {
1380 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::ResizeBuffers"), result);
1381 goto done;
1382 }
1383 } else {
1384 result = D3D12_CreateSwapChain(renderer, w, h);
1385 if (FAILED(result) || !data->swapChain) {
1386 goto done;
1387 }
1388 }
1389
1390 // Set the proper rotation for the swap chain.
1391 if (WIN_IsWindows8OrGreater()) {
1392 if (data->swapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL) {
1393 result = IDXGISwapChain4_SetRotation(data->swapChain, data->rotation); // NOLINT(clang-analyzer-core.NullDereference)
1394 if (FAILED(result)) {
1395 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain4::SetRotation"), result);
1396 goto done;
1397 }
1398 }
1399 }
1400#endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
1401
1402 // Get each back buffer render target and create render target views
1403 for (i = 0; i < SDL_D3D12_NUM_BUFFERS; ++i) {
1404#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
1405 result = D3D12_XBOX_CreateBackBufferTarget(data->d3dDevice, renderer->window->w, renderer->window->h, (void **)&data->renderTargets[i]);
1406 if (FAILED(result)) {
1407 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("D3D12_XBOX_CreateBackBufferTarget"), result);
1408 goto done;
1409 }
1410#else
1411 result = IDXGISwapChain4_GetBuffer(data->swapChain, // NOLINT(clang-analyzer-core.NullDereference)
1412 i,
1413 D3D_GUID(SDL_IID_ID3D12Resource),
1414 (void **)&data->renderTargets[i]);
1415 if (FAILED(result)) {
1416 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain4::GetBuffer"), result);
1417 goto done;
1418 }
1419#endif
1420
1421 SDL_zero(rtvDesc);
1422 rtvDesc.Format = data->renderTargetFormat;
1423 rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
1424
1425 SDL_zero(rtvDescriptor);
1426 D3D_CALL_RET(data->rtvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &rtvDescriptor);
1427 rtvDescriptor.ptr += i * data->rtvDescriptorSize;
1428 ID3D12Device1_CreateRenderTargetView(data->d3dDevice, data->renderTargets[i], &rtvDesc, rtvDescriptor);
1429 }
1430
1431 // Set back buffer index to current buffer
1432#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
1433 data->currentBackBufferIndex = 0;
1434#else
1435 data->currentBackBufferIndex = IDXGISwapChain4_GetCurrentBackBufferIndex(data->swapChain);
1436#endif
1437
1438 /* Set the swap chain target immediately, so that a target is always set
1439 * even before we get to SetDrawState. Without this it's possible to hit
1440 * null references in places like ReadPixels!
1441 */
1442 data->currentRenderTargetView = D3D12_GetCurrentRenderTargetView(renderer);
1443 ID3D12GraphicsCommandList2_OMSetRenderTargets(data->commandList, 1, &data->currentRenderTargetView, FALSE, NULL);
1444 D3D12_TransitionResource(data,
1445 data->renderTargets[data->currentBackBufferIndex],
1446 D3D12_RESOURCE_STATE_PRESENT,
1447 D3D12_RESOURCE_STATE_RENDER_TARGET);
1448
1449 data->viewportDirty = true;
1450
1451#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
1452 D3D12_XBOX_StartFrame(data->d3dDevice, &data->frameToken);
1453#endif
1454
1455done:
1456 return result;
1457}
1458
1459static bool D3D12_HandleDeviceLost(SDL_Renderer *renderer)
1460{
1461 bool recovered = false;
1462
1463 D3D12_ReleaseAll(renderer);
1464
1465 if (SUCCEEDED(D3D12_CreateDeviceResources(renderer)) &&
1466 SUCCEEDED(D3D12_CreateWindowSizeDependentResources(renderer))) {
1467 recovered = true;
1468 } else {
1469 SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Renderer couldn't recover from device lost: %s", SDL_GetError());
1470 D3D12_ReleaseAll(renderer);
1471 }
1472
1473 // Let the application know that the device has been reset or lost
1474 SDL_Event event;
1475 SDL_zero(event);
1476 event.type = recovered ? SDL_EVENT_RENDER_DEVICE_RESET : SDL_EVENT_RENDER_DEVICE_LOST;
1477 event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer));
1478 SDL_PushEvent(&event);
1479
1480 return recovered;
1481}
1482
1483// This method is called when the window's size changes.
1484static HRESULT D3D12_UpdateForWindowSizeChange(SDL_Renderer *renderer)
1485{
1486 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
1487 // If the GPU has previous work, wait for it to be done first
1488 D3D12_WaitForGPU(data);
1489 return D3D12_CreateWindowSizeDependentResources(renderer);
1490}
1491
1492static void D3D12_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event)
1493{
1494 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
1495
1496 if (event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) {
1497 data->pixelSizeChanged = true;
1498 }
1499}
1500
1501static bool D3D12_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode)
1502{
1503 SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode);
1504 SDL_BlendFactor srcAlphaFactor = SDL_GetBlendModeSrcAlphaFactor(blendMode);
1505 SDL_BlendOperation colorOperation = SDL_GetBlendModeColorOperation(blendMode);
1506 SDL_BlendFactor dstColorFactor = SDL_GetBlendModeDstColorFactor(blendMode);
1507 SDL_BlendFactor dstAlphaFactor = SDL_GetBlendModeDstAlphaFactor(blendMode);
1508 SDL_BlendOperation alphaOperation = SDL_GetBlendModeAlphaOperation(blendMode);
1509
1510 if (!GetBlendFunc(srcColorFactor) || !GetBlendFunc(srcAlphaFactor) ||
1511 !GetBlendEquation(colorOperation) ||
1512 !GetBlendFunc(dstColorFactor) || !GetBlendFunc(dstAlphaFactor) ||
1513 !GetBlendEquation(alphaOperation)) {
1514 return false;
1515 }
1516 return true;
1517}
1518
1519static SIZE_T D3D12_GetAvailableSRVIndex(SDL_Renderer *renderer)
1520{
1521 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
1522 if (rendererData->srvPoolHead) {
1523 SIZE_T index = rendererData->srvPoolHead->index;
1524 rendererData->srvPoolHead = (D3D12_SRVPoolNode *)(rendererData->srvPoolHead->next);
1525 return index;
1526 } else {
1527 SDL_SetError("[d3d12] Cannot allocate more than %d textures!", SDL_D3D12_MAX_NUM_TEXTURES);
1528 return SDL_D3D12_MAX_NUM_TEXTURES + 1;
1529 }
1530}
1531
1532static void D3D12_FreeSRVIndex(SDL_Renderer *renderer, SIZE_T index)
1533{
1534 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
1535 rendererData->srvPoolNodes[index].next = rendererData->srvPoolHead;
1536 rendererData->srvPoolHead = &rendererData->srvPoolNodes[index];
1537}
1538
1539static bool GetTextureProperty(SDL_PropertiesID props, const char *name, ID3D12Resource **texture)
1540{
1541 IUnknown *unknown = (IUnknown*)SDL_GetPointerProperty(props, name, NULL);
1542 if (unknown) {
1543#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
1544 HRESULT result = unknown->QueryInterface(D3D_GUID(SDL_IID_ID3D12Resource), (void **)texture);
1545#else
1546 HRESULT result = IUnknown_QueryInterface(unknown, D3D_GUID(SDL_IID_ID3D12Resource), (void **)texture);
1547#endif
1548 if (FAILED(result)) {
1549 return WIN_SetErrorFromHRESULT(name, result);
1550 }
1551 }
1552 return true;
1553}
1554
1555static bool D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_PropertiesID create_props)
1556{
1557 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
1558 D3D12_TextureData *textureData;
1559 HRESULT result;
1560 DXGI_FORMAT textureFormat = SDLPixelFormatToDXGITextureFormat(texture->format, renderer->output_colorspace);
1561 D3D12_RESOURCE_DESC textureDesc;
1562 D3D12_HEAP_PROPERTIES heapProps;
1563 D3D12_SHADER_RESOURCE_VIEW_DESC resourceViewDesc;
1564
1565 if (!rendererData->d3dDevice) {
1566 return SDL_SetError("Device lost and couldn't be recovered");
1567 }
1568
1569 if (textureFormat == DXGI_FORMAT_UNKNOWN) {
1570 return SDL_SetError("%s, An unsupported SDL pixel format (0x%x) was specified", __FUNCTION__, texture->format);
1571 }
1572
1573 textureData = (D3D12_TextureData *)SDL_calloc(1, sizeof(*textureData));
1574 if (!textureData) {
1575 return false;
1576 }
1577 textureData->scaleMode = (texture->scaleMode == SDL_SCALEMODE_NEAREST) ? D3D12_FILTER_MIN_MAG_MIP_POINT : D3D12_FILTER_MIN_MAG_MIP_LINEAR;
1578
1579 texture->internal = textureData;
1580 textureData->mainTextureFormat = textureFormat;
1581
1582 SDL_zero(textureDesc);
1583 textureDesc.Width = texture->w;
1584 textureDesc.Height = texture->h;
1585 textureDesc.MipLevels = 1;
1586 textureDesc.DepthOrArraySize = 1;
1587 textureDesc.Format = textureFormat;
1588 textureDesc.SampleDesc.Count = 1;
1589 textureDesc.SampleDesc.Quality = 0;
1590 textureDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
1591 textureDesc.Flags = D3D12_RESOURCE_FLAG_NONE;
1592
1593 // NV12 textures must have even width and height
1594 if (texture->format == SDL_PIXELFORMAT_NV12 ||
1595 texture->format == SDL_PIXELFORMAT_NV21 ||
1596 texture->format == SDL_PIXELFORMAT_P010) {
1597 textureDesc.Width = (textureDesc.Width + 1) & ~1;
1598 textureDesc.Height = (textureDesc.Height + 1) & ~1;
1599 }
1600 textureData->w = (int)textureDesc.Width;
1601 textureData->h = (int)textureDesc.Height;
1602 if (SDL_COLORSPACETRANSFER(texture->colorspace) == SDL_TRANSFER_CHARACTERISTICS_SRGB) {
1603 textureData->shader = SHADER_RGB;
1604 } else {
1605 textureData->shader = SHADER_ADVANCED;
1606 }
1607
1608 if (texture->access == SDL_TEXTUREACCESS_TARGET) {
1609 textureDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;
1610 }
1611
1612 SDL_zero(heapProps);
1613 heapProps.Type = D3D12_HEAP_TYPE_DEFAULT;
1614 heapProps.CreationNodeMask = 1;
1615 heapProps.VisibleNodeMask = 1;
1616
1617 if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER, &textureData->mainTexture)) {
1618 return false;
1619 }
1620 if (!textureData->mainTexture) {
1621 result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice,
1622 &heapProps,
1623 D3D12_HEAP_FLAG_NONE,
1624 &textureDesc,
1625 D3D12_RESOURCE_STATE_COPY_DEST,
1626 NULL,
1627 D3D_GUID(SDL_IID_ID3D12Resource),
1628 (void **)&textureData->mainTexture);
1629 if (FAILED(result)) {
1630 return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [texture]"), result);
1631 }
1632 }
1633 textureData->mainResourceState = D3D12_RESOURCE_STATE_COPY_DEST;
1634 SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER, textureData->mainTexture);
1635#ifdef SDL_HAVE_YUV
1636 if (texture->format == SDL_PIXELFORMAT_YV12 ||
1637 texture->format == SDL_PIXELFORMAT_IYUV) {
1638 textureData->yuv = true;
1639
1640 textureDesc.Width = (textureDesc.Width + 1) / 2;
1641 textureDesc.Height = (textureDesc.Height + 1) / 2;
1642
1643 if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER, &textureData->mainTextureU)) {
1644 return false;
1645 }
1646 if (!textureData->mainTextureU) {
1647 result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice,
1648 &heapProps,
1649 D3D12_HEAP_FLAG_NONE,
1650 &textureDesc,
1651 D3D12_RESOURCE_STATE_COPY_DEST,
1652 NULL,
1653 D3D_GUID(SDL_IID_ID3D12Resource),
1654 (void **)&textureData->mainTextureU);
1655 if (FAILED(result)) {
1656 return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [texture]"), result);
1657 }
1658 }
1659 textureData->mainResourceStateU = D3D12_RESOURCE_STATE_COPY_DEST;
1660 SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER, textureData->mainTextureU);
1661
1662 if (!GetTextureProperty(create_props, SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER, &textureData->mainTextureV)) {
1663 return false;
1664 }
1665 if (!textureData->mainTextureV) {
1666 result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice,
1667 &heapProps,
1668 D3D12_HEAP_FLAG_NONE,
1669 &textureDesc,
1670 D3D12_RESOURCE_STATE_COPY_DEST,
1671 NULL,
1672 D3D_GUID(SDL_IID_ID3D12Resource),
1673 (void **)&textureData->mainTextureV);
1674 if (FAILED(result)) {
1675 return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [texture]"), result);
1676 }
1677 }
1678 textureData->mainResourceStateV = D3D12_RESOURCE_STATE_COPY_DEST;
1679 SDL_SetPointerProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER, textureData->mainTextureV);
1680
1681 textureData->YCbCr_matrix = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8);
1682 if (!textureData->YCbCr_matrix) {
1683 return SDL_SetError("Unsupported YUV colorspace");
1684 }
1685 }
1686
1687 if (texture->format == SDL_PIXELFORMAT_NV12 ||
1688 texture->format == SDL_PIXELFORMAT_NV21 ||
1689 texture->format == SDL_PIXELFORMAT_P010) {
1690 int bits_per_pixel;
1691
1692 textureData->nv12 = true;
1693
1694 switch (texture->format) {
1695 case SDL_PIXELFORMAT_P010:
1696 bits_per_pixel = 10;
1697 break;
1698 default:
1699 bits_per_pixel = 8;
1700 break;
1701 }
1702 textureData->YCbCr_matrix = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, bits_per_pixel);
1703 if (!textureData->YCbCr_matrix) {
1704 return SDL_SetError("Unsupported YUV colorspace");
1705 }
1706 }
1707#endif // SDL_HAVE_YUV
1708 SDL_zero(resourceViewDesc);
1709 resourceViewDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
1710 resourceViewDesc.Format = SDLPixelFormatToDXGIMainResourceViewFormat(texture->format, renderer->output_colorspace);
1711 resourceViewDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
1712 resourceViewDesc.Texture2D.MipLevels = textureDesc.MipLevels;
1713
1714 textureData->mainSRVIndex = D3D12_GetAvailableSRVIndex(renderer);
1715 D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceView);
1716 textureData->mainTextureResourceView.ptr += textureData->mainSRVIndex * rendererData->srvDescriptorSize;
1717
1718 ID3D12Device1_CreateShaderResourceView(rendererData->d3dDevice,
1719 textureData->mainTexture,
1720 &resourceViewDesc,
1721 textureData->mainTextureResourceView);
1722#ifdef SDL_HAVE_YUV
1723 if (textureData->yuv) {
1724 D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewU);
1725 textureData->mainSRVIndexU = D3D12_GetAvailableSRVIndex(renderer);
1726 textureData->mainTextureResourceViewU.ptr += textureData->mainSRVIndexU * rendererData->srvDescriptorSize;
1727 ID3D12Device1_CreateShaderResourceView(rendererData->d3dDevice,
1728 textureData->mainTextureU,
1729 &resourceViewDesc,
1730 textureData->mainTextureResourceViewU);
1731
1732 D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewV);
1733 textureData->mainSRVIndexV = D3D12_GetAvailableSRVIndex(renderer);
1734 textureData->mainTextureResourceViewV.ptr += textureData->mainSRVIndexV * rendererData->srvDescriptorSize;
1735 ID3D12Device1_CreateShaderResourceView(rendererData->d3dDevice,
1736 textureData->mainTextureV,
1737 &resourceViewDesc,
1738 textureData->mainTextureResourceViewV);
1739 }
1740
1741 if (textureData->nv12) {
1742 D3D12_SHADER_RESOURCE_VIEW_DESC nvResourceViewDesc = resourceViewDesc;
1743
1744 if (texture->format == SDL_PIXELFORMAT_NV12 || texture->format == SDL_PIXELFORMAT_NV21) {
1745 nvResourceViewDesc.Format = DXGI_FORMAT_R8G8_UNORM;
1746 } else if (texture->format == SDL_PIXELFORMAT_P010) {
1747 nvResourceViewDesc.Format = DXGI_FORMAT_R16G16_UNORM;
1748 }
1749 nvResourceViewDesc.Texture2D.PlaneSlice = 1;
1750
1751 D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewNV);
1752 textureData->mainSRVIndexNV = D3D12_GetAvailableSRVIndex(renderer);
1753 textureData->mainTextureResourceViewNV.ptr += textureData->mainSRVIndexNV * rendererData->srvDescriptorSize;
1754 ID3D12Device1_CreateShaderResourceView(rendererData->d3dDevice,
1755 textureData->mainTexture,
1756 &nvResourceViewDesc,
1757 textureData->mainTextureResourceViewNV);
1758 }
1759#endif // SDL_HAVE_YUV
1760
1761 if (texture->access & SDL_TEXTUREACCESS_TARGET) {
1762 D3D12_RENDER_TARGET_VIEW_DESC renderTargetViewDesc;
1763 SDL_zero(renderTargetViewDesc);
1764 renderTargetViewDesc.Format = textureDesc.Format;
1765 renderTargetViewDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
1766 renderTargetViewDesc.Texture2D.MipSlice = 0;
1767
1768 D3D_CALL_RET(rendererData->textureRTVDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureRenderTargetView);
1769 textureData->mainTextureRenderTargetView.ptr += textureData->mainSRVIndex * rendererData->rtvDescriptorSize;
1770
1771 ID3D12Device1_CreateRenderTargetView(rendererData->d3dDevice,
1772 (ID3D12Resource *)textureData->mainTexture,
1773 &renderTargetViewDesc,
1774 textureData->mainTextureRenderTargetView);
1775 }
1776
1777 return true;
1778}
1779
1780static void D3D12_DestroyTexture(SDL_Renderer *renderer,
1781 SDL_Texture *texture)
1782{
1783 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
1784 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
1785
1786 if (!textureData) {
1787 return;
1788 }
1789
1790 /* Because SDL_DestroyTexture might be called while the data is in-flight, we need to issue the batch first
1791 Unfortunately, this means that deleting a lot of textures mid-frame will have poor performance. */
1792 D3D12_IssueBatch(rendererData);
1793
1794 D3D_SAFE_RELEASE(textureData->mainTexture);
1795 D3D_SAFE_RELEASE(textureData->stagingBuffer);
1796 D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndex);
1797#ifdef SDL_HAVE_YUV
1798 D3D_SAFE_RELEASE(textureData->mainTextureU);
1799 D3D_SAFE_RELEASE(textureData->mainTextureV);
1800 if (textureData->yuv) {
1801 D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndexU);
1802 D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndexV);
1803 }
1804 if (textureData->nv12) {
1805 D3D12_FreeSRVIndex(renderer, textureData->mainSRVIndexNV);
1806 }
1807 SDL_free(textureData->pixels);
1808#endif
1809 SDL_free(textureData);
1810 texture->internal = NULL;
1811}
1812
1813static bool D3D12_UpdateTextureInternal(D3D12_RenderData *rendererData, ID3D12Resource *texture, int plane, int x, int y, int w, int h, const void *pixels, int pitch, D3D12_RESOURCE_STATES *resourceState)
1814{
1815 const Uint8 *src;
1816 Uint8 *dst;
1817 UINT length;
1818 HRESULT result;
1819 D3D12_RESOURCE_DESC textureDesc;
1820 D3D12_RESOURCE_DESC uploadDesc;
1821 D3D12_HEAP_PROPERTIES heapProps;
1822 D3D12_PLACED_SUBRESOURCE_FOOTPRINT placedTextureDesc;
1823 D3D12_TEXTURE_COPY_LOCATION srcLocation;
1824 D3D12_TEXTURE_COPY_LOCATION dstLocation;
1825 BYTE *textureMemory;
1826 ID3D12Resource *uploadBuffer;
1827 UINT row, NumRows, RowPitch;
1828 UINT64 RowLength;
1829
1830 // Create an upload buffer, which will be used to write to the main texture.
1831 SDL_zero(textureDesc);
1832 D3D_CALL_RET(texture, GetDesc, &textureDesc);
1833 textureDesc.Width = w;
1834 textureDesc.Height = h;
1835 if (textureDesc.Format == DXGI_FORMAT_NV12 ||
1836 textureDesc.Format == DXGI_FORMAT_P010) {
1837 textureDesc.Width = (textureDesc.Width + 1) & ~1;
1838 textureDesc.Height = (textureDesc.Height + 1) & ~1;
1839 }
1840
1841 SDL_zero(uploadDesc);
1842 uploadDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
1843 uploadDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT;
1844 uploadDesc.Height = 1;
1845 uploadDesc.DepthOrArraySize = 1;
1846 uploadDesc.MipLevels = 1;
1847 uploadDesc.Format = DXGI_FORMAT_UNKNOWN;
1848 uploadDesc.SampleDesc.Count = 1;
1849 uploadDesc.SampleDesc.Quality = 0;
1850 uploadDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
1851 uploadDesc.Flags = D3D12_RESOURCE_FLAG_NONE;
1852
1853 // Figure out how much we need to allocate for the upload buffer
1854 ID3D12Device1_GetCopyableFootprints(rendererData->d3dDevice,
1855 &textureDesc,
1856 plane,
1857 1,
1858 0,
1859 &placedTextureDesc,
1860 &NumRows,
1861 &RowLength,
1862 &uploadDesc.Width);
1863 RowPitch = placedTextureDesc.Footprint.RowPitch;
1864
1865 SDL_zero(heapProps);
1866 heapProps.Type = D3D12_HEAP_TYPE_UPLOAD;
1867 heapProps.CreationNodeMask = 1;
1868 heapProps.VisibleNodeMask = 1;
1869
1870 // Create the upload buffer
1871 result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice,
1872 &heapProps,
1873 D3D12_HEAP_FLAG_NONE,
1874 &uploadDesc,
1875 D3D12_RESOURCE_STATE_GENERIC_READ,
1876 NULL,
1877 D3D_GUID(SDL_IID_ID3D12Resource),
1878 (void **)&rendererData->uploadBuffers[rendererData->currentUploadBuffer]);
1879 if (FAILED(result)) {
1880 return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [create upload buffer]"), result);
1881 }
1882
1883 // Get a write-only pointer to data in the upload buffer:
1884 uploadBuffer = rendererData->uploadBuffers[rendererData->currentUploadBuffer];
1885 result = ID3D12Resource_Map(uploadBuffer,
1886 0,
1887 NULL,
1888 (void **)&textureMemory);
1889 if (FAILED(result)) {
1890 D3D_SAFE_RELEASE(rendererData->uploadBuffers[rendererData->currentUploadBuffer]);
1891 return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [map staging texture]"), result);
1892 }
1893
1894 src = (const Uint8 *)pixels;
1895 dst = textureMemory;
1896 length = (UINT)RowLength;
1897 if (length == (UINT)pitch && length == RowPitch) {
1898 SDL_memcpy(dst, src, (size_t)length * NumRows);
1899 } else {
1900 if (length > (UINT)pitch) {
1901 length = pitch;
1902 }
1903 if (length > RowPitch) {
1904 length = RowPitch;
1905 }
1906 for (row = NumRows; row--; ) {
1907 SDL_memcpy(dst, src, length);
1908 src += pitch;
1909 dst += RowPitch;
1910 }
1911 }
1912
1913 // Commit the changes back to the upload buffer:
1914 ID3D12Resource_Unmap(uploadBuffer, 0, NULL);
1915
1916 // Make sure the destination is in the correct resource state
1917 D3D12_TransitionResource(rendererData, texture, *resourceState, D3D12_RESOURCE_STATE_COPY_DEST);
1918 *resourceState = D3D12_RESOURCE_STATE_COPY_DEST;
1919
1920 SDL_zero(dstLocation);
1921 dstLocation.pResource = texture;
1922 dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
1923 dstLocation.SubresourceIndex = plane;
1924
1925 SDL_zero(srcLocation);
1926 srcLocation.pResource = rendererData->uploadBuffers[rendererData->currentUploadBuffer];
1927 srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
1928 srcLocation.PlacedFootprint = placedTextureDesc;
1929
1930 ID3D12GraphicsCommandList2_CopyTextureRegion(rendererData->commandList,
1931 &dstLocation,
1932 x,
1933 y,
1934 0,
1935 &srcLocation,
1936 NULL);
1937
1938 // Transition the texture to be shader accessible
1939 D3D12_TransitionResource(rendererData, texture, *resourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
1940 *resourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
1941
1942 rendererData->currentUploadBuffer++;
1943 // If we've used up all the upload buffers, we need to issue the batch
1944 if (rendererData->currentUploadBuffer == SDL_D3D12_NUM_UPLOAD_BUFFERS) {
1945 D3D12_IssueBatch(rendererData);
1946 }
1947
1948 return true;
1949}
1950
1951static bool D3D12_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
1952 const SDL_Rect *rect, const void *srcPixels,
1953 int srcPitch)
1954{
1955 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
1956 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
1957
1958 if (!textureData) {
1959 return SDL_SetError("Texture is not currently available");
1960 }
1961
1962 if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 0, rect->x, rect->y, rect->w, rect->h, srcPixels, srcPitch, &textureData->mainResourceState)) {
1963 return false;
1964 }
1965#ifdef SDL_HAVE_YUV
1966 if (textureData->yuv) {
1967 // Skip to the correct offset into the next texture
1968 srcPixels = (const void *)((const Uint8 *)srcPixels + rect->h * srcPitch);
1969
1970 if (!D3D12_UpdateTextureInternal(rendererData, texture->format == SDL_PIXELFORMAT_YV12 ? textureData->mainTextureV : textureData->mainTextureU, 0, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, srcPixels, (srcPitch + 1) / 2, texture->format == SDL_PIXELFORMAT_YV12 ? &textureData->mainResourceStateV : &textureData->mainResourceStateU)) {
1971 return false;
1972 }
1973
1974 // Skip to the correct offset into the next texture
1975 srcPixels = (const void *)((const Uint8 *)srcPixels + ((rect->h + 1) / 2) * ((srcPitch + 1) / 2));
1976 if (!D3D12_UpdateTextureInternal(rendererData, texture->format == SDL_PIXELFORMAT_YV12 ? textureData->mainTextureU : textureData->mainTextureV, 0, rect->x / 2, rect->y / 2, (rect->w + 1) / 2, (rect->h + 1) / 2, srcPixels, (srcPitch + 1) / 2, texture->format == SDL_PIXELFORMAT_YV12 ? &textureData->mainResourceStateU : &textureData->mainResourceStateV)) {
1977 return false;
1978 }
1979 }
1980
1981 if (textureData->nv12) {
1982 // Skip to the correct offset into the next texture
1983 srcPixels = (const void *)((const Uint8 *)srcPixels + rect->h * srcPitch);
1984
1985 if (texture->format == SDL_PIXELFORMAT_P010) {
1986 srcPitch = (srcPitch + 3) & ~3;
1987 } else {
1988 srcPitch = (srcPitch + 1) & ~1;
1989 }
1990 if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 1, rect->x, rect->y, (rect->w + 1) & ~1, (rect->h + 1) & ~1, srcPixels, srcPitch, &textureData->mainResourceState)) {
1991 return false;
1992 }
1993 }
1994#endif // SDL_HAVE_YUV
1995 return true;
1996}
1997
1998#ifdef SDL_HAVE_YUV
1999static bool D3D12_UpdateTextureYUV(SDL_Renderer *renderer, SDL_Texture *texture,
2000 const SDL_Rect *rect,
2001 const Uint8 *Yplane, int Ypitch,
2002 const Uint8 *Uplane, int Upitch,
2003 const Uint8 *Vplane, int Vpitch)
2004{
2005 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2006 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
2007
2008 if (!textureData) {
2009 return SDL_SetError("Texture is not currently available");
2010 }
2011
2012 if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 0, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch, &textureData->mainResourceState)) {
2013 return false;
2014 }
2015 if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTextureU, 0, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Uplane, Upitch, &textureData->mainResourceStateU)) {
2016 return false;
2017 }
2018 if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTextureV, 0, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Vplane, Vpitch, &textureData->mainResourceStateV)) {
2019 return false;
2020 }
2021 return true;
2022}
2023
2024static bool D3D12_UpdateTextureNV(SDL_Renderer *renderer, SDL_Texture *texture,
2025 const SDL_Rect *rect,
2026 const Uint8 *Yplane, int Ypitch,
2027 const Uint8 *UVplane, int UVpitch)
2028{
2029 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2030 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
2031
2032 if (!textureData) {
2033 return SDL_SetError("Texture is not currently available");
2034 }
2035
2036 if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 0, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch, &textureData->mainResourceState)) {
2037 return false;
2038 }
2039
2040 if (!D3D12_UpdateTextureInternal(rendererData, textureData->mainTexture, 1, rect->x, rect->y, rect->w, rect->h, UVplane, UVpitch, &textureData->mainResourceState)) {
2041 return false;
2042 }
2043 return true;
2044}
2045#endif
2046
2047static bool D3D12_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
2048 const SDL_Rect *rect, void **pixels, int *pitch)
2049{
2050 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2051 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
2052 HRESULT result = S_OK;
2053
2054 D3D12_RESOURCE_DESC textureDesc;
2055 D3D12_RESOURCE_DESC uploadDesc;
2056 D3D12_HEAP_PROPERTIES heapProps;
2057 D3D12_SUBRESOURCE_FOOTPRINT pitchedDesc;
2058 BYTE *textureMemory;
2059 int bpp;
2060
2061 if (!textureData) {
2062 return SDL_SetError("Texture is not currently available");
2063 }
2064#ifdef SDL_HAVE_YUV
2065 if (textureData->yuv || textureData->nv12) {
2066 // It's more efficient to upload directly...
2067 if (!textureData->pixels) {
2068 textureData->pitch = texture->w;
2069 textureData->pixels = (Uint8 *)SDL_malloc((texture->h * textureData->pitch * 3) / 2);
2070 if (!textureData->pixels) {
2071 return false;
2072 }
2073 }
2074 textureData->lockedRect = *rect;
2075 *pixels =
2076 (void *)(textureData->pixels + rect->y * textureData->pitch +
2077 rect->x * SDL_BYTESPERPIXEL(texture->format));
2078 *pitch = textureData->pitch;
2079 return true;
2080 }
2081#endif
2082 if (textureData->stagingBuffer) {
2083 return SDL_SetError("texture is already locked");
2084 }
2085
2086 // Create an upload buffer, which will be used to write to the main texture.
2087 SDL_zero(textureDesc);
2088 D3D_CALL_RET(textureData->mainTexture, GetDesc, &textureDesc);
2089 textureDesc.Width = rect->w;
2090 textureDesc.Height = rect->h;
2091
2092 SDL_zero(uploadDesc);
2093 uploadDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
2094 uploadDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT;
2095 uploadDesc.Height = 1;
2096 uploadDesc.DepthOrArraySize = 1;
2097 uploadDesc.MipLevels = 1;
2098 uploadDesc.Format = DXGI_FORMAT_UNKNOWN;
2099 uploadDesc.SampleDesc.Count = 1;
2100 uploadDesc.SampleDesc.Quality = 0;
2101 uploadDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
2102 uploadDesc.Flags = D3D12_RESOURCE_FLAG_NONE;
2103
2104 // Figure out how much we need to allocate for the upload buffer
2105 ID3D12Device1_GetCopyableFootprints(rendererData->d3dDevice,
2106 &textureDesc,
2107 0,
2108 1,
2109 0,
2110 NULL,
2111 NULL,
2112 NULL,
2113 &uploadDesc.Width);
2114
2115 SDL_zero(heapProps);
2116 heapProps.Type = D3D12_HEAP_TYPE_UPLOAD;
2117 heapProps.CreationNodeMask = 1;
2118 heapProps.VisibleNodeMask = 1;
2119
2120 // Create the upload buffer
2121 result = ID3D12Device1_CreateCommittedResource(rendererData->d3dDevice,
2122 &heapProps,
2123 D3D12_HEAP_FLAG_NONE,
2124 &uploadDesc,
2125 D3D12_RESOURCE_STATE_GENERIC_READ,
2126 NULL,
2127 D3D_GUID(SDL_IID_ID3D12Resource),
2128 (void **)&textureData->stagingBuffer);
2129 if (FAILED(result)) {
2130 return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateCommittedResource [create upload buffer]"), result);
2131 }
2132
2133 // Get a write-only pointer to data in the upload buffer:
2134 result = ID3D12Resource_Map(textureData->stagingBuffer,
2135 0,
2136 NULL,
2137 (void **)&textureMemory);
2138 if (FAILED(result)) {
2139 D3D_SAFE_RELEASE(rendererData->uploadBuffers[rendererData->currentUploadBuffer]);
2140 return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [map staging texture]"), result);
2141 }
2142
2143 SDL_zero(pitchedDesc);
2144 pitchedDesc.Format = textureDesc.Format;
2145 pitchedDesc.Width = rect->w;
2146 pitchedDesc.Height = rect->h;
2147 pitchedDesc.Depth = 1;
2148 if (pitchedDesc.Format == DXGI_FORMAT_R8_UNORM) {
2149 bpp = 1;
2150 } else {
2151 bpp = 4;
2152 }
2153 pitchedDesc.RowPitch = D3D12_Align(rect->w * bpp, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
2154
2155 /* Make note of where the staging texture will be written to
2156 * (on a call to SDL_UnlockTexture):
2157 */
2158 textureData->lockedRect = *rect;
2159
2160 /* Make sure the caller has information on the texture's pixel buffer,
2161 * then return:
2162 */
2163 *pixels = textureMemory;
2164 *pitch = pitchedDesc.RowPitch;
2165 return true;
2166}
2167
2168static void D3D12_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
2169{
2170 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2171 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
2172
2173 D3D12_RESOURCE_DESC textureDesc;
2174 D3D12_SUBRESOURCE_FOOTPRINT pitchedDesc;
2175 D3D12_PLACED_SUBRESOURCE_FOOTPRINT placedTextureDesc;
2176 D3D12_TEXTURE_COPY_LOCATION srcLocation;
2177 D3D12_TEXTURE_COPY_LOCATION dstLocation;
2178 int bpp;
2179
2180 if (!textureData) {
2181 return;
2182 }
2183#ifdef SDL_HAVE_YUV
2184 if (textureData->yuv || textureData->nv12) {
2185 const SDL_Rect *rect = &textureData->lockedRect;
2186 void *pixels =
2187 (void *)(textureData->pixels + rect->y * textureData->pitch +
2188 rect->x * SDL_BYTESPERPIXEL(texture->format));
2189 D3D12_UpdateTexture(renderer, texture, rect, pixels, textureData->pitch);
2190 return;
2191 }
2192#endif
2193 // Commit the pixel buffer's changes back to the staging texture:
2194 ID3D12Resource_Unmap(textureData->stagingBuffer, 0, NULL);
2195
2196 SDL_zero(textureDesc);
2197 D3D_CALL_RET(textureData->mainTexture, GetDesc, &textureDesc);
2198 textureDesc.Width = textureData->lockedRect.w;
2199 textureDesc.Height = textureData->lockedRect.h;
2200
2201 SDL_zero(pitchedDesc);
2202 pitchedDesc.Format = textureDesc.Format;
2203 pitchedDesc.Width = (UINT)textureDesc.Width;
2204 pitchedDesc.Height = textureDesc.Height;
2205 pitchedDesc.Depth = 1;
2206 if (pitchedDesc.Format == DXGI_FORMAT_R8_UNORM) {
2207 bpp = 1;
2208 } else {
2209 bpp = 4;
2210 }
2211 pitchedDesc.RowPitch = D3D12_Align(textureData->lockedRect.w * bpp, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
2212
2213 SDL_zero(placedTextureDesc);
2214 placedTextureDesc.Offset = 0;
2215 placedTextureDesc.Footprint = pitchedDesc;
2216
2217 D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_COPY_DEST);
2218 textureData->mainResourceState = D3D12_RESOURCE_STATE_COPY_DEST;
2219
2220 SDL_zero(dstLocation);
2221 dstLocation.pResource = textureData->mainTexture;
2222 dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
2223 dstLocation.SubresourceIndex = 0;
2224
2225 SDL_zero(srcLocation);
2226 srcLocation.pResource = textureData->stagingBuffer;
2227 srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
2228 srcLocation.PlacedFootprint = placedTextureDesc;
2229
2230 ID3D12GraphicsCommandList2_CopyTextureRegion(rendererData->commandList,
2231 &dstLocation,
2232 textureData->lockedRect.x,
2233 textureData->lockedRect.y,
2234 0,
2235 &srcLocation,
2236 NULL);
2237
2238 // Transition the texture to be shader accessible
2239 D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
2240 textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
2241
2242 // Execute the command list before releasing the staging buffer
2243 D3D12_IssueBatch(rendererData);
2244 D3D_SAFE_RELEASE(textureData->stagingBuffer);
2245}
2246
2247static void D3D12_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode)
2248{
2249 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
2250
2251 if (!textureData) {
2252 return;
2253 }
2254
2255 textureData->scaleMode = (scaleMode == SDL_SCALEMODE_NEAREST) ? D3D12_FILTER_MIN_MAG_MIP_POINT : D3D12_FILTER_MIN_MAG_MIP_LINEAR;
2256}
2257
2258static bool D3D12_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
2259{
2260 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2261 D3D12_TextureData *textureData = NULL;
2262
2263 if (!texture) {
2264 if (rendererData->textureRenderTarget) {
2265 D3D12_TransitionResource(rendererData,
2266 rendererData->textureRenderTarget->mainTexture,
2267 rendererData->textureRenderTarget->mainResourceState,
2268 D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
2269 rendererData->textureRenderTarget->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
2270 }
2271 rendererData->textureRenderTarget = NULL;
2272 return true;
2273 }
2274
2275 textureData = (D3D12_TextureData *)texture->internal;
2276
2277 if (!textureData->mainTextureRenderTargetView.ptr) {
2278 return SDL_SetError("specified texture is not a render target");
2279 }
2280
2281 rendererData->textureRenderTarget = textureData;
2282 D3D12_TransitionResource(rendererData,
2283 rendererData->textureRenderTarget->mainTexture,
2284 rendererData->textureRenderTarget->mainResourceState,
2285 D3D12_RESOURCE_STATE_RENDER_TARGET);
2286 rendererData->textureRenderTarget->mainResourceState = D3D12_RESOURCE_STATE_RENDER_TARGET;
2287
2288 return true;
2289}
2290
2291static bool D3D12_QueueNoOp(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
2292{
2293 return true; // nothing to do in this backend.
2294}
2295
2296static bool D3D12_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count)
2297{
2298 D3D12_VertexPositionColor *verts = (D3D12_VertexPositionColor *)SDL_AllocateRenderVertices(renderer, count * sizeof(D3D12_VertexPositionColor), 0, &cmd->data.draw.first);
2299 int i;
2300 SDL_FColor color = cmd->data.draw.color;
2301 bool convert_color = SDL_RenderingLinearSpace(renderer);
2302
2303 if (!verts) {
2304 return false;
2305 }
2306
2307 cmd->data.draw.count = count;
2308
2309 if (convert_color) {
2310 SDL_ConvertToLinear(&color);
2311 }
2312
2313 for (i = 0; i < count; i++) {
2314 verts->pos.x = points[i].x + 0.5f;
2315 verts->pos.y = points[i].y + 0.5f;
2316 verts->tex.x = 0.0f;
2317 verts->tex.y = 0.0f;
2318 verts->color = color;
2319 verts++;
2320 }
2321
2322 return true;
2323}
2324
2325static bool D3D12_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture,
2326 const float *xy, int xy_stride, const SDL_FColor *color, int color_stride, const float *uv, int uv_stride,
2327 int num_vertices, const void *indices, int num_indices, int size_indices,
2328 float scale_x, float scale_y)
2329{
2330 int i;
2331 int count = indices ? num_indices : num_vertices;
2332 D3D12_VertexPositionColor *verts = (D3D12_VertexPositionColor *)SDL_AllocateRenderVertices(renderer, count * sizeof(D3D12_VertexPositionColor), 0, &cmd->data.draw.first);
2333 bool convert_color = SDL_RenderingLinearSpace(renderer);
2334 D3D12_TextureData *textureData = texture ? (D3D12_TextureData *)texture->internal : NULL;
2335 float u_scale = textureData ? (float)texture->w / textureData->w : 0.0f;
2336 float v_scale = textureData ? (float)texture->h / textureData->h : 0.0f;
2337
2338 if (!verts) {
2339 return false;
2340 }
2341
2342 cmd->data.draw.count = count;
2343 size_indices = indices ? size_indices : 0;
2344
2345 for (i = 0; i < count; i++) {
2346 int j;
2347 float *xy_;
2348 if (size_indices == 4) {
2349 j = ((const Uint32 *)indices)[i];
2350 } else if (size_indices == 2) {
2351 j = ((const Uint16 *)indices)[i];
2352 } else if (size_indices == 1) {
2353 j = ((const Uint8 *)indices)[i];
2354 } else {
2355 j = i;
2356 }
2357
2358 xy_ = (float *)((char *)xy + j * xy_stride);
2359
2360 verts->pos.x = xy_[0] * scale_x;
2361 verts->pos.y = xy_[1] * scale_y;
2362 verts->color = *(SDL_FColor *)((char *)color + j * color_stride);
2363 if (convert_color) {
2364 SDL_ConvertToLinear(&verts->color);
2365 }
2366
2367 if (texture) {
2368 float *uv_ = (float *)((char *)uv + j * uv_stride);
2369 verts->tex.x = uv_[0] * u_scale;
2370 verts->tex.y = uv_[1] * v_scale;
2371 } else {
2372 verts->tex.x = 0.0f;
2373 verts->tex.y = 0.0f;
2374 }
2375
2376 verts += 1;
2377 }
2378 return true;
2379}
2380
2381static bool D3D12_UpdateVertexBuffer(SDL_Renderer *renderer,
2382 const void *vertexData, size_t dataSizeInBytes)
2383{
2384 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2385 HRESULT result = S_OK;
2386 const int vbidx = rendererData->currentVertexBuffer;
2387 UINT8 *vertexBufferData = NULL;
2388 D3D12_RANGE range;
2389 ID3D12Resource *vertexBuffer;
2390
2391 range.Begin = 0;
2392 range.End = 0;
2393
2394 if (dataSizeInBytes == 0) {
2395 return true; // nothing to do.
2396 }
2397
2398 if (rendererData->issueBatch) {
2399 if (FAILED(D3D12_IssueBatch(rendererData))) {
2400 return SDL_SetError("Failed to issue intermediate batch");
2401 }
2402 }
2403
2404 // If the existing vertex buffer isn't big enough, we need to recreate a big enough one
2405 if (dataSizeInBytes > rendererData->vertexBuffers[vbidx].size) {
2406 D3D12_CreateVertexBuffer(rendererData, vbidx, dataSizeInBytes);
2407 }
2408
2409 vertexBuffer = rendererData->vertexBuffers[vbidx].resource;
2410 result = ID3D12Resource_Map(vertexBuffer, 0, &range, (void **)&vertexBufferData);
2411 if (FAILED(result)) {
2412 return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [vertex buffer]"), result);
2413 }
2414 SDL_memcpy(vertexBufferData, vertexData, dataSizeInBytes);
2415 ID3D12Resource_Unmap(vertexBuffer, 0, NULL);
2416
2417 rendererData->vertexBuffers[vbidx].view.SizeInBytes = (UINT)dataSizeInBytes;
2418
2419 ID3D12GraphicsCommandList2_IASetVertexBuffers(rendererData->commandList, 0, 1, &rendererData->vertexBuffers[vbidx].view);
2420
2421 rendererData->currentVertexBuffer++;
2422 if (rendererData->currentVertexBuffer >= SDL_D3D12_NUM_VERTEX_BUFFERS) {
2423 rendererData->currentVertexBuffer = 0;
2424 rendererData->issueBatch = true;
2425 }
2426
2427 return true;
2428}
2429
2430static bool D3D12_UpdateViewport(SDL_Renderer *renderer)
2431{
2432 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
2433 const SDL_Rect *viewport = &data->currentViewport;
2434 Float4X4 projection;
2435 Float4X4 view;
2436 SDL_FRect orientationAlignedViewport;
2437 BOOL swapDimensions;
2438 D3D12_VIEWPORT d3dviewport;
2439 const int rotation = D3D12_GetRotationForCurrentRenderTarget(renderer);
2440
2441 if (viewport->w == 0 || viewport->h == 0) {
2442 /* If the viewport is empty, assume that it is because
2443 * SDL_CreateRenderer is calling it, and will call it again later
2444 * with a non-empty viewport.
2445 */
2446 // SDL_Log("%s, no viewport was set!", __FUNCTION__);
2447 return false;
2448 }
2449
2450 /* Make sure the SDL viewport gets rotated to that of the physical display's rotation.
2451 * Keep in mind here that the Y-axis will be been inverted (from Direct3D's
2452 * default coordinate system) so rotations will be done in the opposite
2453 * direction of the DXGI_MODE_ROTATION enumeration.
2454 */
2455 switch (rotation) {
2456 case DXGI_MODE_ROTATION_IDENTITY:
2457 projection = MatrixIdentity();
2458 break;
2459 case DXGI_MODE_ROTATION_ROTATE270:
2460 projection = MatrixRotationZ(SDL_PI_F * 0.5f);
2461 break;
2462 case DXGI_MODE_ROTATION_ROTATE180:
2463 projection = MatrixRotationZ(SDL_PI_F);
2464 break;
2465 case DXGI_MODE_ROTATION_ROTATE90:
2466 projection = MatrixRotationZ(-SDL_PI_F * 0.5f);
2467 break;
2468 default:
2469 return SDL_SetError("An unknown DisplayOrientation is being used");
2470 }
2471
2472 // Update the view matrix
2473 SDL_zero(view);
2474 view.m[0][0] = 2.0f / viewport->w;
2475 view.m[1][1] = -2.0f / viewport->h;
2476 view.m[2][2] = 1.0f;
2477 view.m[3][0] = -1.0f;
2478 view.m[3][1] = 1.0f;
2479 view.m[3][3] = 1.0f;
2480
2481 /* Combine the projection + view matrix together now, as both only get
2482 * set here (as of this writing, on Dec 26, 2013). When done, store it
2483 * for eventual transfer to the GPU.
2484 */
2485 data->vertexShaderConstantsData.projectionAndView = MatrixMultiply(
2486 view,
2487 projection);
2488
2489 /* Update the Direct3D viewport, which seems to be aligned to the
2490 * swap buffer's coordinate space, which is always in either
2491 * a landscape mode, for all Windows 8/RT devices, or a portrait mode,
2492 * for Windows Phone devices.
2493 */
2494 swapDimensions = D3D12_IsDisplayRotated90Degrees((DXGI_MODE_ROTATION)rotation);
2495 if (swapDimensions) {
2496 orientationAlignedViewport.x = (float)viewport->y;
2497 orientationAlignedViewport.y = (float)viewport->x;
2498 orientationAlignedViewport.w = (float)viewport->h;
2499 orientationAlignedViewport.h = (float)viewport->w;
2500 } else {
2501 orientationAlignedViewport.x = (float)viewport->x;
2502 orientationAlignedViewport.y = (float)viewport->y;
2503 orientationAlignedViewport.w = (float)viewport->w;
2504 orientationAlignedViewport.h = (float)viewport->h;
2505 }
2506
2507 d3dviewport.TopLeftX = orientationAlignedViewport.x;
2508 d3dviewport.TopLeftY = orientationAlignedViewport.y;
2509 d3dviewport.Width = orientationAlignedViewport.w;
2510 d3dviewport.Height = orientationAlignedViewport.h;
2511 d3dviewport.MinDepth = 0.0f;
2512 d3dviewport.MaxDepth = 1.0f;
2513 // SDL_Log("%s: D3D viewport = {%f,%f,%f,%f}", __FUNCTION__, d3dviewport.TopLeftX, d3dviewport.TopLeftY, d3dviewport.Width, d3dviewport.Height);
2514 ID3D12GraphicsCommandList_RSSetViewports(data->commandList, 1, &d3dviewport);
2515
2516 data->viewportDirty = false;
2517
2518 return true;
2519}
2520
2521static void D3D12_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const SDL_Texture *texture, D3D12_PixelShaderConstants *constants)
2522{
2523 float output_headroom;
2524
2525 SDL_zerop(constants);
2526
2527 constants->scRGB_output = (float)SDL_RenderingLinearSpace(renderer);
2528 constants->color_scale = cmd->data.draw.color_scale;
2529
2530 if (texture) {
2531 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
2532
2533 switch (texture->format) {
2534 case SDL_PIXELFORMAT_YV12:
2535 case SDL_PIXELFORMAT_IYUV:
2536 constants->texture_type = TEXTURETYPE_YUV;
2537 constants->input_type = INPUTTYPE_SRGB;
2538 break;
2539 case SDL_PIXELFORMAT_NV12:
2540 constants->texture_type = TEXTURETYPE_NV12;
2541 constants->input_type = INPUTTYPE_SRGB;
2542 break;
2543 case SDL_PIXELFORMAT_NV21:
2544 constants->texture_type = TEXTURETYPE_NV21;
2545 constants->input_type = INPUTTYPE_SRGB;
2546 break;
2547 case SDL_PIXELFORMAT_P010:
2548 constants->texture_type = TEXTURETYPE_NV12;
2549 constants->input_type = INPUTTYPE_HDR10;
2550 break;
2551 default:
2552 constants->texture_type = TEXTURETYPE_RGB;
2553 if (texture->colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
2554 constants->input_type = INPUTTYPE_SCRGB;
2555 } else if (texture->colorspace == SDL_COLORSPACE_HDR10) {
2556 constants->input_type = INPUTTYPE_HDR10;
2557 } else {
2558 // The sampler will convert from sRGB to linear on load if working in linear colorspace
2559 constants->input_type = INPUTTYPE_UNSPECIFIED;
2560 }
2561 break;
2562 }
2563
2564 constants->sdr_white_point = texture->SDR_white_point;
2565
2566 if (renderer->target) {
2567 output_headroom = renderer->target->HDR_headroom;
2568 } else {
2569 output_headroom = renderer->HDR_headroom;
2570 }
2571
2572 if (texture->HDR_headroom > output_headroom) {
2573 constants->tonemap_method = TONEMAP_CHROME;
2574 constants->tonemap_factor1 = (output_headroom / (texture->HDR_headroom * texture->HDR_headroom));
2575 constants->tonemap_factor2 = (1.0f / output_headroom);
2576 }
2577
2578 if (textureData->YCbCr_matrix) {
2579 SDL_memcpy(constants->YCbCr_matrix, textureData->YCbCr_matrix, sizeof(constants->YCbCr_matrix));
2580 }
2581 }
2582}
2583
2584static bool D3D12_SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, D3D12_Shader shader, const D3D12_PixelShaderConstants *shader_constants,
2585 D3D12_PRIMITIVE_TOPOLOGY_TYPE topology,
2586 const int numShaderResources, D3D12_CPU_DESCRIPTOR_HANDLE *shaderResources,
2587 D3D12_CPU_DESCRIPTOR_HANDLE *sampler, const Float4X4 *matrix)
2588
2589{
2590 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2591 const Float4X4 *newmatrix = matrix ? matrix : &rendererData->identity;
2592 D3D12_CPU_DESCRIPTOR_HANDLE renderTargetView = D3D12_GetCurrentRenderTargetView(renderer);
2593 const SDL_BlendMode blendMode = cmd->data.draw.blend;
2594 bool updateSubresource = false;
2595 int i;
2596 D3D12_CPU_DESCRIPTOR_HANDLE firstShaderResource;
2597 DXGI_FORMAT rtvFormat = rendererData->renderTargetFormat;
2598 D3D12_PipelineState *currentPipelineState = rendererData->currentPipelineState;;
2599 D3D12_PixelShaderConstants solid_constants;
2600
2601 if (rendererData->textureRenderTarget) {
2602 rtvFormat = rendererData->textureRenderTarget->mainTextureFormat;
2603 }
2604
2605 // See if we need to change the pipeline state
2606 if (!currentPipelineState ||
2607 currentPipelineState->shader != shader ||
2608 currentPipelineState->blendMode != blendMode ||
2609 currentPipelineState->topology != topology ||
2610 currentPipelineState->rtvFormat != rtvFormat) {
2611
2612 /* Find the matching pipeline.
2613 NOTE: Although it may seem inefficient to linearly search through ~450 pipelines
2614 to find the correct one, in profiling this doesn't come up at all.
2615 It's unlikely that using a hash table would affect performance a measurable amount unless
2616 it's a degenerate case that's changing the pipeline state dozens of times per frame.
2617 */
2618 currentPipelineState = NULL;
2619 for (i = 0; i < rendererData->pipelineStateCount; ++i) {
2620 D3D12_PipelineState *candidatePiplineState = &rendererData->pipelineStates[i];
2621 if (candidatePiplineState->shader == shader &&
2622 candidatePiplineState->blendMode == blendMode &&
2623 candidatePiplineState->topology == topology &&
2624 candidatePiplineState->rtvFormat == rtvFormat) {
2625 currentPipelineState = candidatePiplineState;
2626 break;
2627 }
2628 }
2629
2630 // If we didn't find a match, create a new one -- it must mean the blend mode is non-standard
2631 if (!currentPipelineState) {
2632 currentPipelineState = D3D12_CreatePipelineState(renderer, shader, blendMode, topology, rtvFormat);
2633 }
2634
2635 if (!currentPipelineState) {
2636 // The error has been set inside D3D12_CreatePipelineState()
2637 return false;
2638 }
2639
2640 ID3D12GraphicsCommandList2_SetPipelineState(rendererData->commandList, currentPipelineState->pipelineState);
2641 ID3D12GraphicsCommandList2_SetGraphicsRootSignature(rendererData->commandList,
2642 rendererData->rootSignatures[D3D12_GetRootSignatureType(currentPipelineState->shader)]);
2643 // When we change these we will need to re-upload the constant buffer and reset any descriptors
2644 updateSubresource = true;
2645 rendererData->currentSampler.ptr = 0;
2646 rendererData->currentShaderResource.ptr = 0;
2647 rendererData->currentPipelineState = currentPipelineState;
2648 }
2649
2650 if (renderTargetView.ptr != rendererData->currentRenderTargetView.ptr) {
2651 ID3D12GraphicsCommandList2_OMSetRenderTargets(rendererData->commandList, 1, &renderTargetView, FALSE, NULL);
2652 rendererData->currentRenderTargetView = renderTargetView;
2653 }
2654
2655 if (rendererData->viewportDirty) {
2656 if (D3D12_UpdateViewport(renderer)) {
2657 // vertexShaderConstantsData.projectionAndView has changed
2658 updateSubresource = true;
2659 }
2660 }
2661
2662 if (rendererData->cliprectDirty) {
2663 D3D12_RECT scissorRect;
2664 if (!D3D12_GetViewportAlignedD3DRect(renderer, &rendererData->currentCliprect, &scissorRect, TRUE)) {
2665 // D3D12_GetViewportAlignedD3DRect will have set the SDL error
2666 return false;
2667 }
2668 ID3D12GraphicsCommandList2_RSSetScissorRects(rendererData->commandList, 1, &scissorRect);
2669 rendererData->cliprectDirty = false;
2670 }
2671
2672 if (numShaderResources > 0) {
2673 firstShaderResource = shaderResources[0];
2674 } else {
2675 firstShaderResource.ptr = 0;
2676 }
2677 if (firstShaderResource.ptr != rendererData->currentShaderResource.ptr) {
2678 for (i = 0; i < numShaderResources; ++i) {
2679 D3D12_GPU_DESCRIPTOR_HANDLE GPUHandle = D3D12_CPUtoGPUHandle(rendererData->srvDescriptorHeap, shaderResources[i]);
2680 ID3D12GraphicsCommandList2_SetGraphicsRootDescriptorTable(rendererData->commandList, i + 2, GPUHandle);
2681 }
2682 rendererData->currentShaderResource.ptr = firstShaderResource.ptr;
2683 }
2684
2685 if (sampler && sampler->ptr != rendererData->currentSampler.ptr) {
2686 D3D12_GPU_DESCRIPTOR_HANDLE GPUHandle = D3D12_CPUtoGPUHandle(rendererData->samplerDescriptorHeap, *sampler);
2687 UINT tableIndex = 0;
2688
2689 // Figure out the correct sampler descriptor table index based on the type of shader
2690 switch (shader) {
2691 case SHADER_RGB:
2692 tableIndex = 3;
2693 break;
2694 case SHADER_ADVANCED:
2695 tableIndex = 5;
2696 break;
2697 default:
2698 return SDL_SetError("[direct3d12] Trying to set a sampler for a shader which doesn't have one");
2699 break;
2700 }
2701
2702 ID3D12GraphicsCommandList2_SetGraphicsRootDescriptorTable(rendererData->commandList, tableIndex, GPUHandle);
2703 rendererData->currentSampler = *sampler;
2704 }
2705
2706 if (updateSubresource == true || SDL_memcmp(&rendererData->vertexShaderConstantsData.model, newmatrix, sizeof(*newmatrix)) != 0) {
2707 SDL_memcpy(&rendererData->vertexShaderConstantsData.model, newmatrix, sizeof(*newmatrix));
2708 ID3D12GraphicsCommandList2_SetGraphicsRoot32BitConstants(rendererData->commandList,
2709 0,
2710 32,
2711 &rendererData->vertexShaderConstantsData,
2712 0);
2713 }
2714
2715 if (!shader_constants) {
2716 D3D12_SetupShaderConstants(renderer, cmd, NULL, &solid_constants);
2717 shader_constants = &solid_constants;
2718 }
2719
2720 if (updateSubresource == true ||
2721 SDL_memcmp(shader_constants, &currentPipelineState->shader_constants, sizeof(*shader_constants)) != 0) {
2722 ID3D12GraphicsCommandList2_SetGraphicsRoot32BitConstants(rendererData->commandList,
2723 1,
2724 sizeof(*shader_constants) / sizeof(float),
2725 shader_constants,
2726 0);
2727
2728 SDL_memcpy(&currentPipelineState->shader_constants, shader_constants, sizeof(*shader_constants));
2729 }
2730
2731 return true;
2732}
2733
2734static bool D3D12_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, const Float4X4 *matrix)
2735{
2736 SDL_Texture *texture = cmd->data.draw.texture;
2737 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2738 D3D12_TextureData *textureData = (D3D12_TextureData *)texture->internal;
2739 D3D12_CPU_DESCRIPTOR_HANDLE *textureSampler;
2740 D3D12_PixelShaderConstants constants;
2741
2742 if (!textureData) {
2743 return SDL_SetError("Texture is not currently available");
2744 }
2745
2746 D3D12_SetupShaderConstants(renderer, cmd, texture, &constants);
2747
2748 switch (textureData->scaleMode) {
2749 case D3D12_FILTER_MIN_MAG_MIP_POINT:
2750 switch (cmd->data.draw.texture_address_mode) {
2751 case SDL_TEXTURE_ADDRESS_CLAMP:
2752 textureSampler = &rendererData->samplers[D3D12_SAMPLER_NEAREST_CLAMP];
2753 break;
2754 case SDL_TEXTURE_ADDRESS_WRAP:
2755 textureSampler = &rendererData->samplers[D3D12_SAMPLER_NEAREST_WRAP];
2756 break;
2757 default:
2758 return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode);
2759 }
2760 break;
2761 case D3D12_FILTER_MIN_MAG_MIP_LINEAR:
2762 switch (cmd->data.draw.texture_address_mode) {
2763 case SDL_TEXTURE_ADDRESS_CLAMP:
2764 textureSampler = &rendererData->samplers[D3D12_SAMPLER_LINEAR_CLAMP];
2765 break;
2766 case SDL_TEXTURE_ADDRESS_WRAP:
2767 textureSampler = &rendererData->samplers[D3D12_SAMPLER_LINEAR_WRAP];
2768 break;
2769 default:
2770 return SDL_SetError("Unknown texture address mode: %d", cmd->data.draw.texture_address_mode);
2771 }
2772 break;
2773 default:
2774 return SDL_SetError("Unknown scale mode: %d", textureData->scaleMode);
2775 }
2776#ifdef SDL_HAVE_YUV
2777 if (textureData->yuv) {
2778 D3D12_CPU_DESCRIPTOR_HANDLE shaderResources[3];
2779
2780 shaderResources[0] = textureData->mainTextureResourceView;
2781 shaderResources[1] = textureData->mainTextureResourceViewU;
2782 shaderResources[2] = textureData->mainTextureResourceViewV;
2783
2784 // Make sure each texture is in the correct state to be accessed by the pixel shader.
2785 D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
2786 textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
2787 D3D12_TransitionResource(rendererData, textureData->mainTextureU, textureData->mainResourceStateU, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
2788 textureData->mainResourceStateU = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
2789 D3D12_TransitionResource(rendererData, textureData->mainTextureV, textureData->mainResourceStateV, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
2790 textureData->mainResourceStateV = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
2791
2792 return D3D12_SetDrawState(renderer, cmd, textureData->shader, &constants, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, SDL_arraysize(shaderResources), shaderResources, textureSampler, matrix);
2793 } else if (textureData->nv12) {
2794 D3D12_CPU_DESCRIPTOR_HANDLE shaderResources[2];
2795
2796 shaderResources[0] = textureData->mainTextureResourceView;
2797 shaderResources[1] = textureData->mainTextureResourceViewNV;
2798
2799 // Make sure each texture is in the correct state to be accessed by the pixel shader.
2800 D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
2801 textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
2802
2803 return D3D12_SetDrawState(renderer, cmd, textureData->shader, &constants, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, SDL_arraysize(shaderResources), shaderResources, textureSampler, matrix);
2804 }
2805#endif // SDL_HAVE_YUV
2806 D3D12_TransitionResource(rendererData, textureData->mainTexture, textureData->mainResourceState, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
2807 textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
2808 return D3D12_SetDrawState(renderer, cmd, textureData->shader, &constants, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, 1, &textureData->mainTextureResourceView, textureSampler, matrix);
2809}
2810
2811static void D3D12_DrawPrimitives(SDL_Renderer *renderer, D3D12_PRIMITIVE_TOPOLOGY primitiveTopology, const size_t vertexStart, const size_t vertexCount)
2812{
2813 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2814 ID3D12GraphicsCommandList2_IASetPrimitiveTopology(rendererData->commandList, primitiveTopology);
2815 ID3D12GraphicsCommandList2_DrawInstanced(rendererData->commandList, (UINT)vertexCount, 1, (UINT)vertexStart, 0);
2816}
2817
2818static void D3D12_InvalidateCachedState(SDL_Renderer *renderer)
2819{
2820 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
2821 data->currentRenderTargetView.ptr = 0;
2822 data->currentShaderResource.ptr = 0;
2823 data->currentSampler.ptr = 0;
2824 data->cliprectDirty = true;
2825 data->viewportDirty = true;
2826}
2827
2828static bool D3D12_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize)
2829{
2830 D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->internal;
2831 const int viewportRotation = D3D12_GetRotationForCurrentRenderTarget(renderer);
2832
2833 if (!rendererData->d3dDevice) {
2834 return SDL_SetError("Device lost and couldn't be recovered");
2835 }
2836
2837 if (rendererData->pixelSizeChanged) {
2838 D3D12_UpdateForWindowSizeChange(renderer);
2839 rendererData->pixelSizeChanged = false;
2840 }
2841
2842 if (rendererData->currentViewportRotation != viewportRotation) {
2843 rendererData->currentViewportRotation = viewportRotation;
2844 rendererData->viewportDirty = true;
2845 }
2846
2847 if (!D3D12_UpdateVertexBuffer(renderer, vertices, vertsize)) {
2848 return false;
2849 }
2850
2851 while (cmd) {
2852 switch (cmd->command) {
2853 case SDL_RENDERCMD_SETDRAWCOLOR:
2854 {
2855 break; // this isn't currently used in this render backend.
2856 }
2857
2858 case SDL_RENDERCMD_SETVIEWPORT:
2859 {
2860 SDL_Rect *viewport = &rendererData->currentViewport;
2861 if (SDL_memcmp(viewport, &cmd->data.viewport.rect, sizeof(cmd->data.viewport.rect)) != 0) {
2862 SDL_copyp(viewport, &cmd->data.viewport.rect);
2863 rendererData->viewportDirty = true;
2864 rendererData->cliprectDirty = true;
2865 }
2866 break;
2867 }
2868
2869 case SDL_RENDERCMD_SETCLIPRECT:
2870 {
2871 const SDL_Rect *rect = &cmd->data.cliprect.rect;
2872 SDL_Rect viewport_cliprect;
2873 if (rendererData->currentCliprectEnabled != cmd->data.cliprect.enabled) {
2874 rendererData->currentCliprectEnabled = cmd->data.cliprect.enabled;
2875 rendererData->cliprectDirty = true;
2876 }
2877 if (!rendererData->currentCliprectEnabled) {
2878 /* If the clip rect is disabled, then the scissor rect should be the whole viewport,
2879 since direct3d12 doesn't allow disabling the scissor rectangle */
2880 viewport_cliprect.x = 0;
2881 viewport_cliprect.y = 0;
2882 viewport_cliprect.w = rendererData->currentViewport.w;
2883 viewport_cliprect.h = rendererData->currentViewport.h;
2884 rect = &viewport_cliprect;
2885 }
2886 if (SDL_memcmp(&rendererData->currentCliprect, rect, sizeof(*rect)) != 0) {
2887 SDL_copyp(&rendererData->currentCliprect, rect);
2888 rendererData->cliprectDirty = true;
2889 }
2890 break;
2891 }
2892
2893 case SDL_RENDERCMD_CLEAR:
2894 {
2895 D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = D3D12_GetCurrentRenderTargetView(renderer);
2896 bool convert_color = SDL_RenderingLinearSpace(renderer);
2897 SDL_FColor color = cmd->data.color.color;
2898 if (convert_color) {
2899 SDL_ConvertToLinear(&color);
2900 }
2901 color.r *= cmd->data.color.color_scale;
2902 color.g *= cmd->data.color.color_scale;
2903 color.b *= cmd->data.color.color_scale;
2904 ID3D12GraphicsCommandList2_ClearRenderTargetView(rendererData->commandList, rtvDescriptor, &color.r, 0, NULL);
2905 break;
2906 }
2907
2908 case SDL_RENDERCMD_DRAW_POINTS:
2909 {
2910 const size_t count = cmd->data.draw.count;
2911 const size_t first = cmd->data.draw.first;
2912 const size_t start = first / sizeof(D3D12_VertexPositionColor);
2913 D3D12_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT, 0, NULL, NULL, NULL);
2914 D3D12_DrawPrimitives(renderer, D3D_PRIMITIVE_TOPOLOGY_POINTLIST, start, count);
2915 break;
2916 }
2917
2918 case SDL_RENDERCMD_DRAW_LINES:
2919 {
2920 const size_t count = cmd->data.draw.count;
2921 const size_t first = cmd->data.draw.first;
2922 const size_t start = first / sizeof(D3D12_VertexPositionColor);
2923 const D3D12_VertexPositionColor *verts = (D3D12_VertexPositionColor *)(((Uint8 *)vertices) + first);
2924 D3D12_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE, 0, NULL, NULL, NULL);
2925 D3D12_DrawPrimitives(renderer, D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, start, count);
2926 if (verts[0].pos.x != verts[count - 1].pos.x || verts[0].pos.y != verts[count - 1].pos.y) {
2927 D3D12_DrawPrimitives(renderer, D3D_PRIMITIVE_TOPOLOGY_POINTLIST, start + (count - 1), 1);
2928 }
2929 break;
2930 }
2931
2932 case SDL_RENDERCMD_FILL_RECTS: // unused
2933 break;
2934
2935 case SDL_RENDERCMD_COPY: // unused
2936 break;
2937
2938 case SDL_RENDERCMD_COPY_EX: // unused
2939 break;
2940
2941 case SDL_RENDERCMD_GEOMETRY:
2942 {
2943 SDL_Texture *texture = cmd->data.draw.texture;
2944 const size_t count = cmd->data.draw.count;
2945 const size_t first = cmd->data.draw.first;
2946 const size_t start = first / sizeof(D3D12_VertexPositionColor);
2947
2948 if (texture) {
2949 D3D12_SetCopyState(renderer, cmd, NULL);
2950 } else {
2951 D3D12_SetDrawState(renderer, cmd, SHADER_SOLID, NULL, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, 0, NULL, NULL, NULL);
2952 }
2953
2954 D3D12_DrawPrimitives(renderer, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, start, count);
2955 break;
2956 }
2957
2958 case SDL_RENDERCMD_NO_OP:
2959 break;
2960 }
2961
2962 cmd = cmd->next;
2963 }
2964
2965 return true;
2966}
2967
2968static SDL_Surface *D3D12_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect)
2969{
2970 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
2971 ID3D12Resource *backBuffer = NULL;
2972 ID3D12Resource *readbackBuffer = NULL;
2973 HRESULT result;
2974 D3D12_RESOURCE_DESC textureDesc;
2975 D3D12_RESOURCE_DESC readbackDesc;
2976 D3D12_HEAP_PROPERTIES heapProps;
2977 D3D12_RECT srcRect = { 0, 0, 0, 0 };
2978 D3D12_BOX srcBox;
2979 D3D12_TEXTURE_COPY_LOCATION dstLocation;
2980 D3D12_TEXTURE_COPY_LOCATION srcLocation;
2981 D3D12_PLACED_SUBRESOURCE_FOOTPRINT placedTextureDesc;
2982 D3D12_SUBRESOURCE_FOOTPRINT pitchedDesc;
2983 BYTE *textureMemory;
2984 int bpp;
2985 SDL_Surface *output = NULL;
2986
2987 if (data->textureRenderTarget) {
2988 backBuffer = data->textureRenderTarget->mainTexture;
2989 } else {
2990 backBuffer = data->renderTargets[data->currentBackBufferIndex];
2991 }
2992
2993 // Create a staging texture to copy the screen's data to:
2994 SDL_zero(textureDesc);
2995 D3D_CALL_RET(backBuffer, GetDesc, &textureDesc);
2996 textureDesc.Width = rect->w;
2997 textureDesc.Height = rect->h;
2998
2999 SDL_zero(readbackDesc);
3000 readbackDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
3001 readbackDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT;
3002 readbackDesc.Height = 1;
3003 readbackDesc.DepthOrArraySize = 1;
3004 readbackDesc.MipLevels = 1;
3005 readbackDesc.Format = DXGI_FORMAT_UNKNOWN;
3006 readbackDesc.SampleDesc.Count = 1;
3007 readbackDesc.SampleDesc.Quality = 0;
3008 readbackDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
3009 readbackDesc.Flags = D3D12_RESOURCE_FLAG_NONE;
3010
3011 // Figure out how much we need to allocate for the upload buffer
3012 ID3D12Device1_GetCopyableFootprints(data->d3dDevice,
3013 &textureDesc,
3014 0,
3015 1,
3016 0,
3017 NULL,
3018 NULL,
3019 NULL,
3020 &readbackDesc.Width);
3021
3022 SDL_zero(heapProps);
3023 heapProps.Type = D3D12_HEAP_TYPE_READBACK;
3024 heapProps.CreationNodeMask = 1;
3025 heapProps.VisibleNodeMask = 1;
3026
3027 result = ID3D12Device1_CreateCommittedResource(data->d3dDevice,
3028 &heapProps,
3029 D3D12_HEAP_FLAG_NONE,
3030 &readbackDesc,
3031 D3D12_RESOURCE_STATE_COPY_DEST,
3032 NULL,
3033 D3D_GUID(SDL_IID_ID3D12Resource),
3034 (void **)&readbackBuffer);
3035 if (FAILED(result)) {
3036 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Device::CreateTexture2D [create staging texture]"), result);
3037 goto done;
3038 }
3039
3040 // Transition the render target to be copyable from
3041 D3D12_TransitionResource(data, backBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
3042
3043 // Copy the desired portion of the back buffer to the staging texture:
3044 if (!D3D12_GetViewportAlignedD3DRect(renderer, rect, &srcRect, FALSE)) {
3045 // D3D12_GetViewportAlignedD3DRect will have set the SDL error
3046 goto done;
3047 }
3048 srcBox.left = srcRect.left;
3049 srcBox.right = srcRect.right;
3050 srcBox.top = srcRect.top;
3051 srcBox.bottom = srcRect.bottom;
3052 srcBox.front = 0;
3053 srcBox.back = 1;
3054
3055 // Issue the copy texture region
3056 SDL_zero(pitchedDesc);
3057 pitchedDesc.Format = textureDesc.Format;
3058 pitchedDesc.Width = (UINT)textureDesc.Width;
3059 pitchedDesc.Height = textureDesc.Height;
3060 pitchedDesc.Depth = 1;
3061 bpp = SDL_BYTESPERPIXEL(D3D12_DXGIFormatToSDLPixelFormat(pitchedDesc.Format));
3062 pitchedDesc.RowPitch = D3D12_Align(pitchedDesc.Width * bpp, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
3063
3064 SDL_zero(placedTextureDesc);
3065 placedTextureDesc.Offset = 0;
3066 placedTextureDesc.Footprint = pitchedDesc;
3067
3068 SDL_zero(dstLocation);
3069 dstLocation.pResource = readbackBuffer;
3070 dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
3071 dstLocation.PlacedFootprint = placedTextureDesc;
3072
3073 SDL_zero(srcLocation);
3074 srcLocation.pResource = backBuffer;
3075 srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
3076 srcLocation.SubresourceIndex = 0;
3077
3078 ID3D12GraphicsCommandList2_CopyTextureRegion(data->commandList,
3079 &dstLocation,
3080 0, 0, 0,
3081 &srcLocation,
3082 &srcBox);
3083
3084 // We need to issue the command list for the copy to finish
3085 D3D12_IssueBatch(data);
3086
3087 // Transition the render target back to a render target
3088 D3D12_TransitionResource(data, backBuffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET);
3089
3090 // Map the staging texture's data to CPU-accessible memory:
3091 result = ID3D12Resource_Map(readbackBuffer,
3092 0,
3093 NULL,
3094 (void **)&textureMemory);
3095 if (FAILED(result)) {
3096 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D12Resource::Map [map staging texture]"), result);
3097 goto done;
3098 }
3099
3100 output = SDL_DuplicatePixels(
3101 rect->w, rect->h,
3102 D3D12_DXGIFormatToSDLPixelFormat(textureDesc.Format),
3103 renderer->target ? renderer->target->colorspace : renderer->output_colorspace,
3104 textureMemory,
3105 pitchedDesc.RowPitch);
3106
3107 // Unmap the texture:
3108 ID3D12Resource_Unmap(readbackBuffer, 0, NULL);
3109
3110done:
3111 D3D_SAFE_RELEASE(readbackBuffer);
3112 return output;
3113}
3114
3115static bool D3D12_RenderPresent(SDL_Renderer *renderer)
3116{
3117 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
3118 HRESULT result;
3119
3120 if (!data->d3dDevice) {
3121 return SDL_SetError("Device lost and couldn't be recovered");
3122 }
3123
3124 // Transition the render target to present state
3125 D3D12_TransitionResource(data,
3126 data->renderTargets[data->currentBackBufferIndex],
3127 D3D12_RESOURCE_STATE_RENDER_TARGET,
3128 D3D12_RESOURCE_STATE_PRESENT);
3129
3130 // Issue the command list
3131 result = ID3D12GraphicsCommandList2_Close(data->commandList);
3132 ID3D12CommandQueue_ExecuteCommandLists(data->commandQueue, 1, (ID3D12CommandList *const *)&data->commandList);
3133
3134#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
3135 result = D3D12_XBOX_PresentFrame(data->commandQueue, data->frameToken, data->renderTargets[data->currentBackBufferIndex]);
3136#else
3137 /* The application may optionally specify "dirty" or "scroll"
3138 * rects to improve efficiency in certain scenarios.
3139 */
3140 result = IDXGISwapChain_Present(data->swapChain, data->syncInterval, data->presentFlags);
3141#endif
3142
3143 if (FAILED(result) && result != DXGI_ERROR_WAS_STILL_DRAWING) {
3144 /* If the device was removed either by a disconnect or a driver upgrade, we
3145 * must recreate all device resources.
3146 */
3147 if (result == DXGI_ERROR_DEVICE_REMOVED) {
3148 if (D3D12_HandleDeviceLost(renderer)) {
3149 SDL_SetError("Present failed, device lost");
3150 } else {
3151 // Recovering from device lost failed, error is already set
3152 }
3153 } else if (result == DXGI_ERROR_INVALID_CALL) {
3154 // We probably went through a fullscreen <-> windowed transition
3155 D3D12_CreateWindowSizeDependentResources(renderer);
3156 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::Present"), result);
3157 } else {
3158 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("IDXGISwapChain::Present"), result);
3159 }
3160 return false;
3161 } else {
3162 // Wait for the GPU and move to the next frame
3163 result = ID3D12CommandQueue_Signal(data->commandQueue, data->fence, data->fenceValue);
3164
3165 if (ID3D12Fence_GetCompletedValue(data->fence) < data->fenceValue) {
3166 result = ID3D12Fence_SetEventOnCompletion(data->fence,
3167 data->fenceValue,
3168 data->fenceEvent);
3169 WaitForSingleObjectEx(data->fenceEvent, INFINITE, FALSE);
3170 }
3171
3172 data->fenceValue++;
3173#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
3174 data->currentBackBufferIndex++;
3175 data->currentBackBufferIndex %= SDL_D3D12_NUM_BUFFERS;
3176#else
3177 data->currentBackBufferIndex = IDXGISwapChain4_GetCurrentBackBufferIndex(data->swapChain);
3178#endif
3179
3180 // Reset the command allocator and command list, and transition back to render target
3181 D3D12_ResetCommandList(data);
3182 D3D12_TransitionResource(data,
3183 data->renderTargets[data->currentBackBufferIndex],
3184 D3D12_RESOURCE_STATE_PRESENT,
3185 D3D12_RESOURCE_STATE_RENDER_TARGET);
3186
3187#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
3188 D3D12_XBOX_StartFrame(data->d3dDevice, &data->frameToken);
3189#endif
3190 return true;
3191 }
3192}
3193
3194static bool D3D12_SetVSync(SDL_Renderer *renderer, const int vsync)
3195{
3196 D3D12_RenderData *data = (D3D12_RenderData *)renderer->internal;
3197
3198 if (vsync < 0) {
3199 return SDL_Unsupported();
3200 }
3201
3202 if (vsync > 0) {
3203 data->syncInterval = vsync;
3204 data->presentFlags = 0;
3205 } else {
3206 data->syncInterval = 0;
3207 data->presentFlags = DXGI_PRESENT_ALLOW_TEARING;
3208 }
3209 return true;
3210}
3211
3212bool D3D12_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_PropertiesID create_props)
3213{
3214 D3D12_RenderData *data;
3215
3216 HWND hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL);
3217 if (!hwnd) {
3218 return SDL_SetError("Couldn't get window handle");
3219 }
3220
3221 if (SDL_GetWindowFlags(window) & SDL_WINDOW_TRANSPARENT) {
3222 // D3D12 removed the swap effect needed to support transparent windows, use D3D11 instead
3223 return SDL_SetError("The direct3d12 renderer doesn't work with transparent windows");
3224 }
3225
3226 SDL_SetupRendererColorspace(renderer, create_props);
3227
3228 if (renderer->output_colorspace != SDL_COLORSPACE_SRGB &&
3229 renderer->output_colorspace != SDL_COLORSPACE_SRGB_LINEAR
3230 /*&& renderer->output_colorspace != SDL_COLORSPACE_HDR10*/) {
3231 return SDL_SetError("Unsupported output colorspace");
3232 }
3233
3234 data = (D3D12_RenderData *)SDL_calloc(1, sizeof(*data));
3235 if (!data) {
3236 return false;
3237 }
3238
3239 data->identity = MatrixIdentity();
3240
3241 renderer->WindowEvent = D3D12_WindowEvent;
3242 renderer->SupportsBlendMode = D3D12_SupportsBlendMode;
3243 renderer->CreateTexture = D3D12_CreateTexture;
3244 renderer->UpdateTexture = D3D12_UpdateTexture;
3245#ifdef SDL_HAVE_YUV
3246 renderer->UpdateTextureYUV = D3D12_UpdateTextureYUV;
3247 renderer->UpdateTextureNV = D3D12_UpdateTextureNV;
3248#endif
3249 renderer->LockTexture = D3D12_LockTexture;
3250 renderer->UnlockTexture = D3D12_UnlockTexture;
3251 renderer->SetTextureScaleMode = D3D12_SetTextureScaleMode;
3252 renderer->SetRenderTarget = D3D12_SetRenderTarget;
3253 renderer->QueueSetViewport = D3D12_QueueNoOp;
3254 renderer->QueueSetDrawColor = D3D12_QueueNoOp;
3255 renderer->QueueDrawPoints = D3D12_QueueDrawPoints;
3256 renderer->QueueDrawLines = D3D12_QueueDrawPoints; // lines and points queue vertices the same way.
3257 renderer->QueueGeometry = D3D12_QueueGeometry;
3258 renderer->InvalidateCachedState = D3D12_InvalidateCachedState;
3259 renderer->RunCommandQueue = D3D12_RunCommandQueue;
3260 renderer->RenderReadPixels = D3D12_RenderReadPixels;
3261 renderer->RenderPresent = D3D12_RenderPresent;
3262 renderer->DestroyTexture = D3D12_DestroyTexture;
3263 renderer->DestroyRenderer = D3D12_DestroyRenderer;
3264 renderer->SetVSync = D3D12_SetVSync;
3265 renderer->internal = data;
3266 D3D12_InvalidateCachedState(renderer);
3267
3268 renderer->name = D3D12_RenderDriver.name;
3269 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
3270 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
3271 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888);
3272 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010);
3273 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
3274 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_YV12);
3275 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_IYUV);
3276 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12);
3277 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21);
3278 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_P010);
3279 SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384);
3280
3281 data->syncInterval = 0;
3282 data->presentFlags = DXGI_PRESENT_ALLOW_TEARING;
3283
3284 /* HACK: make sure the SDL_Renderer references the SDL_Window data now, in
3285 * order to give init functions access to the underlying window handle:
3286 */
3287 renderer->window = window;
3288
3289 // Initialize Direct3D resources
3290 if (FAILED(D3D12_CreateDeviceResources(renderer))) {
3291 return false;
3292 }
3293 if (FAILED(D3D12_CreateWindowSizeDependentResources(renderer))) {
3294 return false;
3295 }
3296
3297 return true;
3298}
3299
3300SDL_RenderDriver D3D12_RenderDriver = {
3301 D3D12_CreateRenderer, "direct3d12"
3302};
3303
3304// Ends C function definitions when using C++
3305#ifdef __cplusplus
3306}
3307#endif
3308
3309#endif // SDL_VIDEO_RENDER_D3D12
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.cpp b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.cpp
new file mode 100644
index 0000000..2ea3cf1
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.cpp
@@ -0,0 +1,174 @@
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21
22#include "../../SDL_internal.h"
23#if defined(SDL_VIDEO_RENDER_D3D12) && (defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES))
24#include "SDL_render_d3d12_xbox.h"
25#include "../../core/windows/SDL_windows.h"
26#include <XGameRuntime.h>
27
28#if defined(_MSC_VER) && !defined(__clang__)
29#define SDL_COMPOSE_ERROR(str) __FUNCTION__ ", " str
30#else
31#define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str
32#endif
33
34static const GUID SDL_IID_ID3D12Device1 = { 0x77acce80, 0x638e, 0x4e65, { 0x88, 0x95, 0xc1, 0xf2, 0x33, 0x86, 0x86, 0x3e } };
35static const GUID SDL_IID_ID3D12Resource = { 0x696442be, 0xa72e, 0x4059, { 0xbc, 0x79, 0x5b, 0x5c, 0x98, 0x04, 0x0f, 0xad } };
36static const GUID SDL_IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } };
37
38extern "C"
39HRESULT D3D12_XBOX_CreateDevice(ID3D12Device **device, bool createDebug)
40{
41 HRESULT result;
42 D3D12XBOX_CREATE_DEVICE_PARAMETERS params;
43 IDXGIDevice1 *dxgiDevice;
44 IDXGIAdapter *dxgiAdapter;
45 IDXGIOutput *dxgiOutput;
46 SDL_zero(params);
47
48 params.Version = D3D12_SDK_VERSION;
49 params.ProcessDebugFlags = createDebug ? D3D12_PROCESS_DEBUG_FLAG_DEBUG_LAYER_ENABLED : D3D12XBOX_PROCESS_DEBUG_FLAG_NONE;
50 params.GraphicsCommandQueueRingSizeBytes = D3D12XBOX_DEFAULT_SIZE_BYTES;
51 params.GraphicsScratchMemorySizeBytes = D3D12XBOX_DEFAULT_SIZE_BYTES;
52 params.ComputeScratchMemorySizeBytes = D3D12XBOX_DEFAULT_SIZE_BYTES;
53
54 result = D3D12XboxCreateDevice(NULL, &params, SDL_IID_ID3D12Device1, (void **) device);
55 if (FAILED(result)) {
56 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] D3D12XboxCreateDevice"), result);
57 goto done;
58 }
59
60 result = (*device)->QueryInterface(SDL_IID_IDXGIDevice1, (void **) &dxgiDevice);
61 if (FAILED(result)) {
62 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] ID3D12Device to IDXGIDevice1"), result);
63 goto done;
64 }
65
66 result = dxgiDevice->GetAdapter(&dxgiAdapter);
67 if (FAILED(result)) {
68 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] dxgiDevice->GetAdapter"), result);
69 goto done;
70 }
71
72 result = dxgiAdapter->EnumOutputs(0, &dxgiOutput);
73 if (FAILED(result)) {
74 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] dxgiAdapter->EnumOutputs"), result);
75 goto done;
76 }
77
78 // Set frame interval
79 result = (*device)->SetFrameIntervalX(dxgiOutput, D3D12XBOX_FRAME_INTERVAL_60_HZ, 1, D3D12XBOX_FRAME_INTERVAL_FLAG_NONE);
80 if (FAILED(result)) {
81 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] SetFrameIntervalX"), result);
82 goto done;
83 }
84
85 result = (*device)->ScheduleFrameEventX(D3D12XBOX_FRAME_EVENT_ORIGIN, 0, NULL, D3D12XBOX_SCHEDULE_FRAME_EVENT_FLAG_NONE);
86 if (FAILED(result)) {
87 WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("[xbox] ScheduleFrameEventX"), result);
88 goto done;
89 }
90
91done:
92 return result;
93}
94
95extern "C"
96HRESULT D3D12_XBOX_CreateBackBufferTarget(ID3D12Device1 *device, int width, int height, void **resource)
97{
98
99 D3D12_HEAP_PROPERTIES heapProps;
100 D3D12_RESOURCE_DESC resourceDesc;
101
102 SDL_zero(heapProps);
103 heapProps.Type = D3D12_HEAP_TYPE_DEFAULT;
104 heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;
105 heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;
106 heapProps.CreationNodeMask = 1;
107 heapProps.VisibleNodeMask = 1;
108
109 SDL_zero(resourceDesc);
110 resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
111 resourceDesc.Alignment = 0;
112 resourceDesc.Width = width;
113 resourceDesc.Height = height;
114 resourceDesc.DepthOrArraySize = 1;
115 resourceDesc.MipLevels = 1;
116 resourceDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
117 resourceDesc.SampleDesc.Count = 1;
118 resourceDesc.SampleDesc.Quality = 0;
119 resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
120 resourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;
121
122 return device->CreateCommittedResource(&heapProps,
123 D3D12_HEAP_FLAG_ALLOW_DISPLAY,
124 &resourceDesc,
125 D3D12_RESOURCE_STATE_PRESENT,
126 NULL,
127 SDL_IID_ID3D12Resource,
128 resource
129 );
130}
131
132extern "C"
133HRESULT D3D12_XBOX_StartFrame(ID3D12Device1 *device, UINT64 *outToken)
134{
135 *outToken = D3D12XBOX_FRAME_PIPELINE_TOKEN_NULL;
136 return device->WaitFrameEventX(D3D12XBOX_FRAME_EVENT_ORIGIN, INFINITE, NULL, D3D12XBOX_WAIT_FRAME_EVENT_FLAG_NONE, outToken);
137}
138
139extern "C"
140HRESULT D3D12_XBOX_PresentFrame(ID3D12CommandQueue *commandQueue, UINT64 token, ID3D12Resource *renderTarget)
141{
142 D3D12XBOX_PRESENT_PLANE_PARAMETERS planeParameters;
143 SDL_zero(planeParameters);
144 planeParameters.Token = token;
145 planeParameters.ResourceCount = 1;
146 planeParameters.ppResources = &renderTarget;
147 return commandQueue->PresentX(1, &planeParameters, NULL);
148}
149
150extern "C"
151void D3D12_XBOX_GetResolution(Uint32 *width, Uint32 *height)
152{
153 switch (XSystemGetDeviceType()) {
154 case XSystemDeviceType::XboxScarlettLockhart:
155 *width = 2560;
156 *height = 1440;
157 break;
158
159 case XSystemDeviceType::XboxOneX:
160 case XSystemDeviceType::XboxScarlettAnaconda:
161 case XSystemDeviceType::XboxOneXDevkit:
162 case XSystemDeviceType::XboxScarlettDevkit:
163 *width = 3840;
164 *height = 2160;
165 break;
166
167 default:
168 *width = 1920;
169 *height = 1080;
170 break;
171 }
172}
173
174#endif // SDL_VIDEO_RENDER_D3D12 && (SDL_PLATFORM_XBOXONE || SDL_PLATFORM_XBOXSERIES)
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.h b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.h
new file mode 100644
index 0000000..947148e
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_render_d3d12_xbox.h
@@ -0,0 +1,44 @@
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21
22#ifndef SDL_render_d3d12_xbox_h_
23#define SDL_render_d3d12_xbox_h_
24
25#include "../../SDL_internal.h"
26#include "../../video/directx/SDL_d3d12.h"
27
28// Set up for C function definitions, even when using C++
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33extern HRESULT D3D12_XBOX_CreateDevice(ID3D12Device **device, bool createDebug);
34extern HRESULT D3D12_XBOX_CreateBackBufferTarget(ID3D12Device1 *device, int width, int height, void **resource);
35extern HRESULT D3D12_XBOX_StartFrame(ID3D12Device1 *device, UINT64 *outToken);
36extern HRESULT D3D12_XBOX_PresentFrame(ID3D12CommandQueue *commandQueue, UINT64 token, ID3D12Resource *renderTarget);
37extern void D3D12_XBOX_GetResolution(Uint32 *width, Uint32 *height);
38
39// Ends C function definitions when using C++
40#ifdef __cplusplus
41}
42#endif
43
44#endif
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.c b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.c
new file mode 100644
index 0000000..8d06db0
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.c
@@ -0,0 +1,125 @@
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21#include "SDL_internal.h"
22
23#if defined(SDL_VIDEO_RENDER_D3D12) && !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
24
25#include "../../core/windows/SDL_windows.h"
26#include "../../video/directx/SDL_d3d12.h"
27
28#include "SDL_shaders_d3d12.h"
29
30#define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str
31
32// The shaders here were compiled with compile_shaders.bat
33
34#define g_main D3D12_PixelShader_Colors
35#include "D3D12_PixelShader_Colors.h"
36#undef g_main
37
38#define g_main D3D12_PixelShader_Textures
39#include "D3D12_PixelShader_Textures.h"
40#undef g_main
41
42#define g_main D3D12_PixelShader_Advanced
43#include "D3D12_PixelShader_Advanced.h"
44#undef g_main
45
46
47#define g_mainColor D3D12_VertexShader_Colors
48#include "D3D12_VertexShader_Color.h"
49#undef g_mainColor
50
51#define g_mainTexture D3D12_VertexShader_Textures
52#include "D3D12_VertexShader_Texture.h"
53#undef g_mainTexture
54
55#define g_mainAdvanced D3D12_VertexShader_Advanced
56#include "D3D12_VertexShader_Advanced.h"
57#undef g_mainAdvanced
58
59
60#define g_ColorRS D3D12_RootSig_Color
61#include "D3D12_RootSig_Color.h"
62#undef g_ColorRS
63
64#define g_TextureRS D3D12_RootSig_Texture
65#include "D3D12_RootSig_Texture.h"
66#undef g_TextureRS
67
68#define g_AdvancedRS D3D12_RootSig_Advanced
69#include "D3D12_RootSig_Advanced.h"
70#undef g_AdvancedRS
71
72
73static struct
74{
75 const void *ps_shader_data;
76 SIZE_T ps_shader_size;
77 const void *vs_shader_data;
78 SIZE_T vs_shader_size;
79 D3D12_RootSignature root_sig;
80} D3D12_shaders[NUM_SHADERS] = {
81 { D3D12_PixelShader_Colors, sizeof(D3D12_PixelShader_Colors),
82 D3D12_VertexShader_Colors, sizeof(D3D12_VertexShader_Colors),
83 ROOTSIG_COLOR },
84 { D3D12_PixelShader_Textures, sizeof(D3D12_PixelShader_Textures),
85 D3D12_VertexShader_Textures, sizeof(D3D12_VertexShader_Textures),
86 ROOTSIG_TEXTURE },
87 { D3D12_PixelShader_Advanced, sizeof(D3D12_PixelShader_Advanced),
88 D3D12_VertexShader_Advanced, sizeof(D3D12_VertexShader_Advanced),
89 ROOTSIG_ADVANCED },
90};
91
92static struct
93{
94 const void *rs_shader_data;
95 SIZE_T rs_shader_size;
96} D3D12_rootsigs[NUM_ROOTSIGS] = {
97 { D3D12_RootSig_Color, sizeof(D3D12_RootSig_Color) },
98 { D3D12_RootSig_Texture, sizeof(D3D12_RootSig_Texture) },
99 { D3D12_RootSig_Advanced, sizeof(D3D12_RootSig_Advanced) },
100};
101
102void D3D12_GetVertexShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode)
103{
104 outBytecode->pShaderBytecode = D3D12_shaders[shader].vs_shader_data;
105 outBytecode->BytecodeLength = D3D12_shaders[shader].vs_shader_size;
106}
107
108void D3D12_GetPixelShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode)
109{
110 outBytecode->pShaderBytecode = D3D12_shaders[shader].ps_shader_data;
111 outBytecode->BytecodeLength = D3D12_shaders[shader].ps_shader_size;
112}
113
114D3D12_RootSignature D3D12_GetRootSignatureType(D3D12_Shader shader)
115{
116 return D3D12_shaders[shader].root_sig;
117}
118
119void D3D12_GetRootSignatureData(D3D12_RootSignature rootSig, D3D12_SHADER_BYTECODE *outBytecode)
120{
121 outBytecode->pShaderBytecode = D3D12_rootsigs[rootSig].rs_shader_data;
122 outBytecode->BytecodeLength = D3D12_rootsigs[rootSig].rs_shader_size;
123}
124
125#endif // SDL_VIDEO_RENDER_D3D12 && !SDL_PLATFORM_XBOXONE && !SDL_PLATFORM_XBOXSERIES
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.h b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.h
new file mode 100644
index 0000000..0250b97
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12.h
@@ -0,0 +1,54 @@
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21#include "SDL_internal.h"
22
23// D3D12 shader implementation
24
25// Set up for C function definitions, even when using C++
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30typedef enum
31{
32 SHADER_SOLID,
33 SHADER_RGB,
34 SHADER_ADVANCED,
35 NUM_SHADERS
36} D3D12_Shader;
37
38typedef enum
39{
40 ROOTSIG_COLOR,
41 ROOTSIG_TEXTURE,
42 ROOTSIG_ADVANCED,
43 NUM_ROOTSIGS
44} D3D12_RootSignature;
45
46extern void D3D12_GetVertexShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode);
47extern void D3D12_GetPixelShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode);
48extern D3D12_RootSignature D3D12_GetRootSignatureType(D3D12_Shader shader);
49extern void D3D12_GetRootSignatureData(D3D12_RootSignature rootSig, D3D12_SHADER_BYTECODE *outBytecode);
50
51// Ends C function definitions when using C++
52#ifdef __cplusplus
53}
54#endif
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp
new file mode 100644
index 0000000..bc6146b
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp
@@ -0,0 +1,132 @@
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21#include "../../SDL_internal.h"
22
23#if defined(SDL_VIDEO_RENDER_D3D12) && defined(SDL_PLATFORM_XBOXONE)
24
25#include <SDL3/SDL_stdinc.h>
26
27#include "../../core/windows/SDL_windows.h"
28#include "../../video/directx/SDL_d3d12.h"
29
30#include "SDL_shaders_d3d12.h"
31
32#define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str
33
34// Shader blob headers are generated with a pre-build step using compile_shaders_xbox.bat
35
36#define g_main D3D12_PixelShader_Colors
37#include "D3D12_PixelShader_Colors_One.h"
38#undef g_main
39
40#define g_main D3D12_PixelShader_Textures
41#include "D3D12_PixelShader_Textures_One.h"
42#undef g_main
43
44#define g_main D3D12_PixelShader_Advanced
45#include "D3D12_PixelShader_Advanced_One.h"
46#undef g_main
47
48
49#define g_mainColor D3D12_VertexShader_Colors
50#include "D3D12_VertexShader_Color_One.h"
51#undef g_mainColor
52
53#define g_mainTexture D3D12_VertexShader_Textures
54#include "D3D12_VertexShader_Texture_One.h"
55#undef g_mainTexture
56
57#define g_mainAdvanced D3D12_VertexShader_Advanced
58#include "D3D12_VertexShader_Advanced_One.h"
59#undef g_mainAdvanced
60
61
62#define g_ColorRS D3D12_RootSig_Color
63#include "D3D12_RootSig_Color_One.h"
64#undef g_ColorRS
65
66#define g_TextureRS D3D12_RootSig_Texture
67#include "D3D12_RootSig_Texture_One.h"
68#undef g_TextureRS
69
70#define g_AdvancedRS D3D12_RootSig_Advanced
71#include "D3D12_RootSig_Advanced_One.h"
72#undef g_AdvancedRS
73
74
75static struct
76{
77 const void *ps_shader_data;
78 SIZE_T ps_shader_size;
79 const void *vs_shader_data;
80 SIZE_T vs_shader_size;
81 D3D12_RootSignature root_sig;
82} D3D12_shaders[NUM_SHADERS] = {
83 { D3D12_PixelShader_Colors, sizeof(D3D12_PixelShader_Colors),
84 D3D12_VertexShader_Colors, sizeof(D3D12_VertexShader_Colors),
85 ROOTSIG_COLOR },
86 { D3D12_PixelShader_Textures, sizeof(D3D12_PixelShader_Textures),
87 D3D12_VertexShader_Textures, sizeof(D3D12_VertexShader_Textures),
88 ROOTSIG_TEXTURE },
89 { D3D12_PixelShader_Advanced, sizeof(D3D12_PixelShader_Advanced),
90 D3D12_VertexShader_Advanced, sizeof(D3D12_VertexShader_Advanced),
91 ROOTSIG_ADVANCED },
92};
93
94static struct
95{
96 const void *rs_shader_data;
97 SIZE_T rs_shader_size;
98} D3D12_rootsigs[NUM_ROOTSIGS] = {
99 { D3D12_RootSig_Color, sizeof(D3D12_RootSig_Color) },
100 { D3D12_RootSig_Texture, sizeof(D3D12_RootSig_Texture) },
101 { D3D12_RootSig_Advanced, sizeof(D3D12_RootSig_Advanced) },
102};
103
104extern "C"
105void D3D12_GetVertexShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode)
106{
107 outBytecode->pShaderBytecode = D3D12_shaders[shader].vs_shader_data;
108 outBytecode->BytecodeLength = D3D12_shaders[shader].vs_shader_size;
109}
110
111extern "C"
112void D3D12_GetPixelShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode)
113{
114 outBytecode->pShaderBytecode = D3D12_shaders[shader].ps_shader_data;
115 outBytecode->BytecodeLength = D3D12_shaders[shader].ps_shader_size;
116}
117
118extern "C"
119D3D12_RootSignature D3D12_GetRootSignatureType(D3D12_Shader shader)
120{
121 return D3D12_shaders[shader].root_sig;
122}
123
124extern "C"
125void D3D12_GetRootSignatureData(D3D12_RootSignature rootSig, D3D12_SHADER_BYTECODE *outBytecode)
126{
127 outBytecode->pShaderBytecode = D3D12_rootsigs[rootSig].rs_shader_data;
128 outBytecode->BytecodeLength = D3D12_rootsigs[rootSig].rs_shader_size;
129}
130
131#endif // SDL_VIDEO_RENDER_D3D12 && SDL_PLATFORM_XBOXONE
132
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp
new file mode 100644
index 0000000..6c1c037
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp
@@ -0,0 +1,133 @@
1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21#include "../../SDL_internal.h"
22
23#if defined(SDL_VIDEO_RENDER_D3D12) && defined(SDL_PLATFORM_XBOXSERIES)
24
25#include <SDL3/SDL_stdinc.h>
26
27#include "../../core/windows/SDL_windows.h"
28#include "../../video/directx/SDL_d3d12.h"
29
30#include "SDL_shaders_d3d12.h"
31
32#define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str
33
34
35// Shader blob headers are generated with a pre-build step using compile_shaders_xbox.bat
36
37#define g_main D3D12_PixelShader_Colors
38#include "D3D12_PixelShader_Colors_Series.h"
39#undef g_main
40
41#define g_main D3D12_PixelShader_Textures
42#include "D3D12_PixelShader_Textures_Series.h"
43#undef g_main
44
45#define g_main D3D12_PixelShader_Advanced
46#include "D3D12_PixelShader_Advanced_Series.h"
47#undef g_main
48
49
50#define g_mainColor D3D12_VertexShader_Colors
51#include "D3D12_VertexShader_Color_Series.h"
52#undef g_mainColor
53
54#define g_mainTexture D3D12_VertexShader_Textures
55#include "D3D12_VertexShader_Texture_Series.h"
56#undef g_mainTexture
57
58#define g_mainAdvanced D3D12_VertexShader_Advanced
59#include "D3D12_VertexShader_Advanced_Series.h"
60#undef g_mainAdvanced
61
62
63#define g_ColorRS D3D12_RootSig_Color
64#include "D3D12_RootSig_Color_Series.h"
65#undef g_ColorRS
66
67#define g_TextureRS D3D12_RootSig_Texture
68#include "D3D12_RootSig_Texture_Series.h"
69#undef g_TextureRS
70
71#define g_AdvancedRS D3D12_RootSig_Advanced
72#include "D3D12_RootSig_Advanced_Series.h"
73#undef g_AdvancedRS
74
75
76static struct
77{
78 const void *ps_shader_data;
79 SIZE_T ps_shader_size;
80 const void *vs_shader_data;
81 SIZE_T vs_shader_size;
82 D3D12_RootSignature root_sig;
83} D3D12_shaders[NUM_SHADERS] = {
84 { D3D12_PixelShader_Colors, sizeof(D3D12_PixelShader_Colors),
85 D3D12_VertexShader_Colors, sizeof(D3D12_VertexShader_Colors),
86 ROOTSIG_COLOR },
87 { D3D12_PixelShader_Textures, sizeof(D3D12_PixelShader_Textures),
88 D3D12_VertexShader_Textures, sizeof(D3D12_VertexShader_Textures),
89 ROOTSIG_TEXTURE },
90 { D3D12_PixelShader_Advanced, sizeof(D3D12_PixelShader_Advanced),
91 D3D12_VertexShader_Advanced, sizeof(D3D12_VertexShader_Advanced),
92 ROOTSIG_ADVANCED },
93};
94
95static struct
96{
97 const void *rs_shader_data;
98 SIZE_T rs_shader_size;
99} D3D12_rootsigs[NUM_ROOTSIGS] = {
100 { D3D12_RootSig_Color, sizeof(D3D12_RootSig_Color) },
101 { D3D12_RootSig_Texture, sizeof(D3D12_RootSig_Texture) },
102 { D3D12_RootSig_Advanced, sizeof(D3D12_RootSig_Advanced) },
103};
104
105extern "C"
106void D3D12_GetVertexShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode)
107{
108 outBytecode->pShaderBytecode = D3D12_shaders[shader].vs_shader_data;
109 outBytecode->BytecodeLength = D3D12_shaders[shader].vs_shader_size;
110}
111
112extern "C"
113void D3D12_GetPixelShader(D3D12_Shader shader, D3D12_SHADER_BYTECODE *outBytecode)
114{
115 outBytecode->pShaderBytecode = D3D12_shaders[shader].ps_shader_data;
116 outBytecode->BytecodeLength = D3D12_shaders[shader].ps_shader_size;
117}
118
119extern "C"
120D3D12_RootSignature D3D12_GetRootSignatureType(D3D12_Shader shader)
121{
122 return D3D12_shaders[shader].root_sig;
123}
124
125extern "C"
126void D3D12_GetRootSignatureData(D3D12_RootSignature rootSig, D3D12_SHADER_BYTECODE *outBytecode)
127{
128 outBytecode->pShaderBytecode = D3D12_rootsigs[rootSig].rs_shader_data;
129 outBytecode->BytecodeLength = D3D12_rootsigs[rootSig].rs_shader_size;
130}
131
132#endif // SDL_VIDEO_RENDER_D3D12 && SDL_PLATFORM_XBOXSERIES
133
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/compile_shaders.bat b/contrib/SDL-3.2.8/src/render/direct3d12/compile_shaders.bat
new file mode 100644
index 0000000..699fdf3
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/compile_shaders.bat
@@ -0,0 +1,21 @@
1rem This script runs for the Windows build, but also via the _xbox variant with these vars set.
2rem Make sure to default to building for Windows if they're not set.
3if %DXC%.==. set DXC=dxc
4if %SUFFIX%.==. set SUFFIX=.h
5
6echo Building with %DXC%
7echo Suffix %SUFFIX%
8
9cd "%~dp0"
10
11%DXC% -E main -T ps_6_0 -Fh D3D12_PixelShader_Colors%SUFFIX% D3D12_PixelShader_Colors.hlsl
12%DXC% -E main -T ps_6_0 -Fh D3D12_PixelShader_Textures%SUFFIX% D3D12_PixelShader_Textures.hlsl
13%DXC% -E main -T ps_6_0 -Fh D3D12_PixelShader_Advanced%SUFFIX% D3D12_PixelShader_Advanced.hlsl
14
15%DXC% -E mainColor -T vs_6_0 -Fh D3D12_VertexShader_Color%SUFFIX% D3D12_VertexShader.hlsl
16%DXC% -E mainTexture -T vs_6_0 -Fh D3D12_VertexShader_Texture%SUFFIX% D3D12_VertexShader.hlsl
17%DXC% -E mainAdvanced -T vs_6_0 -Fh D3D12_VertexShader_Advanced%SUFFIX% D3D12_VertexShader.hlsl
18
19%DXC% -E ColorRS -T rootsig_1_1 -rootsig-define ColorRS -Fh D3D12_RootSig_Color%SUFFIX% D3D12_VertexShader.hlsl
20%DXC% -E TextureRS -T rootsig_1_1 -rootsig-define TextureRS -Fh D3D12_RootSig_Texture%SUFFIX% D3D12_VertexShader.hlsl
21%DXC% -E AdvancedRS -T rootsig_1_1 -rootsig-define AdvancedRS -Fh D3D12_RootSig_Advanced%SUFFIX% D3D12_VertexShader.hlsl
diff --git a/contrib/SDL-3.2.8/src/render/direct3d12/compile_shaders_xbox.bat b/contrib/SDL-3.2.8/src/render/direct3d12/compile_shaders_xbox.bat
new file mode 100644
index 0000000..311b172
--- /dev/null
+++ b/contrib/SDL-3.2.8/src/render/direct3d12/compile_shaders_xbox.bat
@@ -0,0 +1,13 @@
1if %2.==one. goto setxboxone
2rem Xbox Series compile
3set DXC="%GameDKLatest%\GXDK\bin\Scarlett\DXC.exe"
4set SUFFIX=_Series.h
5goto startbuild
6
7:setxboxone
8set DXC="%GameDKLatest%\GXDK\bin\XboxOne\DXC.exe"
9set SUFFIX=_One.h
10
11:startbuild
12
13call "%~dp0\compile_shaders.bat"