Change std:vector to eina_array
[platform/upstream/SDL.git] / src / render / direct3d11 / SDL_shaders_d3d11.c
1 /*
2   Simple DirectMedia Layer
3   Copyright (C) 1997-2020 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 SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED
24
25 #include "SDL_stdinc.h"
26
27 #define COBJMACROS
28 #include "../../core/windows/SDL_windows.h"
29 #include <d3d11_1.h>
30
31 #include "SDL_shaders_d3d11.h"
32
33 #define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str
34
35
36 /* Direct3D 11.x shaders
37
38    SDL's shaders are compiled into SDL itself, to simplify distribution.
39
40    All Direct3D 11.x shaders were compiled with the following:
41
42    fxc /E"main" /T "<TYPE>" /Fo"<OUTPUT FILE>" "<INPUT FILE>"
43
44      Variables:
45      - <TYPE>: the type of shader.  A table of utilized shader types is
46        listed below.
47      - <OUTPUT FILE>: where to store compiled output
48      - <INPUT FILE>: where to read shader source code from
49
50      Shader types:
51      - ps_4_0_level_9_1: Pixel shader for Windows 8+, including Windows RT
52      - vs_4_0_level_9_1: Vertex shader for Windows 8+, including Windows RT
53      - ps_4_0_level_9_3: Pixel shader for Windows Phone 8
54      - vs_4_0_level_9_3: Vertex shader for Windows Phone 8
55    
56
57    Shader object code was converted to a list of DWORDs via the following
58    *nix style command (available separately from Windows + MSVC):
59
60      hexdump -v -e '6/4 "0x%08.8x, " "\n"' <FILE>
61   */
62 #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
63 #define D3D11_USE_SHADER_MODEL_4_0_level_9_3
64 #else
65 #define D3D11_USE_SHADER_MODEL_4_0_level_9_1
66 #endif
67
68 /* The color-only-rendering pixel shader:
69
70    --- D3D11_PixelShader_Colors.hlsl ---
71    struct PixelShaderInput
72    {
73        float4 pos : SV_POSITION;
74        float2 tex : TEXCOORD0;
75        float4 color : COLOR0;
76    };
77
78    float4 main(PixelShaderInput input) : SV_TARGET
79    {
80        return input.color;
81    }
82 */
83 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
84 static const DWORD D3D11_PixelShader_Colors[] = {
85     0x43425844, 0xd74c28fe, 0xa1eb8804, 0x269d512a, 0x7699723d, 0x00000001,
86     0x00000240, 0x00000006, 0x00000038, 0x00000084, 0x000000c4, 0x00000140,
87     0x00000198, 0x0000020c, 0x396e6f41, 0x00000044, 0x00000044, 0xffff0200,
88     0x00000020, 0x00000024, 0x00240000, 0x00240000, 0x00240000, 0x00240000,
89     0x00240000, 0xffff0200, 0x0200001f, 0x80000000, 0xb00f0001, 0x02000001,
90     0x800f0800, 0xb0e40001, 0x0000ffff, 0x52444853, 0x00000038, 0x00000040,
91     0x0000000e, 0x03001062, 0x001010f2, 0x00000002, 0x03000065, 0x001020f2,
92     0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00101e46, 0x00000002,
93     0x0100003e, 0x54415453, 0x00000074, 0x00000002, 0x00000000, 0x00000000,
94     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
95     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
96     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000,
97     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
98     0x00000000, 0x00000000, 0x46454452, 0x00000050, 0x00000000, 0x00000000,
99     0x00000000, 0x0000001c, 0xffff0400, 0x00000100, 0x0000001c, 0x7263694d,
100     0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072,
101     0x6c69706d, 0x39207265, 0x2e30332e, 0x30303239, 0x3336312e, 0xab003438,
102     0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000,
103     0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000,
104     0x00000000, 0x00000003, 0x00000001, 0x00000003, 0x00000065, 0x00000000,
105     0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f,
106     0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f,
107     0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
108     0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
109 };
110 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
111 static const DWORD D3D11_PixelShader_Colors[] = {
112     0x43425844, 0x93f6ccfc, 0x5f919270, 0x7a11aa4f, 0x9148e931, 0x00000001,
113     0x00000240, 0x00000006, 0x00000038, 0x00000084, 0x000000c4, 0x00000140,
114     0x00000198, 0x0000020c, 0x396e6f41, 0x00000044, 0x00000044, 0xffff0200,
115     0x00000020, 0x00000024, 0x00240000, 0x00240000, 0x00240000, 0x00240000,
116     0x00240000, 0xffff0201, 0x0200001f, 0x80000000, 0xb00f0001, 0x02000001,
117     0x800f0800, 0xb0e40001, 0x0000ffff, 0x52444853, 0x00000038, 0x00000040,
118     0x0000000e, 0x03001062, 0x001010f2, 0x00000002, 0x03000065, 0x001020f2,
119     0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00101e46, 0x00000002,
120     0x0100003e, 0x54415453, 0x00000074, 0x00000002, 0x00000000, 0x00000000,
121     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
122     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
123     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000,
124     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
125     0x00000000, 0x00000000, 0x46454452, 0x00000050, 0x00000000, 0x00000000,
126     0x00000000, 0x0000001c, 0xffff0400, 0x00000100, 0x0000001c, 0x7263694d,
127     0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072,
128     0x6c69706d, 0x39207265, 0x2e30332e, 0x30303239, 0x3336312e, 0xab003438,
129     0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000,
130     0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000,
131     0x00000000, 0x00000003, 0x00000001, 0x00000003, 0x00000065, 0x00000000,
132     0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f,
133     0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f,
134     0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
135     0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
136 };
137 #else
138 #error "An appropriate 'colors' pixel shader is not defined."
139 #endif
140
141 /* The texture-rendering pixel shader:
142
143     --- D3D11_PixelShader_Textures.hlsl ---
144     Texture2D theTexture : register(t0);
145     SamplerState theSampler : register(s0);
146
147     struct PixelShaderInput
148     {
149         float4 pos : SV_POSITION;
150         float2 tex : TEXCOORD0;
151         float4 color : COLOR0;
152     };
153
154     float4 main(PixelShaderInput input) : SV_TARGET
155     {
156         return theTexture.Sample(theSampler, input.tex) * input.color;
157     }
158 */
159 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
160 static const DWORD D3D11_PixelShader_Textures[] = {
161     0x43425844, 0x6299b59f, 0x155258f2, 0x873ab86a, 0xfcbb6dcd, 0x00000001,
162     0x00000330, 0x00000006, 0x00000038, 0x000000c0, 0x0000015c, 0x000001d8,
163     0x00000288, 0x000002fc, 0x396e6f41, 0x00000080, 0x00000080, 0xffff0200,
164     0x00000058, 0x00000028, 0x00280000, 0x00280000, 0x00280000, 0x00240001,
165     0x00280000, 0x00000000, 0xffff0200, 0x0200001f, 0x80000000, 0xb0030000,
166     0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000, 0xa00f0800,
167     0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40800, 0x03000005, 0x800f0000,
168     0x80e40000, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff,
169     0x52444853, 0x00000094, 0x00000040, 0x00000025, 0x0300005a, 0x00106000,
170     0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062,
171     0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065,
172     0x001020f2, 0x00000000, 0x02000068, 0x00000001, 0x09000045, 0x001000f2,
173     0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000,
174     0x00000000, 0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000,
175     0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x00000003,
176     0x00000001, 0x00000000, 0x00000003, 0x00000001, 0x00000000, 0x00000000,
177     0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
178     0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
179     0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
180     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000a8,
181     0x00000000, 0x00000000, 0x00000002, 0x0000001c, 0xffff0400, 0x00000100,
182     0x00000072, 0x0000005c, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
183     0x00000000, 0x00000001, 0x00000001, 0x00000067, 0x00000002, 0x00000005,
184     0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x53656874,
185     0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x694d0065, 0x736f7263,
186     0x2074666f, 0x20295228, 0x4c534c48, 0x61685320, 0x20726564, 0x706d6f43,
187     0x72656c69, 0x332e3920, 0x32392e30, 0x312e3030, 0x34383336, 0xababab00,
188     0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000,
189     0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000,
190     0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000,
191     0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f,
192     0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f,
193     0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
194     0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
195 };
196 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
197 static const DWORD D3D11_PixelShader_Textures[] = {
198     0x43425844, 0x5876569a, 0x01b6c87e, 0x8447454f, 0xc7f3ef10, 0x00000001,
199     0x00000330, 0x00000006, 0x00000038, 0x000000c0, 0x0000015c, 0x000001d8,
200     0x00000288, 0x000002fc, 0x396e6f41, 0x00000080, 0x00000080, 0xffff0200,
201     0x00000058, 0x00000028, 0x00280000, 0x00280000, 0x00280000, 0x00240001,
202     0x00280000, 0x00000000, 0xffff0201, 0x0200001f, 0x80000000, 0xb0030000,
203     0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000, 0xa00f0800,
204     0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40800, 0x03000005, 0x800f0000,
205     0x80e40000, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff,
206     0x52444853, 0x00000094, 0x00000040, 0x00000025, 0x0300005a, 0x00106000,
207     0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062,
208     0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065,
209     0x001020f2, 0x00000000, 0x02000068, 0x00000001, 0x09000045, 0x001000f2,
210     0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000,
211     0x00000000, 0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000,
212     0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x00000003,
213     0x00000001, 0x00000000, 0x00000003, 0x00000001, 0x00000000, 0x00000000,
214     0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
215     0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
216     0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
217     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000a8,
218     0x00000000, 0x00000000, 0x00000002, 0x0000001c, 0xffff0400, 0x00000100,
219     0x00000072, 0x0000005c, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
220     0x00000000, 0x00000001, 0x00000001, 0x00000067, 0x00000002, 0x00000005,
221     0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x53656874,
222     0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x694d0065, 0x736f7263,
223     0x2074666f, 0x20295228, 0x4c534c48, 0x61685320, 0x20726564, 0x706d6f43,
224     0x72656c69, 0x332e3920, 0x32392e30, 0x312e3030, 0x34383336, 0xababab00,
225     0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000,
226     0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000,
227     0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000,
228     0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f,
229     0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f,
230     0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
231     0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
232 };
233 #else
234 #error "An appropriate 'textures' pixel shader is not defined"
235 #endif
236
237 /* The yuv-rendering pixel shader:
238
239     --- D3D11_PixelShader_YUV_JPEG.hlsl ---
240     Texture2D theTextureY : register(t0);
241     Texture2D theTextureU : register(t1);
242     Texture2D theTextureV : register(t2);
243     SamplerState theSampler : register(s0);
244
245     struct PixelShaderInput
246     {
247         float4 pos : SV_POSITION;
248         float2 tex : TEXCOORD0;
249         float4 color : COLOR0;
250     };
251
252     float4 main(PixelShaderInput input) : SV_TARGET
253     {
254         const float3 offset = {0.0, -0.501960814, -0.501960814};
255         const float3 Rcoeff = {1.0000,  0.0000,  1.4020};
256         const float3 Gcoeff = {1.0000, -0.3441, -0.7141};
257         const float3 Bcoeff = {1.0000,  1.7720,  0.0000};
258
259         float4 Output;
260
261         float3 yuv;
262         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
263         yuv.y = theTextureU.Sample(theSampler, input.tex).r;
264         yuv.z = theTextureV.Sample(theSampler, input.tex).r;
265
266         yuv += offset;
267         Output.r = dot(yuv, Rcoeff);
268         Output.g = dot(yuv, Gcoeff);
269         Output.b = dot(yuv, Bcoeff);
270         Output.a = 1.0f;
271
272         return Output * input.color;
273     }
274
275 */
276 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
277 static const DWORD D3D11_PixelShader_YUV_JPEG[] = {
278     0x43425844, 0x10359e9c, 0x92c3d2c4, 0x00bf0cd5, 0x5ce8c499, 0x00000001,
279     0x000005e8, 0x00000006, 0x00000038, 0x000001dc, 0x000003bc, 0x00000438,
280     0x00000540, 0x000005b4, 0x396e6f41, 0x0000019c, 0x0000019c, 0xffff0200,
281     0x0000016c, 0x00000030, 0x00300000, 0x00300000, 0x00300000, 0x00240003,
282     0x00300000, 0x00000000, 0x00010001, 0x00020002, 0xffff0200, 0x05000051,
283     0xa00f0000, 0x00000000, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051,
284     0xa00f0001, 0x3f800000, 0x3fb374bc, 0x00000000, 0x00000000, 0x05000051,
285     0xa00f0002, 0x3f800000, 0xbeb02de0, 0xbf36cf42, 0x00000000, 0x05000051,
286     0xa00f0003, 0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000, 0x0200001f,
287     0x80000000, 0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f,
288     0x90000000, 0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x0200001f,
289     0x90000000, 0xa00f0802, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40800,
290     0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0002,
291     0xb0e40000, 0xa0e40802, 0x02000001, 0x80020000, 0x80000001, 0x02000001,
292     0x80040000, 0x80000002, 0x03000002, 0x80070000, 0x80e40000, 0xa0e40000,
293     0x03000005, 0x80080000, 0x80000000, 0xa0000001, 0x04000004, 0x80010001,
294     0x80aa0000, 0xa0550001, 0x80ff0000, 0x03000008, 0x80020001, 0x80e40000,
295     0xa0e40002, 0x0400005a, 0x80040001, 0x80e40000, 0xa0e40003, 0xa0aa0003,
296     0x02000001, 0x80080001, 0xa0ff0000, 0x03000005, 0x800f0000, 0x80e40001,
297     0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff, 0x52444853,
298     0x000001d8, 0x00000040, 0x00000076, 0x0300005a, 0x00106000, 0x00000000,
299     0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x04001858, 0x00107000,
300     0x00000001, 0x00005555, 0x04001858, 0x00107000, 0x00000002, 0x00005555,
301     0x03001062, 0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002,
302     0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045,
303     0x001000f2, 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000,
304     0x00106000, 0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046,
305     0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036,
306     0x00100022, 0x00000000, 0x0010000a, 0x00000001, 0x09000045, 0x001000f2,
307     0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000002, 0x00106000,
308     0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x0010000a, 0x00000001,
309     0x0a000000, 0x00100072, 0x00000000, 0x00100246, 0x00000000, 0x00004002,
310     0x00000000, 0xbf008081, 0xbf008081, 0x00000000, 0x0a00000f, 0x00100012,
311     0x00000001, 0x00100086, 0x00000000, 0x00004002, 0x3f800000, 0x3fb374bc,
312     0x00000000, 0x00000000, 0x0a000010, 0x00100022, 0x00000001, 0x00100246,
313     0x00000000, 0x00004002, 0x3f800000, 0xbeb02de0, 0xbf36cf42, 0x00000000,
314     0x0a00000f, 0x00100042, 0x00000001, 0x00100046, 0x00000000, 0x00004002,
315     0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000, 0x05000036, 0x00100082,
316     0x00000001, 0x00004001, 0x3f800000, 0x07000038, 0x001020f2, 0x00000000,
317     0x00100e46, 0x00000001, 0x00101e46, 0x00000002, 0x0100003e, 0x54415453,
318     0x00000074, 0x0000000c, 0x00000002, 0x00000000, 0x00000003, 0x00000005,
319     0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
320     0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000,
321     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
322     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
323     0x46454452, 0x00000100, 0x00000000, 0x00000000, 0x00000004, 0x0000001c,
324     0xffff0400, 0x00000100, 0x000000cb, 0x0000009c, 0x00000003, 0x00000000,
325     0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x000000a7,
326     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000000, 0x00000001,
327     0x0000000d, 0x000000b3, 0x00000002, 0x00000005, 0x00000004, 0xffffffff,
328     0x00000001, 0x00000001, 0x0000000d, 0x000000bf, 0x00000002, 0x00000005,
329     0x00000004, 0xffffffff, 0x00000002, 0x00000001, 0x0000000d, 0x53656874,
330     0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965, 0x65546568,
331     0x72757478, 0x74005565, 0x65546568, 0x72757478, 0x4d005665, 0x6f726369,
332     0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
333     0x656c6970, 0x2e362072, 0x36392e33, 0x312e3030, 0x34383336, 0xababab00,
334     0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000,
335     0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000,
336     0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000,
337     0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f,
338     0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f,
339     0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
340     0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
341 };
342 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
343 static const DWORD D3D11_PixelShader_YUV_JPEG[] = {
344     0x43425844, 0x616d6673, 0x83174178, 0x15aac25d, 0x2a340487, 0x00000001,
345     0x000005c0, 0x00000006, 0x00000038, 0x000001b4, 0x00000394, 0x00000410,
346     0x00000518, 0x0000058c, 0x396e6f41, 0x00000174, 0x00000174, 0xffff0200,
347     0x00000144, 0x00000030, 0x00300000, 0x00300000, 0x00300000, 0x00240003,
348     0x00300000, 0x00000000, 0x00010001, 0x00020002, 0xffff0201, 0x05000051,
349     0xa00f0000, 0x00000000, 0xbf008081, 0x3f800000, 0x3fb374bc, 0x05000051,
350     0xa00f0001, 0x3f800000, 0xbeb02de0, 0xbf36cf42, 0x00000000, 0x05000051,
351     0xa00f0002, 0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000, 0x0200001f,
352     0x80000000, 0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f,
353     0x90000000, 0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x0200001f,
354     0x90000000, 0xa00f0802, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40801,
355     0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800, 0x02000001, 0x80020001,
356     0x80000000, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40802, 0x02000001,
357     0x80040001, 0x80000000, 0x03000002, 0x80070000, 0x80e40001, 0xa0d40000,
358     0x0400005a, 0x80010001, 0x80e80000, 0xa0ee0000, 0xa0000000, 0x03000008,
359     0x80020001, 0x80e40000, 0xa0e40001, 0x0400005a, 0x80040001, 0x80e40000,
360     0xa0e40002, 0xa0aa0002, 0x02000001, 0x80080001, 0xa0aa0000, 0x03000005,
361     0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000,
362     0x0000ffff, 0x52444853, 0x000001d8, 0x00000040, 0x00000076, 0x0300005a,
363     0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555,
364     0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x04001858, 0x00107000,
365     0x00000002, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03001062,
366     0x001010f2, 0x00000002, 0x03000065, 0x001020f2, 0x00000000, 0x02000068,
367     0x00000002, 0x09000045, 0x001000f2, 0x00000000, 0x00101046, 0x00000001,
368     0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x09000045, 0x001000f2,
369     0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000,
370     0x00000000, 0x05000036, 0x00100022, 0x00000000, 0x0010000a, 0x00000001,
371     0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46,
372     0x00000002, 0x00106000, 0x00000000, 0x05000036, 0x00100042, 0x00000000,
373     0x0010000a, 0x00000001, 0x0a000000, 0x00100072, 0x00000000, 0x00100246,
374     0x00000000, 0x00004002, 0x00000000, 0xbf008081, 0xbf008081, 0x00000000,
375     0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000, 0x00004002,
376     0x3f800000, 0x3fb374bc, 0x00000000, 0x00000000, 0x0a000010, 0x00100022,
377     0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f800000, 0xbeb02de0,
378     0xbf36cf42, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001, 0x00100046,
379     0x00000000, 0x00004002, 0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000,
380     0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000, 0x07000038,
381     0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46, 0x00000002,
382     0x0100003e, 0x54415453, 0x00000074, 0x0000000c, 0x00000002, 0x00000000,
383     0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
384     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
385     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
386     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
387     0x00000000, 0x00000000, 0x46454452, 0x00000100, 0x00000000, 0x00000000,
388     0x00000004, 0x0000001c, 0xffff0400, 0x00000100, 0x000000cb, 0x0000009c,
389     0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
390     0x00000001, 0x000000a7, 0x00000002, 0x00000005, 0x00000004, 0xffffffff,
391     0x00000000, 0x00000001, 0x0000000d, 0x000000b3, 0x00000002, 0x00000005,
392     0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d, 0x000000bf,
393     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000002, 0x00000001,
394     0x0000000d, 0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478,
395     0x74005965, 0x65546568, 0x72757478, 0x74005565, 0x65546568, 0x72757478,
396     0x4d005665, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
397     0x72656461, 0x6d6f4320, 0x656c6970, 0x2e362072, 0x36392e33, 0x312e3030,
398     0x34383336, 0xababab00, 0x4e475349, 0x0000006c, 0x00000003, 0x00000008,
399     0x00000050, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f,
400     0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303,
401     0x00000065, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000f0f,
402     0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300,
403     0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
404     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x545f5653,
405     0x45475241, 0xabab0054
406 };
407 #else
408 #error "An appropriate 'yuv' pixel shader is not defined."
409 #endif
410
411 /* The yuv-rendering pixel shader:
412
413     --- D3D11_PixelShader_YUV_BT601.hlsl ---
414     Texture2D theTextureY : register(t0);
415     Texture2D theTextureU : register(t1);
416     Texture2D theTextureV : register(t2);
417     SamplerState theSampler : register(s0);
418
419     struct PixelShaderInput
420     {
421         float4 pos : SV_POSITION;
422         float2 tex : TEXCOORD0;
423         float4 color : COLOR0;
424     };
425
426     float4 main(PixelShaderInput input) : SV_TARGET
427     {
428         const float3 offset = {-0.0627451017, -0.501960814, -0.501960814};
429         const float3 Rcoeff = {1.1644,  0.0000,  1.5960};
430         const float3 Gcoeff = {1.1644, -0.3918, -0.8130};
431         const float3 Bcoeff = {1.1644,  2.0172,  0.0000};
432
433         float4 Output;
434
435         float3 yuv;
436         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
437         yuv.y = theTextureU.Sample(theSampler, input.tex).r;
438         yuv.z = theTextureV.Sample(theSampler, input.tex).r;
439
440         yuv += offset;
441         Output.r = dot(yuv, Rcoeff);
442         Output.g = dot(yuv, Gcoeff);
443         Output.b = dot(yuv, Bcoeff);
444         Output.a = 1.0f;
445
446         return Output * input.color;
447     }
448
449 */
450 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
451 static const DWORD D3D11_PixelShader_YUV_BT601[] = {
452     0x43425844, 0x628ec838, 0xbe9cec6a, 0xc9ee10bb, 0x63283218, 0x00000001,
453     0x000005e8, 0x00000006, 0x00000038, 0x000001dc, 0x000003bc, 0x00000438,
454     0x00000540, 0x000005b4, 0x396e6f41, 0x0000019c, 0x0000019c, 0xffff0200,
455     0x0000016c, 0x00000030, 0x00300000, 0x00300000, 0x00300000, 0x00240003,
456     0x00300000, 0x00000000, 0x00010001, 0x00020002, 0xffff0200, 0x05000051,
457     0xa00f0000, 0xbd808081, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051,
458     0xa00f0001, 0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x00000000, 0x05000051,
459     0xa00f0002, 0x3f950b0f, 0xbec89a02, 0xbf5020c5, 0x00000000, 0x05000051,
460     0xa00f0003, 0x3f950b0f, 0x400119ce, 0x00000000, 0x00000000, 0x0200001f,
461     0x80000000, 0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f,
462     0x90000000, 0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x0200001f,
463     0x90000000, 0xa00f0802, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40800,
464     0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0002,
465     0xb0e40000, 0xa0e40802, 0x02000001, 0x80020000, 0x80000001, 0x02000001,
466     0x80040000, 0x80000002, 0x03000002, 0x80070000, 0x80e40000, 0xa0e40000,
467     0x03000005, 0x80080000, 0x80000000, 0xa0000001, 0x04000004, 0x80010001,
468     0x80aa0000, 0xa0550001, 0x80ff0000, 0x03000008, 0x80020001, 0x80e40000,
469     0xa0e40002, 0x0400005a, 0x80040001, 0x80e40000, 0xa0e40003, 0xa0aa0003,
470     0x02000001, 0x80080001, 0xa0ff0000, 0x03000005, 0x800f0000, 0x80e40001,
471     0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff, 0x52444853,
472     0x000001d8, 0x00000040, 0x00000076, 0x0300005a, 0x00106000, 0x00000000,
473     0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x04001858, 0x00107000,
474     0x00000001, 0x00005555, 0x04001858, 0x00107000, 0x00000002, 0x00005555,
475     0x03001062, 0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002,
476     0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045,
477     0x001000f2, 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000,
478     0x00106000, 0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046,
479     0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036,
480     0x00100022, 0x00000000, 0x0010000a, 0x00000001, 0x09000045, 0x001000f2,
481     0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000002, 0x00106000,
482     0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x0010000a, 0x00000001,
483     0x0a000000, 0x00100072, 0x00000000, 0x00100246, 0x00000000, 0x00004002,
484     0xbd808081, 0xbf008081, 0xbf008081, 0x00000000, 0x0a00000f, 0x00100012,
485     0x00000001, 0x00100086, 0x00000000, 0x00004002, 0x3f950b0f, 0x3fcc49ba,
486     0x00000000, 0x00000000, 0x0a000010, 0x00100022, 0x00000001, 0x00100246,
487     0x00000000, 0x00004002, 0x3f950b0f, 0xbec89a02, 0xbf5020c5, 0x00000000,
488     0x0a00000f, 0x00100042, 0x00000001, 0x00100046, 0x00000000, 0x00004002,
489     0x3f950b0f, 0x400119ce, 0x00000000, 0x00000000, 0x05000036, 0x00100082,
490     0x00000001, 0x00004001, 0x3f800000, 0x07000038, 0x001020f2, 0x00000000,
491     0x00100e46, 0x00000001, 0x00101e46, 0x00000002, 0x0100003e, 0x54415453,
492     0x00000074, 0x0000000c, 0x00000002, 0x00000000, 0x00000003, 0x00000005,
493     0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
494     0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000,
495     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
496     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
497     0x46454452, 0x00000100, 0x00000000, 0x00000000, 0x00000004, 0x0000001c,
498     0xffff0400, 0x00000100, 0x000000cb, 0x0000009c, 0x00000003, 0x00000000,
499     0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x000000a7,
500     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000000, 0x00000001,
501     0x0000000d, 0x000000b3, 0x00000002, 0x00000005, 0x00000004, 0xffffffff,
502     0x00000001, 0x00000001, 0x0000000d, 0x000000bf, 0x00000002, 0x00000005,
503     0x00000004, 0xffffffff, 0x00000002, 0x00000001, 0x0000000d, 0x53656874,
504     0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965, 0x65546568,
505     0x72757478, 0x74005565, 0x65546568, 0x72757478, 0x4d005665, 0x6f726369,
506     0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
507     0x656c6970, 0x2e362072, 0x36392e33, 0x312e3030, 0x34383336, 0xababab00,
508     0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000,
509     0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000,
510     0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000,
511     0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f,
512     0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f,
513     0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
514     0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
515 };
516 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
517 static const DWORD D3D11_PixelShader_YUV_BT601[] = {
518     0x43425844, 0x692b159b, 0xf58723cc, 0xf4ceac9e, 0x35eec738, 0x00000001,
519     0x000005c0, 0x00000006, 0x00000038, 0x000001b4, 0x00000394, 0x00000410,
520     0x00000518, 0x0000058c, 0x396e6f41, 0x00000174, 0x00000174, 0xffff0200,
521     0x00000144, 0x00000030, 0x00300000, 0x00300000, 0x00300000, 0x00240003,
522     0x00300000, 0x00000000, 0x00010001, 0x00020002, 0xffff0201, 0x05000051,
523     0xa00f0000, 0xbd808081, 0xbf008081, 0x3f800000, 0x00000000, 0x05000051,
524     0xa00f0001, 0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x400119ce, 0x05000051,
525     0xa00f0002, 0x3f950b0f, 0xbec89a02, 0xbf5020c5, 0x00000000, 0x0200001f,
526     0x80000000, 0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f,
527     0x90000000, 0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x0200001f,
528     0x90000000, 0xa00f0802, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40801,
529     0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800, 0x02000001, 0x80020001,
530     0x80000000, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40802, 0x02000001,
531     0x80040001, 0x80000000, 0x03000002, 0x80070000, 0x80e40001, 0xa0d40000,
532     0x0400005a, 0x80010001, 0x80e80000, 0xa0e40001, 0xa0aa0001, 0x03000008,
533     0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001, 0x80e40000,
534     0xa0ec0001, 0xa0aa0001, 0x02000001, 0x80080001, 0xa0aa0000, 0x03000005,
535     0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000,
536     0x0000ffff, 0x52444853, 0x000001d8, 0x00000040, 0x00000076, 0x0300005a,
537     0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555,
538     0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x04001858, 0x00107000,
539     0x00000002, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03001062,
540     0x001010f2, 0x00000002, 0x03000065, 0x001020f2, 0x00000000, 0x02000068,
541     0x00000002, 0x09000045, 0x001000f2, 0x00000000, 0x00101046, 0x00000001,
542     0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x09000045, 0x001000f2,
543     0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000,
544     0x00000000, 0x05000036, 0x00100022, 0x00000000, 0x0010000a, 0x00000001,
545     0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46,
546     0x00000002, 0x00106000, 0x00000000, 0x05000036, 0x00100042, 0x00000000,
547     0x0010000a, 0x00000001, 0x0a000000, 0x00100072, 0x00000000, 0x00100246,
548     0x00000000, 0x00004002, 0xbd808081, 0xbf008081, 0xbf008081, 0x00000000,
549     0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000, 0x00004002,
550     0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x00000000, 0x0a000010, 0x00100022,
551     0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f950b0f, 0xbec89a02,
552     0xbf5020c5, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001, 0x00100046,
553     0x00000000, 0x00004002, 0x3f950b0f, 0x400119ce, 0x00000000, 0x00000000,
554     0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000, 0x07000038,
555     0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46, 0x00000002,
556     0x0100003e, 0x54415453, 0x00000074, 0x0000000c, 0x00000002, 0x00000000,
557     0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
558     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
559     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
560     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
561     0x00000000, 0x00000000, 0x46454452, 0x00000100, 0x00000000, 0x00000000,
562     0x00000004, 0x0000001c, 0xffff0400, 0x00000100, 0x000000cb, 0x0000009c,
563     0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
564     0x00000001, 0x000000a7, 0x00000002, 0x00000005, 0x00000004, 0xffffffff,
565     0x00000000, 0x00000001, 0x0000000d, 0x000000b3, 0x00000002, 0x00000005,
566     0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d, 0x000000bf,
567     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000002, 0x00000001,
568     0x0000000d, 0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478,
569     0x74005965, 0x65546568, 0x72757478, 0x74005565, 0x65546568, 0x72757478,
570     0x4d005665, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
571     0x72656461, 0x6d6f4320, 0x656c6970, 0x2e362072, 0x36392e33, 0x312e3030,
572     0x34383336, 0xababab00, 0x4e475349, 0x0000006c, 0x00000003, 0x00000008,
573     0x00000050, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f,
574     0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303,
575     0x00000065, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000f0f,
576     0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300,
577     0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
578     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x545f5653,
579     0x45475241, 0xabab0054
580 };
581 #else
582 #error "An appropriate 'yuv' pixel shader is not defined."
583 #endif
584
585 /* The yuv-rendering pixel shader:
586
587     --- D3D11_PixelShader_YUV_BT709.hlsl ---
588     Texture2D theTextureY : register(t0);
589     Texture2D theTextureU : register(t1);
590     Texture2D theTextureV : register(t2);
591     SamplerState theSampler : register(s0);
592
593     struct PixelShaderInput
594     {
595         float4 pos : SV_POSITION;
596         float2 tex : TEXCOORD0;
597         float4 color : COLOR0;
598     };
599
600     float4 main(PixelShaderInput input) : SV_TARGET
601     {
602         const float3 offset = {-0.0627451017, -0.501960814, -0.501960814};
603         const float3 Rcoeff = {1.1644,  0.0000,  1.7927};
604         const float3 Gcoeff = {1.1644, -0.2132, -0.5329};
605         const float3 Bcoeff = {1.1644,  2.1124,  0.0000};
606
607         float4 Output;
608
609         float3 yuv;
610         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
611         yuv.y = theTextureU.Sample(theSampler, input.tex).r;
612         yuv.z = theTextureV.Sample(theSampler, input.tex).r;
613
614         yuv += offset;
615         Output.r = dot(yuv, Rcoeff);
616         Output.g = dot(yuv, Gcoeff);
617         Output.b = dot(yuv, Bcoeff);
618         Output.a = 1.0f;
619
620         return Output * input.color;
621     }
622
623 */
624 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
625 static const DWORD D3D11_PixelShader_YUV_BT709[] = {
626     0x43425844, 0x5045fa84, 0xc2908cce, 0x278dacc3, 0xd4276f8f, 0x00000001,
627     0x000005e8, 0x00000006, 0x00000038, 0x000001dc, 0x000003bc, 0x00000438,
628     0x00000540, 0x000005b4, 0x396e6f41, 0x0000019c, 0x0000019c, 0xffff0200,
629     0x0000016c, 0x00000030, 0x00300000, 0x00300000, 0x00300000, 0x00240003,
630     0x00300000, 0x00000000, 0x00010001, 0x00020002, 0xffff0200, 0x05000051,
631     0xa00f0000, 0xbd808081, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051,
632     0xa00f0001, 0x3f950b0f, 0x3fe57732, 0x00000000, 0x00000000, 0x05000051,
633     0xa00f0002, 0x3f950b0f, 0xbe5a511a, 0xbf086c22, 0x00000000, 0x05000051,
634     0xa00f0003, 0x3f950b0f, 0x40073190, 0x00000000, 0x00000000, 0x0200001f,
635     0x80000000, 0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f,
636     0x90000000, 0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x0200001f,
637     0x90000000, 0xa00f0802, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40800,
638     0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0002,
639     0xb0e40000, 0xa0e40802, 0x02000001, 0x80020000, 0x80000001, 0x02000001,
640     0x80040000, 0x80000002, 0x03000002, 0x80070000, 0x80e40000, 0xa0e40000,
641     0x03000005, 0x80080000, 0x80000000, 0xa0000001, 0x04000004, 0x80010001,
642     0x80aa0000, 0xa0550001, 0x80ff0000, 0x03000008, 0x80020001, 0x80e40000,
643     0xa0e40002, 0x0400005a, 0x80040001, 0x80e40000, 0xa0e40003, 0xa0aa0003,
644     0x02000001, 0x80080001, 0xa0ff0000, 0x03000005, 0x800f0000, 0x80e40001,
645     0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff, 0x52444853,
646     0x000001d8, 0x00000040, 0x00000076, 0x0300005a, 0x00106000, 0x00000000,
647     0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x04001858, 0x00107000,
648     0x00000001, 0x00005555, 0x04001858, 0x00107000, 0x00000002, 0x00005555,
649     0x03001062, 0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002,
650     0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045,
651     0x001000f2, 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000,
652     0x00106000, 0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046,
653     0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036,
654     0x00100022, 0x00000000, 0x0010000a, 0x00000001, 0x09000045, 0x001000f2,
655     0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000002, 0x00106000,
656     0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x0010000a, 0x00000001,
657     0x0a000000, 0x00100072, 0x00000000, 0x00100246, 0x00000000, 0x00004002,
658     0xbd808081, 0xbf008081, 0xbf008081, 0x00000000, 0x0a00000f, 0x00100012,
659     0x00000001, 0x00100086, 0x00000000, 0x00004002, 0x3f950b0f, 0x3fe57732,
660     0x00000000, 0x00000000, 0x0a000010, 0x00100022, 0x00000001, 0x00100246,
661     0x00000000, 0x00004002, 0x3f950b0f, 0xbe5a511a, 0xbf086c22, 0x00000000,
662     0x0a00000f, 0x00100042, 0x00000001, 0x00100046, 0x00000000, 0x00004002,
663     0x3f950b0f, 0x40073190, 0x00000000, 0x00000000, 0x05000036, 0x00100082,
664     0x00000001, 0x00004001, 0x3f800000, 0x07000038, 0x001020f2, 0x00000000,
665     0x00100e46, 0x00000001, 0x00101e46, 0x00000002, 0x0100003e, 0x54415453,
666     0x00000074, 0x0000000c, 0x00000002, 0x00000000, 0x00000003, 0x00000005,
667     0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
668     0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000,
669     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
670     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
671     0x46454452, 0x00000100, 0x00000000, 0x00000000, 0x00000004, 0x0000001c,
672     0xffff0400, 0x00000100, 0x000000cb, 0x0000009c, 0x00000003, 0x00000000,
673     0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x000000a7,
674     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000000, 0x00000001,
675     0x0000000d, 0x000000b3, 0x00000002, 0x00000005, 0x00000004, 0xffffffff,
676     0x00000001, 0x00000001, 0x0000000d, 0x000000bf, 0x00000002, 0x00000005,
677     0x00000004, 0xffffffff, 0x00000002, 0x00000001, 0x0000000d, 0x53656874,
678     0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965, 0x65546568,
679     0x72757478, 0x74005565, 0x65546568, 0x72757478, 0x4d005665, 0x6f726369,
680     0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
681     0x656c6970, 0x2e362072, 0x36392e33, 0x312e3030, 0x34383336, 0xababab00,
682     0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000,
683     0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000,
684     0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000,
685     0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f,
686     0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f,
687     0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
688     0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
689 };
690 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
691 static const DWORD D3D11_PixelShader_YUV_BT709[] = {
692     0x43425844, 0x72d13260, 0xf6c36f65, 0x8b9b28f5, 0x5010733c, 0x00000001,
693     0x000005c0, 0x00000006, 0x00000038, 0x000001b4, 0x00000394, 0x00000410,
694     0x00000518, 0x0000058c, 0x396e6f41, 0x00000174, 0x00000174, 0xffff0200,
695     0x00000144, 0x00000030, 0x00300000, 0x00300000, 0x00300000, 0x00240003,
696     0x00300000, 0x00000000, 0x00010001, 0x00020002, 0xffff0201, 0x05000051,
697     0xa00f0000, 0xbd808081, 0xbf008081, 0x3f800000, 0x00000000, 0x05000051,
698     0xa00f0001, 0x3f950b0f, 0x3fe57732, 0x00000000, 0x40073190, 0x05000051,
699     0xa00f0002, 0x3f950b0f, 0xbe5a511a, 0xbf086c22, 0x00000000, 0x0200001f,
700     0x80000000, 0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f,
701     0x90000000, 0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x0200001f,
702     0x90000000, 0xa00f0802, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40801,
703     0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800, 0x02000001, 0x80020001,
704     0x80000000, 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40802, 0x02000001,
705     0x80040001, 0x80000000, 0x03000002, 0x80070000, 0x80e40001, 0xa0d40000,
706     0x0400005a, 0x80010001, 0x80e80000, 0xa0e40001, 0xa0aa0001, 0x03000008,
707     0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001, 0x80e40000,
708     0xa0ec0001, 0xa0aa0001, 0x02000001, 0x80080001, 0xa0aa0000, 0x03000005,
709     0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000,
710     0x0000ffff, 0x52444853, 0x000001d8, 0x00000040, 0x00000076, 0x0300005a,
711     0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555,
712     0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x04001858, 0x00107000,
713     0x00000002, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03001062,
714     0x001010f2, 0x00000002, 0x03000065, 0x001020f2, 0x00000000, 0x02000068,
715     0x00000002, 0x09000045, 0x001000f2, 0x00000000, 0x00101046, 0x00000001,
716     0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x09000045, 0x001000f2,
717     0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000,
718     0x00000000, 0x05000036, 0x00100022, 0x00000000, 0x0010000a, 0x00000001,
719     0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46,
720     0x00000002, 0x00106000, 0x00000000, 0x05000036, 0x00100042, 0x00000000,
721     0x0010000a, 0x00000001, 0x0a000000, 0x00100072, 0x00000000, 0x00100246,
722     0x00000000, 0x00004002, 0xbd808081, 0xbf008081, 0xbf008081, 0x00000000,
723     0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000, 0x00004002,
724     0x3f950b0f, 0x3fe57732, 0x00000000, 0x00000000, 0x0a000010, 0x00100022,
725     0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f950b0f, 0xbe5a511a,
726     0xbf086c22, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001, 0x00100046,
727     0x00000000, 0x00004002, 0x3f950b0f, 0x40073190, 0x00000000, 0x00000000,
728     0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000, 0x07000038,
729     0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46, 0x00000002,
730     0x0100003e, 0x54415453, 0x00000074, 0x0000000c, 0x00000002, 0x00000000,
731     0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
732     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
733     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
734     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
735     0x00000000, 0x00000000, 0x46454452, 0x00000100, 0x00000000, 0x00000000,
736     0x00000004, 0x0000001c, 0xffff0400, 0x00000100, 0x000000cb, 0x0000009c,
737     0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
738     0x00000001, 0x000000a7, 0x00000002, 0x00000005, 0x00000004, 0xffffffff,
739     0x00000000, 0x00000001, 0x0000000d, 0x000000b3, 0x00000002, 0x00000005,
740     0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d, 0x000000bf,
741     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000002, 0x00000001,
742     0x0000000d, 0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478,
743     0x74005965, 0x65546568, 0x72757478, 0x74005565, 0x65546568, 0x72757478,
744     0x4d005665, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
745     0x72656461, 0x6d6f4320, 0x656c6970, 0x2e362072, 0x36392e33, 0x312e3030,
746     0x34383336, 0xababab00, 0x4e475349, 0x0000006c, 0x00000003, 0x00000008,
747     0x00000050, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f,
748     0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303,
749     0x00000065, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000f0f,
750     0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300,
751     0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
752     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x545f5653,
753     0x45475241, 0xabab0054
754 };
755 #else
756 #error "An appropriate 'yuv' pixel shader is not defined."
757 #endif
758
759 /* The yuv-rendering pixel shader:
760
761     --- D3D11_PixelShader_NV12_JPEG.hlsl ---
762     Texture2D theTextureY : register(t0);
763     Texture2D theTextureUV : register(t1);
764     SamplerState theSampler : register(s0);
765
766     struct PixelShaderInput
767     {
768         float4 pos : SV_POSITION;
769         float2 tex : TEXCOORD0;
770         float4 color : COLOR0;
771     };
772
773     float4 main(PixelShaderInput input) : SV_TARGET
774     {
775         const float3 offset = {0.0, -0.501960814, -0.501960814};
776         const float3 Rcoeff = {1.0000,  0.0000,  1.4020};
777         const float3 Gcoeff = {1.0000, -0.3441, -0.7141};
778         const float3 Bcoeff = {1.0000,  1.7720,  0.0000};
779
780         float4 Output;
781
782         float3 yuv;
783         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
784         yuv.yz = theTextureUV.Sample(theSampler, input.tex).rg;
785
786         yuv += offset;
787         Output.r = dot(yuv, Rcoeff);
788         Output.g = dot(yuv, Gcoeff);
789         Output.b = dot(yuv, Bcoeff);
790         Output.a = 1.0f;
791
792         return Output * input.color;
793     }
794
795 */
796 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
797 static const DWORD D3D11_PixelShader_NV12_JPEG[] = {
798     0x43425844, 0x8fb9c77a, 0xe9e39686, 0x62b0e0e9, 0xd2bf8183, 0x00000001,
799     0x00000548, 0x00000006, 0x00000038, 0x000001b0, 0x00000348, 0x000003c4,
800     0x000004a0, 0x00000514, 0x396e6f41, 0x00000170, 0x00000170, 0xffff0200,
801     0x00000144, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
802     0x002c0000, 0x00000000, 0x00010001, 0xffff0200, 0x05000051, 0xa00f0000,
803     0x00000000, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051, 0xa00f0001,
804     0x3f800000, 0x3fb374bc, 0x00000000, 0x00000000, 0x05000051, 0xa00f0002,
805     0x3f800000, 0xbeb02de0, 0xbf36cf42, 0x00000000, 0x05000051, 0xa00f0003,
806     0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
807     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
808     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
809     0xb0e40000, 0xa0e40800, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801,
810     0x02000001, 0x80060000, 0x80d20001, 0x03000002, 0x80070000, 0x80e40000,
811     0xa0e40000, 0x03000005, 0x80080000, 0x80000000, 0xa0000001, 0x04000004,
812     0x80010001, 0x80aa0000, 0xa0550001, 0x80ff0000, 0x03000008, 0x80020001,
813     0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001, 0x80e40000, 0xa0e40003,
814     0xa0aa0003, 0x02000001, 0x80080001, 0xa0ff0000, 0x03000005, 0x800f0000,
815     0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff,
816     0x52444853, 0x00000190, 0x00000040, 0x00000064, 0x0300005a, 0x00106000,
817     0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x04001858,
818     0x00107000, 0x00000001, 0x00005555, 0x03001062, 0x00101032, 0x00000001,
819     0x03001062, 0x001010f2, 0x00000002, 0x03000065, 0x001020f2, 0x00000000,
820     0x02000068, 0x00000002, 0x09000045, 0x001000f2, 0x00000000, 0x00101046,
821     0x00000001, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x09000045,
822     0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000001,
823     0x00106000, 0x00000000, 0x05000036, 0x00100062, 0x00000000, 0x00100106,
824     0x00000001, 0x0a000000, 0x00100072, 0x00000000, 0x00100246, 0x00000000,
825     0x00004002, 0x00000000, 0xbf008081, 0xbf008081, 0x00000000, 0x0a00000f,
826     0x00100012, 0x00000001, 0x00100086, 0x00000000, 0x00004002, 0x3f800000,
827     0x3fb374bc, 0x00000000, 0x00000000, 0x0a000010, 0x00100022, 0x00000001,
828     0x00100246, 0x00000000, 0x00004002, 0x3f800000, 0xbeb02de0, 0xbf36cf42,
829     0x00000000, 0x0a00000f, 0x00100042, 0x00000001, 0x00100046, 0x00000000,
830     0x00004002, 0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000, 0x05000036,
831     0x00100082, 0x00000001, 0x00004001, 0x3f800000, 0x07000038, 0x001020f2,
832     0x00000000, 0x00100e46, 0x00000001, 0x00101e46, 0x00000002, 0x0100003e,
833     0x54415453, 0x00000074, 0x0000000a, 0x00000002, 0x00000000, 0x00000003,
834     0x00000005, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
835     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000,
836     0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
837     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
838     0x00000000, 0x46454452, 0x000000d4, 0x00000000, 0x00000000, 0x00000003,
839     0x0000001c, 0xffff0400, 0x00000100, 0x000000a0, 0x0000007c, 0x00000003,
840     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
841     0x00000087, 0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000000,
842     0x00000001, 0x0000000d, 0x00000093, 0x00000002, 0x00000005, 0x00000004,
843     0xffffffff, 0x00000001, 0x00000001, 0x0000000d, 0x53656874, 0x6c706d61,
844     0x74007265, 0x65546568, 0x72757478, 0x74005965, 0x65546568, 0x72757478,
845     0x00565565, 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53,
846     0x65646168, 0x6f432072, 0x6c69706d, 0x36207265, 0x392e332e, 0x2e303036,
847     0x38333631, 0xabab0034, 0x4e475349, 0x0000006c, 0x00000003, 0x00000008,
848     0x00000050, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f,
849     0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303,
850     0x00000065, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000f0f,
851     0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300,
852     0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
853     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x545f5653,
854     0x45475241, 0xabab0054
855 };
856 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
857 static const DWORD D3D11_PixelShader_NV12_JPEG[] = {
858     0x43425844, 0xe33e5d8b, 0x1b5f6461, 0x1afee99f, 0xcc345c04, 0x00000001,
859     0x00000520, 0x00000006, 0x00000038, 0x00000188, 0x00000320, 0x0000039c,
860     0x00000478, 0x000004ec, 0x396e6f41, 0x00000148, 0x00000148, 0xffff0200,
861     0x0000011c, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
862     0x002c0000, 0x00000000, 0x00010001, 0xffff0201, 0x05000051, 0xa00f0000,
863     0x00000000, 0xbf008081, 0x3f800000, 0x3fb374bc, 0x05000051, 0xa00f0001,
864     0x3f800000, 0xbeb02de0, 0xbf36cf42, 0x00000000, 0x05000051, 0xa00f0002,
865     0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
866     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
867     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
868     0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800,
869     0x02000001, 0x80060001, 0x80d00000, 0x03000002, 0x80070000, 0x80e40001,
870     0xa0d40000, 0x0400005a, 0x80010001, 0x80e80000, 0xa0ee0000, 0xa0000000,
871     0x03000008, 0x80020001, 0x80e40000, 0xa0e40001, 0x0400005a, 0x80040001,
872     0x80e40000, 0xa0e40002, 0xa0aa0002, 0x02000001, 0x80080001, 0xa0aa0000,
873     0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800,
874     0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040, 0x00000064,
875     0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000,
876     0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x03001062,
877     0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065,
878     0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045, 0x001000f2,
879     0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000,
880     0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001,
881     0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036, 0x00100062,
882     0x00000000, 0x00100106, 0x00000001, 0x0a000000, 0x00100072, 0x00000000,
883     0x00100246, 0x00000000, 0x00004002, 0x00000000, 0xbf008081, 0xbf008081,
884     0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000,
885     0x00004002, 0x3f800000, 0x3fb374bc, 0x00000000, 0x00000000, 0x0a000010,
886     0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f800000,
887     0xbeb02de0, 0xbf36cf42, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001,
888     0x00100046, 0x00000000, 0x00004002, 0x3f800000, 0x3fe2d0e5, 0x00000000,
889     0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000,
890     0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46,
891     0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a, 0x00000002,
892     0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001,
893     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
894     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002,
895     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
896     0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4, 0x00000000,
897     0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100, 0x000000a0,
898     0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
899     0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005, 0x00000004,
900     0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093, 0x00000002,
901     0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d,
902     0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965,
903     0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f, 0x52282074,
904     0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x36207265,
905     0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349, 0x0000006c,
906     0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001, 0x00000003,
907     0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000, 0x00000003,
908     0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000, 0x00000003,
909     0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554,
910     0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001,
911     0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
912     0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
913 };
914 #else
915 #error "An appropriate 'yuv' pixel shader is not defined."
916 #endif
917
918 /* The yuv-rendering pixel shader:
919
920     --- D3D11_PixelShader_NV12_BT601.hlsl ---
921     Texture2D theTextureY : register(t0);
922     Texture2D theTextureUV : register(t1);
923     SamplerState theSampler : register(s0);
924
925     struct PixelShaderInput
926     {
927         float4 pos : SV_POSITION;
928         float2 tex : TEXCOORD0;
929         float4 color : COLOR0;
930     };
931
932     float4 main(PixelShaderInput input) : SV_TARGET
933     {
934         const float3 offset = {-0.0627451017, -0.501960814, -0.501960814};
935         const float3 Rcoeff = {1.1644,  0.0000,  1.5960};
936         const float3 Gcoeff = {1.1644, -0.3918, -0.8130};
937         const float3 Bcoeff = {1.1644,  2.0172,  0.0000};
938
939         float4 Output;
940
941         float3 yuv;
942         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
943         yuv.yz = theTextureUV.Sample(theSampler, input.tex).rg;
944
945         yuv += offset;
946         Output.r = dot(yuv, Rcoeff);
947         Output.g = dot(yuv, Gcoeff);
948         Output.b = dot(yuv, Bcoeff);
949         Output.a = 1.0f;
950
951         return Output * input.color;
952     }
953
954 */
955 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
956 static const DWORD D3D11_PixelShader_NV12_BT601[] = {
957     0x43425844, 0xd1d24a0c, 0x337c447a, 0x22b55cff, 0xb5c9c74b, 0x00000001,
958     0x00000548, 0x00000006, 0x00000038, 0x000001b0, 0x00000348, 0x000003c4,
959     0x000004a0, 0x00000514, 0x396e6f41, 0x00000170, 0x00000170, 0xffff0200,
960     0x00000144, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
961     0x002c0000, 0x00000000, 0x00010001, 0xffff0200, 0x05000051, 0xa00f0000,
962     0xbd808081, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051, 0xa00f0001,
963     0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x00000000, 0x05000051, 0xa00f0002,
964     0x3f950b0f, 0xbec89a02, 0xbf5020c5, 0x00000000, 0x05000051, 0xa00f0003,
965     0x3f950b0f, 0x400119ce, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
966     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
967     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
968     0xb0e40000, 0xa0e40800, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801,
969     0x02000001, 0x80060000, 0x80d20001, 0x03000002, 0x80070000, 0x80e40000,
970     0xa0e40000, 0x03000005, 0x80080000, 0x80000000, 0xa0000001, 0x04000004,
971     0x80010001, 0x80aa0000, 0xa0550001, 0x80ff0000, 0x03000008, 0x80020001,
972     0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001, 0x80e40000, 0xa0e40003,
973     0xa0aa0003, 0x02000001, 0x80080001, 0xa0ff0000, 0x03000005, 0x800f0000,
974     0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff,
975     0x52444853, 0x00000190, 0x00000040, 0x00000064, 0x0300005a, 0x00106000,
976     0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x04001858,
977     0x00107000, 0x00000001, 0x00005555, 0x03001062, 0x00101032, 0x00000001,
978     0x03001062, 0x001010f2, 0x00000002, 0x03000065, 0x001020f2, 0x00000000,
979     0x02000068, 0x00000002, 0x09000045, 0x001000f2, 0x00000000, 0x00101046,
980     0x00000001, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x09000045,
981     0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000001,
982     0x00106000, 0x00000000, 0x05000036, 0x00100062, 0x00000000, 0x00100106,
983     0x00000001, 0x0a000000, 0x00100072, 0x00000000, 0x00100246, 0x00000000,
984     0x00004002, 0xbd808081, 0xbf008081, 0xbf008081, 0x00000000, 0x0a00000f,
985     0x00100012, 0x00000001, 0x00100086, 0x00000000, 0x00004002, 0x3f950b0f,
986     0x3fcc49ba, 0x00000000, 0x00000000, 0x0a000010, 0x00100022, 0x00000001,
987     0x00100246, 0x00000000, 0x00004002, 0x3f950b0f, 0xbec89a02, 0xbf5020c5,
988     0x00000000, 0x0a00000f, 0x00100042, 0x00000001, 0x00100046, 0x00000000,
989     0x00004002, 0x3f950b0f, 0x400119ce, 0x00000000, 0x00000000, 0x05000036,
990     0x00100082, 0x00000001, 0x00004001, 0x3f800000, 0x07000038, 0x001020f2,
991     0x00000000, 0x00100e46, 0x00000001, 0x00101e46, 0x00000002, 0x0100003e,
992     0x54415453, 0x00000074, 0x0000000a, 0x00000002, 0x00000000, 0x00000003,
993     0x00000005, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
994     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000,
995     0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
996     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
997     0x00000000, 0x46454452, 0x000000d4, 0x00000000, 0x00000000, 0x00000003,
998     0x0000001c, 0xffff0400, 0x00000100, 0x000000a0, 0x0000007c, 0x00000003,
999     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
1000     0x00000087, 0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000000,
1001     0x00000001, 0x0000000d, 0x00000093, 0x00000002, 0x00000005, 0x00000004,
1002     0xffffffff, 0x00000001, 0x00000001, 0x0000000d, 0x53656874, 0x6c706d61,
1003     0x74007265, 0x65546568, 0x72757478, 0x74005965, 0x65546568, 0x72757478,
1004     0x00565565, 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53,
1005     0x65646168, 0x6f432072, 0x6c69706d, 0x36207265, 0x392e332e, 0x2e303036,
1006     0x38333631, 0xabab0034, 0x4e475349, 0x0000006c, 0x00000003, 0x00000008,
1007     0x00000050, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f,
1008     0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303,
1009     0x00000065, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000f0f,
1010     0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300,
1011     0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
1012     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x545f5653,
1013     0x45475241, 0xabab0054
1014 };
1015 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
1016 static const DWORD D3D11_PixelShader_NV12_BT601[] = {
1017     0x43425844, 0x84b8b692, 0x589b9edd, 0x51ef2f0b, 0xf7247962, 0x00000001,
1018     0x00000520, 0x00000006, 0x00000038, 0x00000188, 0x00000320, 0x0000039c,
1019     0x00000478, 0x000004ec, 0x396e6f41, 0x00000148, 0x00000148, 0xffff0200,
1020     0x0000011c, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1021     0x002c0000, 0x00000000, 0x00010001, 0xffff0201, 0x05000051, 0xa00f0000,
1022     0xbd808081, 0xbf008081, 0x3f800000, 0x00000000, 0x05000051, 0xa00f0001,
1023     0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x400119ce, 0x05000051, 0xa00f0002,
1024     0x3f950b0f, 0xbec89a02, 0xbf5020c5, 0x00000000, 0x0200001f, 0x80000000,
1025     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1026     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1027     0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800,
1028     0x02000001, 0x80060001, 0x80d00000, 0x03000002, 0x80070000, 0x80e40001,
1029     0xa0d40000, 0x0400005a, 0x80010001, 0x80e80000, 0xa0e40001, 0xa0aa0001,
1030     0x03000008, 0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001,
1031     0x80e40000, 0xa0ec0001, 0xa0aa0001, 0x02000001, 0x80080001, 0xa0aa0000,
1032     0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800,
1033     0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040, 0x00000064,
1034     0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000,
1035     0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x03001062,
1036     0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065,
1037     0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045, 0x001000f2,
1038     0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000,
1039     0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001,
1040     0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036, 0x00100062,
1041     0x00000000, 0x00100106, 0x00000001, 0x0a000000, 0x00100072, 0x00000000,
1042     0x00100246, 0x00000000, 0x00004002, 0xbd808081, 0xbf008081, 0xbf008081,
1043     0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000,
1044     0x00004002, 0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x00000000, 0x0a000010,
1045     0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f950b0f,
1046     0xbec89a02, 0xbf5020c5, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001,
1047     0x00100046, 0x00000000, 0x00004002, 0x3f950b0f, 0x400119ce, 0x00000000,
1048     0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000,
1049     0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46,
1050     0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a, 0x00000002,
1051     0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001,
1052     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1053     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002,
1054     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1055     0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4, 0x00000000,
1056     0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100, 0x000000a0,
1057     0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1058     0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005, 0x00000004,
1059     0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093, 0x00000002,
1060     0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d,
1061     0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965,
1062     0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f, 0x52282074,
1063     0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x36207265,
1064     0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349, 0x0000006c,
1065     0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001, 0x00000003,
1066     0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000, 0x00000003,
1067     0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000, 0x00000003,
1068     0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554,
1069     0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001,
1070     0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
1071     0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
1072 };
1073 #else
1074 #error "An appropriate 'yuv' pixel shader is not defined."
1075 #endif
1076
1077 /* The yuv-rendering pixel shader:
1078
1079     --- D3D11_PixelShader_NV12_BT709.hlsl ---
1080     Texture2D theTextureY : register(t0);
1081     Texture2D theTextureUV : register(t1);
1082     SamplerState theSampler : register(s0);
1083
1084     struct PixelShaderInput
1085     {
1086         float4 pos : SV_POSITION;
1087         float2 tex : TEXCOORD0;
1088         float4 color : COLOR0;
1089     };
1090
1091     float4 main(PixelShaderInput input) : SV_TARGET
1092     {
1093         const float3 offset = {-0.0627451017, -0.501960814, -0.501960814};
1094         const float3 Rcoeff = {1.1644,  0.0000,  1.7927};
1095         const float3 Gcoeff = {1.1644, -0.2132, -0.5329};
1096         const float3 Bcoeff = {1.1644,  2.1124,  0.0000};
1097
1098         float4 Output;
1099
1100         float3 yuv;
1101         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
1102         yuv.yz = theTextureUV.Sample(theSampler, input.tex).rg;
1103
1104         yuv += offset;
1105         Output.r = dot(yuv, Rcoeff);
1106         Output.g = dot(yuv, Gcoeff);
1107         Output.b = dot(yuv, Bcoeff);
1108         Output.a = 1.0f;
1109
1110         return Output * input.color;
1111     }
1112
1113 */
1114 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
1115 static const DWORD D3D11_PixelShader_NV12_BT709[] = {
1116     0x43425844, 0x40d1b8d5, 0xaf4b78b5, 0x907fd0b5, 0xa2d23686, 0x00000001,
1117     0x00000548, 0x00000006, 0x00000038, 0x000001b0, 0x00000348, 0x000003c4,
1118     0x000004a0, 0x00000514, 0x396e6f41, 0x00000170, 0x00000170, 0xffff0200,
1119     0x00000144, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1120     0x002c0000, 0x00000000, 0x00010001, 0xffff0200, 0x05000051, 0xa00f0000,
1121     0xbd808081, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051, 0xa00f0001,
1122     0x3f950b0f, 0x3fe57732, 0x00000000, 0x00000000, 0x05000051, 0xa00f0002,
1123     0x3f950b0f, 0xbe5a511a, 0xbf086c22, 0x00000000, 0x05000051, 0xa00f0003,
1124     0x3f950b0f, 0x40073190, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
1125     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1126     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1127     0xb0e40000, 0xa0e40800, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801,
1128     0x02000001, 0x80060000, 0x80d20001, 0x03000002, 0x80070000, 0x80e40000,
1129     0xa0e40000, 0x03000005, 0x80080000, 0x80000000, 0xa0000001, 0x04000004,
1130     0x80010001, 0x80aa0000, 0xa0550001, 0x80ff0000, 0x03000008, 0x80020001,
1131     0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001, 0x80e40000, 0xa0e40003,
1132     0xa0aa0003, 0x02000001, 0x80080001, 0xa0ff0000, 0x03000005, 0x800f0000,
1133     0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff,
1134     0x52444853, 0x00000190, 0x00000040, 0x00000064, 0x0300005a, 0x00106000,
1135     0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x04001858,
1136     0x00107000, 0x00000001, 0x00005555, 0x03001062, 0x00101032, 0x00000001,
1137     0x03001062, 0x001010f2, 0x00000002, 0x03000065, 0x001020f2, 0x00000000,
1138     0x02000068, 0x00000002, 0x09000045, 0x001000f2, 0x00000000, 0x00101046,
1139     0x00000001, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x09000045,
1140     0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000001,
1141     0x00106000, 0x00000000, 0x05000036, 0x00100062, 0x00000000, 0x00100106,
1142     0x00000001, 0x0a000000, 0x00100072, 0x00000000, 0x00100246, 0x00000000,
1143     0x00004002, 0xbd808081, 0xbf008081, 0xbf008081, 0x00000000, 0x0a00000f,
1144     0x00100012, 0x00000001, 0x00100086, 0x00000000, 0x00004002, 0x3f950b0f,
1145     0x3fe57732, 0x00000000, 0x00000000, 0x0a000010, 0x00100022, 0x00000001,
1146     0x00100246, 0x00000000, 0x00004002, 0x3f950b0f, 0xbe5a511a, 0xbf086c22,
1147     0x00000000, 0x0a00000f, 0x00100042, 0x00000001, 0x00100046, 0x00000000,
1148     0x00004002, 0x3f950b0f, 0x40073190, 0x00000000, 0x00000000, 0x05000036,
1149     0x00100082, 0x00000001, 0x00004001, 0x3f800000, 0x07000038, 0x001020f2,
1150     0x00000000, 0x00100e46, 0x00000001, 0x00101e46, 0x00000002, 0x0100003e,
1151     0x54415453, 0x00000074, 0x0000000a, 0x00000002, 0x00000000, 0x00000003,
1152     0x00000005, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
1153     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000,
1154     0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
1155     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1156     0x00000000, 0x46454452, 0x000000d4, 0x00000000, 0x00000000, 0x00000003,
1157     0x0000001c, 0xffff0400, 0x00000100, 0x000000a0, 0x0000007c, 0x00000003,
1158     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
1159     0x00000087, 0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000000,
1160     0x00000001, 0x0000000d, 0x00000093, 0x00000002, 0x00000005, 0x00000004,
1161     0xffffffff, 0x00000001, 0x00000001, 0x0000000d, 0x53656874, 0x6c706d61,
1162     0x74007265, 0x65546568, 0x72757478, 0x74005965, 0x65546568, 0x72757478,
1163     0x00565565, 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53,
1164     0x65646168, 0x6f432072, 0x6c69706d, 0x36207265, 0x392e332e, 0x2e303036,
1165     0x38333631, 0xabab0034, 0x4e475349, 0x0000006c, 0x00000003, 0x00000008,
1166     0x00000050, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f,
1167     0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303,
1168     0x00000065, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000f0f,
1169     0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300,
1170     0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
1171     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x545f5653,
1172     0x45475241, 0xabab0054
1173 };
1174 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
1175 static const DWORD D3D11_PixelShader_NV12_BT709[] = {
1176     0x43425844, 0xa3bba187, 0x71b6afa9, 0x15998682, 0x2d545cae, 0x00000001,
1177     0x00000520, 0x00000006, 0x00000038, 0x00000188, 0x00000320, 0x0000039c,
1178     0x00000478, 0x000004ec, 0x396e6f41, 0x00000148, 0x00000148, 0xffff0200,
1179     0x0000011c, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1180     0x002c0000, 0x00000000, 0x00010001, 0xffff0201, 0x05000051, 0xa00f0000,
1181     0xbd808081, 0xbf008081, 0x3f800000, 0x00000000, 0x05000051, 0xa00f0001,
1182     0x3f950b0f, 0x3fe57732, 0x00000000, 0x40073190, 0x05000051, 0xa00f0002,
1183     0x3f950b0f, 0xbe5a511a, 0xbf086c22, 0x00000000, 0x0200001f, 0x80000000,
1184     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1185     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1186     0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800,
1187     0x02000001, 0x80060001, 0x80d00000, 0x03000002, 0x80070000, 0x80e40001,
1188     0xa0d40000, 0x0400005a, 0x80010001, 0x80e80000, 0xa0e40001, 0xa0aa0001,
1189     0x03000008, 0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001,
1190     0x80e40000, 0xa0ec0001, 0xa0aa0001, 0x02000001, 0x80080001, 0xa0aa0000,
1191     0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800,
1192     0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040, 0x00000064,
1193     0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000,
1194     0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x03001062,
1195     0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065,
1196     0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045, 0x001000f2,
1197     0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000,
1198     0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001,
1199     0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036, 0x00100062,
1200     0x00000000, 0x00100106, 0x00000001, 0x0a000000, 0x00100072, 0x00000000,
1201     0x00100246, 0x00000000, 0x00004002, 0xbd808081, 0xbf008081, 0xbf008081,
1202     0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000,
1203     0x00004002, 0x3f950b0f, 0x3fe57732, 0x00000000, 0x00000000, 0x0a000010,
1204     0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f950b0f,
1205     0xbe5a511a, 0xbf086c22, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001,
1206     0x00100046, 0x00000000, 0x00004002, 0x3f950b0f, 0x40073190, 0x00000000,
1207     0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000,
1208     0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46,
1209     0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a, 0x00000002,
1210     0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001,
1211     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1212     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002,
1213     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1214     0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4, 0x00000000,
1215     0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100, 0x000000a0,
1216     0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1217     0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005, 0x00000004,
1218     0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093, 0x00000002,
1219     0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d,
1220     0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965,
1221     0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f, 0x52282074,
1222     0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x36207265,
1223     0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349, 0x0000006c,
1224     0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001, 0x00000003,
1225     0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000, 0x00000003,
1226     0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000, 0x00000003,
1227     0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554,
1228     0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001,
1229     0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
1230     0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
1231 };
1232 #else
1233 #error "An appropriate 'yuv' pixel shader is not defined."
1234 #endif
1235
1236 /* The yuv-rendering pixel shader:
1237
1238     --- D3D11_PixelShader_NV21_JPEG.hlsl ---
1239     Texture2D theTextureY : register(t0);
1240     Texture2D theTextureUV : register(t1);
1241     SamplerState theSampler : register(s0);
1242
1243     struct PixelShaderInput
1244     {
1245         float4 pos : SV_POSITION;
1246         float2 tex : TEXCOORD0;
1247         float4 color : COLOR0;
1248     };
1249
1250     float4 main(PixelShaderInput input) : SV_TARGET
1251     {
1252         const float3 offset = {0.0, -0.501960814, -0.501960814};
1253         const float3 Rcoeff = {1.0000,  0.0000,  1.4020};
1254         const float3 Gcoeff = {1.0000, -0.3441, -0.7141};
1255         const float3 Bcoeff = {1.0000,  1.7720,  0.0000};
1256
1257         float4 Output;
1258
1259         float3 yuv;
1260         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
1261         yuv.yz = theTextureUV.Sample(theSampler, input.tex).gr;
1262
1263         yuv += offset;
1264         Output.r = dot(yuv, Rcoeff);
1265         Output.g = dot(yuv, Gcoeff);
1266         Output.b = dot(yuv, Bcoeff);
1267         Output.a = 1.0f;
1268
1269         return Output * input.color;
1270     }
1271
1272 */
1273 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
1274 static const DWORD D3D11_PixelShader_NV21_JPEG[] = {
1275     0x43425844, 0x9c41f579, 0xfd1019d8, 0x7c27e3ae, 0x52e3a5ff, 0x00000001,
1276     0x00000554, 0x00000006, 0x00000038, 0x000001bc, 0x00000354, 0x000003d0,
1277     0x000004ac, 0x00000520, 0x396e6f41, 0x0000017c, 0x0000017c, 0xffff0200,
1278     0x00000150, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1279     0x002c0000, 0x00000000, 0x00010001, 0xffff0200, 0x05000051, 0xa00f0000,
1280     0x00000000, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051, 0xa00f0001,
1281     0x3f800000, 0x3fb374bc, 0x00000000, 0x00000000, 0x05000051, 0xa00f0002,
1282     0x3f800000, 0xbeb02de0, 0xbf36cf42, 0x00000000, 0x05000051, 0xa00f0003,
1283     0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
1284     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1285     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1286     0xb0e40000, 0xa0e40800, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801,
1287     0x02000001, 0x80020000, 0x80550001, 0x02000001, 0x80040000, 0x80000001,
1288     0x03000002, 0x80070000, 0x80e40000, 0xa0e40000, 0x03000005, 0x80080000,
1289     0x80000000, 0xa0000001, 0x04000004, 0x80010001, 0x80aa0000, 0xa0550001,
1290     0x80ff0000, 0x03000008, 0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a,
1291     0x80040001, 0x80e40000, 0xa0e40003, 0xa0aa0003, 0x02000001, 0x80080001,
1292     0xa0ff0000, 0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001,
1293     0x800f0800, 0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040,
1294     0x00000064, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000,
1295     0x00000000, 0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555,
1296     0x03001062, 0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002,
1297     0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045,
1298     0x001000f2, 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000,
1299     0x00106000, 0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046,
1300     0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036,
1301     0x00100062, 0x00000000, 0x00100456, 0x00000001, 0x0a000000, 0x00100072,
1302     0x00000000, 0x00100246, 0x00000000, 0x00004002, 0x00000000, 0xbf008081,
1303     0xbf008081, 0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086,
1304     0x00000000, 0x00004002, 0x3f800000, 0x3fb374bc, 0x00000000, 0x00000000,
1305     0x0a000010, 0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002,
1306     0x3f800000, 0xbeb02de0, 0xbf36cf42, 0x00000000, 0x0a00000f, 0x00100042,
1307     0x00000001, 0x00100046, 0x00000000, 0x00004002, 0x3f800000, 0x3fe2d0e5,
1308     0x00000000, 0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001,
1309     0x3f800000, 0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001,
1310     0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a,
1311     0x00000002, 0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000,
1312     0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1313     0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1314     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1315     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4,
1316     0x00000000, 0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100,
1317     0x000000a0, 0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
1318     0x00000000, 0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005,
1319     0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093,
1320     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001,
1321     0x0000000d, 0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478,
1322     0x74005965, 0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f,
1323     0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d,
1324     0x36207265, 0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349,
1325     0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001,
1326     0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000,
1327     0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000,
1328     0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49,
1329     0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c,
1330     0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003,
1331     0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
1332 };
1333 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
1334 static const DWORD D3D11_PixelShader_NV21_JPEG[] = {
1335     0x43425844, 0x5705ccc9, 0xeb57571d, 0x8ce556e0, 0x2adef743, 0x00000001,
1336     0x00000520, 0x00000006, 0x00000038, 0x00000188, 0x00000320, 0x0000039c,
1337     0x00000478, 0x000004ec, 0x396e6f41, 0x00000148, 0x00000148, 0xffff0200,
1338     0x0000011c, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1339     0x002c0000, 0x00000000, 0x00010001, 0xffff0201, 0x05000051, 0xa00f0000,
1340     0x00000000, 0xbf008081, 0x3f800000, 0x3fb374bc, 0x05000051, 0xa00f0001,
1341     0x3f800000, 0xbeb02de0, 0xbf36cf42, 0x00000000, 0x05000051, 0xa00f0002,
1342     0x3f800000, 0x3fe2d0e5, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
1343     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1344     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1345     0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800,
1346     0x02000001, 0x80060001, 0x80c40000, 0x03000002, 0x80070000, 0x80e40001,
1347     0xa0d40000, 0x0400005a, 0x80010001, 0x80e80000, 0xa0ee0000, 0xa0000000,
1348     0x03000008, 0x80020001, 0x80e40000, 0xa0e40001, 0x0400005a, 0x80040001,
1349     0x80e40000, 0xa0e40002, 0xa0aa0002, 0x02000001, 0x80080001, 0xa0aa0000,
1350     0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800,
1351     0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040, 0x00000064,
1352     0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000,
1353     0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x03001062,
1354     0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065,
1355     0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045, 0x001000f2,
1356     0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000,
1357     0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001,
1358     0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036, 0x00100062,
1359     0x00000000, 0x00100456, 0x00000001, 0x0a000000, 0x00100072, 0x00000000,
1360     0x00100246, 0x00000000, 0x00004002, 0x00000000, 0xbf008081, 0xbf008081,
1361     0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000,
1362     0x00004002, 0x3f800000, 0x3fb374bc, 0x00000000, 0x00000000, 0x0a000010,
1363     0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f800000,
1364     0xbeb02de0, 0xbf36cf42, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001,
1365     0x00100046, 0x00000000, 0x00004002, 0x3f800000, 0x3fe2d0e5, 0x00000000,
1366     0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000,
1367     0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46,
1368     0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a, 0x00000002,
1369     0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001,
1370     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1371     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002,
1372     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1373     0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4, 0x00000000,
1374     0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100, 0x000000a0,
1375     0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1376     0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005, 0x00000004,
1377     0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093, 0x00000002,
1378     0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d,
1379     0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965,
1380     0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f, 0x52282074,
1381     0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x36207265,
1382     0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349, 0x0000006c,
1383     0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001, 0x00000003,
1384     0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000, 0x00000003,
1385     0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000, 0x00000003,
1386     0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554,
1387     0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001,
1388     0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
1389     0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
1390 };
1391 #else
1392 #error "An appropriate 'yuv' pixel shader is not defined."
1393 #endif
1394
1395 /* The yuv-rendering pixel shader:
1396
1397     --- D3D11_PixelShader_NV21_BT601.hlsl ---
1398     Texture2D theTextureY : register(t0);
1399     Texture2D theTextureUV : register(t1);
1400     SamplerState theSampler : register(s0);
1401
1402     struct PixelShaderInput
1403     {
1404         float4 pos : SV_POSITION;
1405         float2 tex : TEXCOORD0;
1406         float4 color : COLOR0;
1407     };
1408
1409     float4 main(PixelShaderInput input) : SV_TARGET
1410     {
1411         const float3 offset = {-0.0627451017, -0.501960814, -0.501960814};
1412         const float3 Rcoeff = {1.1644,  0.0000,  1.5960};
1413         const float3 Gcoeff = {1.1644, -0.3918, -0.8130};
1414         const float3 Bcoeff = {1.1644,  2.0172,  0.0000};
1415
1416         float4 Output;
1417
1418         float3 yuv;
1419         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
1420         yuv.yz = theTextureUV.Sample(theSampler, input.tex).gr;
1421
1422         yuv += offset;
1423         Output.r = dot(yuv, Rcoeff);
1424         Output.g = dot(yuv, Gcoeff);
1425         Output.b = dot(yuv, Bcoeff);
1426         Output.a = 1.0f;
1427
1428         return Output * input.color;
1429     }
1430
1431 */
1432 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
1433 static const DWORD D3D11_PixelShader_NV21_BT601[] = {
1434     0x43425844, 0x7fc6cfdc, 0xba87a4ff, 0xa72685a6, 0xa051b38c, 0x00000001,
1435     0x00000554, 0x00000006, 0x00000038, 0x000001bc, 0x00000354, 0x000003d0,
1436     0x000004ac, 0x00000520, 0x396e6f41, 0x0000017c, 0x0000017c, 0xffff0200,
1437     0x00000150, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1438     0x002c0000, 0x00000000, 0x00010001, 0xffff0200, 0x05000051, 0xa00f0000,
1439     0xbd808081, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051, 0xa00f0001,
1440     0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x00000000, 0x05000051, 0xa00f0002,
1441     0x3f950b0f, 0xbec89a02, 0xbf5020c5, 0x00000000, 0x05000051, 0xa00f0003,
1442     0x3f950b0f, 0x400119ce, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
1443     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1444     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1445     0xb0e40000, 0xa0e40800, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801,
1446     0x02000001, 0x80020000, 0x80550001, 0x02000001, 0x80040000, 0x80000001,
1447     0x03000002, 0x80070000, 0x80e40000, 0xa0e40000, 0x03000005, 0x80080000,
1448     0x80000000, 0xa0000001, 0x04000004, 0x80010001, 0x80aa0000, 0xa0550001,
1449     0x80ff0000, 0x03000008, 0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a,
1450     0x80040001, 0x80e40000, 0xa0e40003, 0xa0aa0003, 0x02000001, 0x80080001,
1451     0xa0ff0000, 0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001,
1452     0x800f0800, 0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040,
1453     0x00000064, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000,
1454     0x00000000, 0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555,
1455     0x03001062, 0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002,
1456     0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045,
1457     0x001000f2, 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000,
1458     0x00106000, 0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046,
1459     0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036,
1460     0x00100062, 0x00000000, 0x00100456, 0x00000001, 0x0a000000, 0x00100072,
1461     0x00000000, 0x00100246, 0x00000000, 0x00004002, 0xbd808081, 0xbf008081,
1462     0xbf008081, 0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086,
1463     0x00000000, 0x00004002, 0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x00000000,
1464     0x0a000010, 0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002,
1465     0x3f950b0f, 0xbec89a02, 0xbf5020c5, 0x00000000, 0x0a00000f, 0x00100042,
1466     0x00000001, 0x00100046, 0x00000000, 0x00004002, 0x3f950b0f, 0x400119ce,
1467     0x00000000, 0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001,
1468     0x3f800000, 0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001,
1469     0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a,
1470     0x00000002, 0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000,
1471     0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1472     0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1473     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1474     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4,
1475     0x00000000, 0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100,
1476     0x000000a0, 0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
1477     0x00000000, 0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005,
1478     0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093,
1479     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001,
1480     0x0000000d, 0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478,
1481     0x74005965, 0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f,
1482     0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d,
1483     0x36207265, 0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349,
1484     0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001,
1485     0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000,
1486     0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000,
1487     0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49,
1488     0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c,
1489     0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003,
1490     0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
1491 };
1492 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
1493 static const DWORD D3D11_PixelShader_NV21_BT601[] = {
1494     0x43425844, 0x1e92bca4, 0xfeb04e20, 0x3f4226b1, 0xc89c58ad, 0x00000001,
1495     0x00000520, 0x00000006, 0x00000038, 0x00000188, 0x00000320, 0x0000039c,
1496     0x00000478, 0x000004ec, 0x396e6f41, 0x00000148, 0x00000148, 0xffff0200,
1497     0x0000011c, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1498     0x002c0000, 0x00000000, 0x00010001, 0xffff0201, 0x05000051, 0xa00f0000,
1499     0xbd808081, 0xbf008081, 0x3f800000, 0x00000000, 0x05000051, 0xa00f0001,
1500     0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x400119ce, 0x05000051, 0xa00f0002,
1501     0x3f950b0f, 0xbec89a02, 0xbf5020c5, 0x00000000, 0x0200001f, 0x80000000,
1502     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1503     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1504     0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800,
1505     0x02000001, 0x80060001, 0x80c40000, 0x03000002, 0x80070000, 0x80e40001,
1506     0xa0d40000, 0x0400005a, 0x80010001, 0x80e80000, 0xa0e40001, 0xa0aa0001,
1507     0x03000008, 0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001,
1508     0x80e40000, 0xa0ec0001, 0xa0aa0001, 0x02000001, 0x80080001, 0xa0aa0000,
1509     0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800,
1510     0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040, 0x00000064,
1511     0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000,
1512     0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x03001062,
1513     0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065,
1514     0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045, 0x001000f2,
1515     0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000,
1516     0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001,
1517     0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036, 0x00100062,
1518     0x00000000, 0x00100456, 0x00000001, 0x0a000000, 0x00100072, 0x00000000,
1519     0x00100246, 0x00000000, 0x00004002, 0xbd808081, 0xbf008081, 0xbf008081,
1520     0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000,
1521     0x00004002, 0x3f950b0f, 0x3fcc49ba, 0x00000000, 0x00000000, 0x0a000010,
1522     0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f950b0f,
1523     0xbec89a02, 0xbf5020c5, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001,
1524     0x00100046, 0x00000000, 0x00004002, 0x3f950b0f, 0x400119ce, 0x00000000,
1525     0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000,
1526     0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46,
1527     0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a, 0x00000002,
1528     0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001,
1529     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1530     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002,
1531     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1532     0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4, 0x00000000,
1533     0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100, 0x000000a0,
1534     0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1535     0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005, 0x00000004,
1536     0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093, 0x00000002,
1537     0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d,
1538     0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965,
1539     0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f, 0x52282074,
1540     0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x36207265,
1541     0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349, 0x0000006c,
1542     0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001, 0x00000003,
1543     0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000, 0x00000003,
1544     0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000, 0x00000003,
1545     0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554,
1546     0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001,
1547     0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
1548     0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
1549 };
1550 #else
1551 #error "An appropriate 'yuv' pixel shader is not defined."
1552 #endif
1553
1554 /* The yuv-rendering pixel shader:
1555
1556     --- D3D11_PixelShader_NV21_BT709.hlsl ---
1557     Texture2D theTextureY : register(t0);
1558     Texture2D theTextureUV : register(t1);
1559     SamplerState theSampler : register(s0);
1560
1561     struct PixelShaderInput
1562     {
1563         float4 pos : SV_POSITION;
1564         float2 tex : TEXCOORD0;
1565         float4 color : COLOR0;
1566     };
1567
1568     float4 main(PixelShaderInput input) : SV_TARGET
1569     {
1570         const float3 offset = {-0.0627451017, -0.501960814, -0.501960814};
1571         const float3 Rcoeff = {1.1644,  0.0000,  1.7927};
1572         const float3 Gcoeff = {1.1644, -0.2132, -0.5329};
1573         const float3 Bcoeff = {1.1644,  2.1124,  0.0000};
1574
1575         float4 Output;
1576
1577         float3 yuv;
1578         yuv.x = theTextureY.Sample(theSampler, input.tex).r;
1579         yuv.yz = theTextureUV.Sample(theSampler, input.tex).gr;
1580
1581         yuv += offset;
1582         Output.r = dot(yuv, Rcoeff);
1583         Output.g = dot(yuv, Gcoeff);
1584         Output.b = dot(yuv, Bcoeff);
1585         Output.a = 1.0f;
1586
1587         return Output * input.color;
1588     }
1589
1590 */
1591 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
1592 static const DWORD D3D11_PixelShader_NV21_BT709[] = {
1593     0x43425844, 0x754ba6c4, 0xe321a747, 0x23680787, 0x6bb1bdcc, 0x00000001,
1594     0x00000554, 0x00000006, 0x00000038, 0x000001bc, 0x00000354, 0x000003d0,
1595     0x000004ac, 0x00000520, 0x396e6f41, 0x0000017c, 0x0000017c, 0xffff0200,
1596     0x00000150, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1597     0x002c0000, 0x00000000, 0x00010001, 0xffff0200, 0x05000051, 0xa00f0000,
1598     0xbd808081, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051, 0xa00f0001,
1599     0x3f950b0f, 0x3fe57732, 0x00000000, 0x00000000, 0x05000051, 0xa00f0002,
1600     0x3f950b0f, 0xbe5a511a, 0xbf086c22, 0x00000000, 0x05000051, 0xa00f0003,
1601     0x3f950b0f, 0x40073190, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
1602     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1603     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1604     0xb0e40000, 0xa0e40800, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40801,
1605     0x02000001, 0x80020000, 0x80550001, 0x02000001, 0x80040000, 0x80000001,
1606     0x03000002, 0x80070000, 0x80e40000, 0xa0e40000, 0x03000005, 0x80080000,
1607     0x80000000, 0xa0000001, 0x04000004, 0x80010001, 0x80aa0000, 0xa0550001,
1608     0x80ff0000, 0x03000008, 0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a,
1609     0x80040001, 0x80e40000, 0xa0e40003, 0xa0aa0003, 0x02000001, 0x80080001,
1610     0xa0ff0000, 0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001,
1611     0x800f0800, 0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040,
1612     0x00000064, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000,
1613     0x00000000, 0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555,
1614     0x03001062, 0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002,
1615     0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045,
1616     0x001000f2, 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000,
1617     0x00106000, 0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046,
1618     0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036,
1619     0x00100062, 0x00000000, 0x00100456, 0x00000001, 0x0a000000, 0x00100072,
1620     0x00000000, 0x00100246, 0x00000000, 0x00004002, 0xbd808081, 0xbf008081,
1621     0xbf008081, 0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086,
1622     0x00000000, 0x00004002, 0x3f950b0f, 0x3fe57732, 0x00000000, 0x00000000,
1623     0x0a000010, 0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002,
1624     0x3f950b0f, 0xbe5a511a, 0xbf086c22, 0x00000000, 0x0a00000f, 0x00100042,
1625     0x00000001, 0x00100046, 0x00000000, 0x00004002, 0x3f950b0f, 0x40073190,
1626     0x00000000, 0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001,
1627     0x3f800000, 0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001,
1628     0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a,
1629     0x00000002, 0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000,
1630     0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1631     0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1632     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1633     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4,
1634     0x00000000, 0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100,
1635     0x000000a0, 0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
1636     0x00000000, 0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005,
1637     0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093,
1638     0x00000002, 0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001,
1639     0x0000000d, 0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478,
1640     0x74005965, 0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f,
1641     0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d,
1642     0x36207265, 0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349,
1643     0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001,
1644     0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000,
1645     0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000,
1646     0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49,
1647     0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c,
1648     0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003,
1649     0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
1650 };
1651 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
1652 static const DWORD D3D11_PixelShader_NV21_BT709[] = {
1653     0x43425844, 0xb6219b20, 0xb71bbcf7, 0xf361cc45, 0xc4d5f5be, 0x00000001,
1654     0x00000520, 0x00000006, 0x00000038, 0x00000188, 0x00000320, 0x0000039c,
1655     0x00000478, 0x000004ec, 0x396e6f41, 0x00000148, 0x00000148, 0xffff0200,
1656     0x0000011c, 0x0000002c, 0x002c0000, 0x002c0000, 0x002c0000, 0x00240002,
1657     0x002c0000, 0x00000000, 0x00010001, 0xffff0201, 0x05000051, 0xa00f0000,
1658     0xbd808081, 0xbf008081, 0x3f800000, 0x00000000, 0x05000051, 0xa00f0001,
1659     0x3f950b0f, 0x3fe57732, 0x00000000, 0x40073190, 0x05000051, 0xa00f0002,
1660     0x3f950b0f, 0xbe5a511a, 0xbf086c22, 0x00000000, 0x0200001f, 0x80000000,
1661     0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000,
1662     0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801, 0x03000042, 0x800f0000,
1663     0xb0e40000, 0xa0e40801, 0x03000042, 0x800f0001, 0xb0e40000, 0xa0e40800,
1664     0x02000001, 0x80060001, 0x80c40000, 0x03000002, 0x80070000, 0x80e40001,
1665     0xa0d40000, 0x0400005a, 0x80010001, 0x80e80000, 0xa0e40001, 0xa0aa0001,
1666     0x03000008, 0x80020001, 0x80e40000, 0xa0e40002, 0x0400005a, 0x80040001,
1667     0x80e40000, 0xa0ec0001, 0xa0aa0001, 0x02000001, 0x80080001, 0xa0aa0000,
1668     0x03000005, 0x800f0000, 0x80e40001, 0xb0e40001, 0x02000001, 0x800f0800,
1669     0x80e40000, 0x0000ffff, 0x52444853, 0x00000190, 0x00000040, 0x00000064,
1670     0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000,
1671     0x00005555, 0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x03001062,
1672     0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065,
1673     0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x09000045, 0x001000f2,
1674     0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000,
1675     0x00000000, 0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001,
1676     0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x05000036, 0x00100062,
1677     0x00000000, 0x00100456, 0x00000001, 0x0a000000, 0x00100072, 0x00000000,
1678     0x00100246, 0x00000000, 0x00004002, 0xbd808081, 0xbf008081, 0xbf008081,
1679     0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000,
1680     0x00004002, 0x3f950b0f, 0x3fe57732, 0x00000000, 0x00000000, 0x0a000010,
1681     0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f950b0f,
1682     0xbe5a511a, 0xbf086c22, 0x00000000, 0x0a00000f, 0x00100042, 0x00000001,
1683     0x00100046, 0x00000000, 0x00004002, 0x3f950b0f, 0x40073190, 0x00000000,
1684     0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x3f800000,
1685     0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000001, 0x00101e46,
1686     0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x0000000a, 0x00000002,
1687     0x00000000, 0x00000003, 0x00000005, 0x00000000, 0x00000000, 0x00000001,
1688     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1689     0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002,
1690     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1691     0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000d4, 0x00000000,
1692     0x00000000, 0x00000003, 0x0000001c, 0xffff0400, 0x00000100, 0x000000a0,
1693     0x0000007c, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1694     0x00000001, 0x00000001, 0x00000087, 0x00000002, 0x00000005, 0x00000004,
1695     0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x00000093, 0x00000002,
1696     0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000d,
1697     0x53656874, 0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x74005965,
1698     0x65546568, 0x72757478, 0x00565565, 0x7263694d, 0x666f736f, 0x52282074,
1699     0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x36207265,
1700     0x392e332e, 0x2e303036, 0x38333631, 0xabab0034, 0x4e475349, 0x0000006c,
1701     0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001, 0x00000003,
1702     0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000, 0x00000003,
1703     0x00000001, 0x00000303, 0x00000065, 0x00000000, 0x00000000, 0x00000003,
1704     0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x43584554,
1705     0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, 0x0000002c, 0x00000001,
1706     0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
1707     0x0000000f, 0x545f5653, 0x45475241, 0xabab0054
1708 };
1709 #else
1710 #error "An appropriate 'yuv' pixel shader is not defined."
1711 #endif
1712
1713 /* The sole vertex shader:
1714
1715    --- D3D11_VertexShader.hlsl ---
1716    #pragma pack_matrix( row_major )
1717
1718    cbuffer VertexShaderConstants : register(b0)
1719    {
1720        matrix model;
1721        matrix projectionAndView;
1722    };
1723
1724    struct VertexShaderInput
1725    {
1726        float3 pos : POSITION;
1727        float2 tex : TEXCOORD0;
1728        float4 color : COLOR0;
1729    };
1730
1731    struct VertexShaderOutput
1732    {
1733        float4 pos : SV_POSITION;
1734        float2 tex : TEXCOORD0;
1735        float4 color : COLOR0;
1736    };
1737
1738    VertexShaderOutput main(VertexShaderInput input)
1739    {
1740        VertexShaderOutput output;
1741        float4 pos = float4(input.pos, 1.0f);
1742
1743        // Transform the vertex position into projected space.
1744        pos = mul(pos, model);
1745        pos = mul(pos, projectionAndView);
1746        output.pos = pos;
1747
1748        // Pass through texture coordinates and color values without transformation
1749        output.tex = input.tex;
1750        output.color = input.color;
1751
1752        return output;
1753    }
1754 */
1755 #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1)
1756 static const DWORD D3D11_VertexShader[] = {
1757     0x43425844, 0x62dfae5f, 0x3e8bd8df, 0x9ec97127, 0x5044eefb, 0x00000001,
1758     0x00000598, 0x00000006, 0x00000038, 0x0000016c, 0x00000334, 0x000003b0,
1759     0x000004b4, 0x00000524, 0x396e6f41, 0x0000012c, 0x0000012c, 0xfffe0200,
1760     0x000000f8, 0x00000034, 0x00240001, 0x00300000, 0x00300000, 0x00240000,
1761     0x00300001, 0x00000000, 0x00010008, 0x00000000, 0x00000000, 0xfffe0200,
1762     0x0200001f, 0x80000005, 0x900f0000, 0x0200001f, 0x80010005, 0x900f0001,
1763     0x0200001f, 0x80020005, 0x900f0002, 0x03000005, 0x800f0000, 0x90550000,
1764     0xa0e40002, 0x04000004, 0x800f0000, 0x90000000, 0xa0e40001, 0x80e40000,
1765     0x04000004, 0x800f0000, 0x90aa0000, 0xa0e40003, 0x80e40000, 0x03000002,
1766     0x800f0000, 0x80e40000, 0xa0e40004, 0x03000005, 0x800f0001, 0x80550000,
1767     0xa0e40006, 0x04000004, 0x800f0001, 0x80000000, 0xa0e40005, 0x80e40001,
1768     0x04000004, 0x800f0001, 0x80aa0000, 0xa0e40007, 0x80e40001, 0x04000004,
1769     0x800f0000, 0x80ff0000, 0xa0e40008, 0x80e40001, 0x04000004, 0xc0030000,
1770     0x80ff0000, 0xa0e40000, 0x80e40000, 0x02000001, 0xc00c0000, 0x80e40000,
1771     0x02000001, 0xe0030000, 0x90e40001, 0x02000001, 0xe00f0001, 0x90e40002,
1772     0x0000ffff, 0x52444853, 0x000001c0, 0x00010040, 0x00000070, 0x04000059,
1773     0x00208e46, 0x00000000, 0x00000008, 0x0300005f, 0x00101072, 0x00000000,
1774     0x0300005f, 0x00101032, 0x00000001, 0x0300005f, 0x001010f2, 0x00000002,
1775     0x04000067, 0x001020f2, 0x00000000, 0x00000001, 0x03000065, 0x00102032,
1776     0x00000001, 0x03000065, 0x001020f2, 0x00000002, 0x02000068, 0x00000002,
1777     0x08000038, 0x001000f2, 0x00000000, 0x00101556, 0x00000000, 0x00208e46,
1778     0x00000000, 0x00000001, 0x0a000032, 0x001000f2, 0x00000000, 0x00101006,
1779     0x00000000, 0x00208e46, 0x00000000, 0x00000000, 0x00100e46, 0x00000000,
1780     0x0a000032, 0x001000f2, 0x00000000, 0x00101aa6, 0x00000000, 0x00208e46,
1781     0x00000000, 0x00000002, 0x00100e46, 0x00000000, 0x08000000, 0x001000f2,
1782     0x00000000, 0x00100e46, 0x00000000, 0x00208e46, 0x00000000, 0x00000003,
1783     0x08000038, 0x001000f2, 0x00000001, 0x00100556, 0x00000000, 0x00208e46,
1784     0x00000000, 0x00000005, 0x0a000032, 0x001000f2, 0x00000001, 0x00100006,
1785     0x00000000, 0x00208e46, 0x00000000, 0x00000004, 0x00100e46, 0x00000001,
1786     0x0a000032, 0x001000f2, 0x00000001, 0x00100aa6, 0x00000000, 0x00208e46,
1787     0x00000000, 0x00000006, 0x00100e46, 0x00000001, 0x0a000032, 0x001020f2,
1788     0x00000000, 0x00100ff6, 0x00000000, 0x00208e46, 0x00000000, 0x00000007,
1789     0x00100e46, 0x00000001, 0x05000036, 0x00102032, 0x00000001, 0x00101046,
1790     0x00000001, 0x05000036, 0x001020f2, 0x00000002, 0x00101e46, 0x00000002,
1791     0x0100003e, 0x54415453, 0x00000074, 0x0000000b, 0x00000002, 0x00000000,
1792     0x00000006, 0x00000003, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
1793     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1794     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
1795     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1796     0x00000000, 0x00000000, 0x46454452, 0x000000fc, 0x00000001, 0x00000054,
1797     0x00000001, 0x0000001c, 0xfffe0400, 0x00000100, 0x000000c6, 0x0000003c,
1798     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
1799     0x00000001, 0x74726556, 0x68537865, 0x72656461, 0x736e6f43, 0x746e6174,
1800     0xabab0073, 0x0000003c, 0x00000002, 0x0000006c, 0x00000080, 0x00000000,
1801     0x00000000, 0x0000009c, 0x00000000, 0x00000040, 0x00000002, 0x000000a4,
1802     0x00000000, 0x000000b4, 0x00000040, 0x00000040, 0x00000002, 0x000000a4,
1803     0x00000000, 0x65646f6d, 0xabab006c, 0x00030002, 0x00040004, 0x00000000,
1804     0x00000000, 0x6a6f7270, 0x69746365, 0x6e416e6f, 0x65695664, 0x694d0077,
1805     0x736f7263, 0x2074666f, 0x20295228, 0x4c534c48, 0x61685320, 0x20726564,
1806     0x706d6f43, 0x72656c69, 0x332e3920, 0x32392e30, 0x312e3030, 0x34383336,
1807     0xababab00, 0x4e475349, 0x00000068, 0x00000003, 0x00000008, 0x00000050,
1808     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000707, 0x00000059,
1809     0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000062,
1810     0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x49534f50,
1811     0x4e4f4954, 0x58455400, 0x524f4f43, 0x4f430044, 0x00524f4c, 0x4e47534f,
1812     0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001,
1813     0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000,
1814     0x00000003, 0x00000001, 0x00000c03, 0x00000065, 0x00000000, 0x00000000,
1815     0x00000003, 0x00000002, 0x0000000f, 0x505f5653, 0x5449534f, 0x004e4f49,
1816     0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f
1817 };
1818 #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3)
1819 static const DWORD D3D11_VertexShader[] = {
1820     0x43425844, 0x01a24e41, 0x696af551, 0x4b2a87d1, 0x82ea03f6, 0x00000001,
1821     0x00000598, 0x00000006, 0x00000038, 0x0000016c, 0x00000334, 0x000003b0,
1822     0x000004b4, 0x00000524, 0x396e6f41, 0x0000012c, 0x0000012c, 0xfffe0200,
1823     0x000000f8, 0x00000034, 0x00240001, 0x00300000, 0x00300000, 0x00240000,
1824     0x00300001, 0x00000000, 0x00010008, 0x00000000, 0x00000000, 0xfffe0201,
1825     0x0200001f, 0x80000005, 0x900f0000, 0x0200001f, 0x80010005, 0x900f0001,
1826     0x0200001f, 0x80020005, 0x900f0002, 0x03000005, 0x800f0000, 0x90550000,
1827     0xa0e40002, 0x04000004, 0x800f0000, 0x90000000, 0xa0e40001, 0x80e40000,
1828     0x04000004, 0x800f0000, 0x90aa0000, 0xa0e40003, 0x80e40000, 0x03000002,
1829     0x800f0000, 0x80e40000, 0xa0e40004, 0x03000005, 0x800f0001, 0x80550000,
1830     0xa0e40006, 0x04000004, 0x800f0001, 0x80000000, 0xa0e40005, 0x80e40001,
1831     0x04000004, 0x800f0001, 0x80aa0000, 0xa0e40007, 0x80e40001, 0x04000004,
1832     0x800f0000, 0x80ff0000, 0xa0e40008, 0x80e40001, 0x04000004, 0xc0030000,
1833     0x80ff0000, 0xa0e40000, 0x80e40000, 0x02000001, 0xc00c0000, 0x80e40000,
1834     0x02000001, 0xe0030000, 0x90e40001, 0x02000001, 0xe00f0001, 0x90e40002,
1835     0x0000ffff, 0x52444853, 0x000001c0, 0x00010040, 0x00000070, 0x04000059,
1836     0x00208e46, 0x00000000, 0x00000008, 0x0300005f, 0x00101072, 0x00000000,
1837     0x0300005f, 0x00101032, 0x00000001, 0x0300005f, 0x001010f2, 0x00000002,
1838     0x04000067, 0x001020f2, 0x00000000, 0x00000001, 0x03000065, 0x00102032,
1839     0x00000001, 0x03000065, 0x001020f2, 0x00000002, 0x02000068, 0x00000002,
1840     0x08000038, 0x001000f2, 0x00000000, 0x00101556, 0x00000000, 0x00208e46,
1841     0x00000000, 0x00000001, 0x0a000032, 0x001000f2, 0x00000000, 0x00101006,
1842     0x00000000, 0x00208e46, 0x00000000, 0x00000000, 0x00100e46, 0x00000000,
1843     0x0a000032, 0x001000f2, 0x00000000, 0x00101aa6, 0x00000000, 0x00208e46,
1844     0x00000000, 0x00000002, 0x00100e46, 0x00000000, 0x08000000, 0x001000f2,
1845     0x00000000, 0x00100e46, 0x00000000, 0x00208e46, 0x00000000, 0x00000003,
1846     0x08000038, 0x001000f2, 0x00000001, 0x00100556, 0x00000000, 0x00208e46,
1847     0x00000000, 0x00000005, 0x0a000032, 0x001000f2, 0x00000001, 0x00100006,
1848     0x00000000, 0x00208e46, 0x00000000, 0x00000004, 0x00100e46, 0x00000001,
1849     0x0a000032, 0x001000f2, 0x00000001, 0x00100aa6, 0x00000000, 0x00208e46,
1850     0x00000000, 0x00000006, 0x00100e46, 0x00000001, 0x0a000032, 0x001020f2,
1851     0x00000000, 0x00100ff6, 0x00000000, 0x00208e46, 0x00000000, 0x00000007,
1852     0x00100e46, 0x00000001, 0x05000036, 0x00102032, 0x00000001, 0x00101046,
1853     0x00000001, 0x05000036, 0x001020f2, 0x00000002, 0x00101e46, 0x00000002,
1854     0x0100003e, 0x54415453, 0x00000074, 0x0000000b, 0x00000002, 0x00000000,
1855     0x00000006, 0x00000003, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
1856     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1857     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
1858     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1859     0x00000000, 0x00000000, 0x46454452, 0x000000fc, 0x00000001, 0x00000054,
1860     0x00000001, 0x0000001c, 0xfffe0400, 0x00000100, 0x000000c6, 0x0000003c,
1861     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
1862     0x00000001, 0x74726556, 0x68537865, 0x72656461, 0x736e6f43, 0x746e6174,
1863     0xabab0073, 0x0000003c, 0x00000002, 0x0000006c, 0x00000080, 0x00000000,
1864     0x00000000, 0x0000009c, 0x00000000, 0x00000040, 0x00000002, 0x000000a4,
1865     0x00000000, 0x000000b4, 0x00000040, 0x00000040, 0x00000002, 0x000000a4,
1866     0x00000000, 0x65646f6d, 0xabab006c, 0x00030002, 0x00040004, 0x00000000,
1867     0x00000000, 0x6a6f7270, 0x69746365, 0x6e416e6f, 0x65695664, 0x694d0077,
1868     0x736f7263, 0x2074666f, 0x20295228, 0x4c534c48, 0x61685320, 0x20726564,
1869     0x706d6f43, 0x72656c69, 0x332e3920, 0x32392e30, 0x312e3030, 0x34383336,
1870     0xababab00, 0x4e475349, 0x00000068, 0x00000003, 0x00000008, 0x00000050,
1871     0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000707, 0x00000059,
1872     0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000062,
1873     0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x49534f50,
1874     0x4e4f4954, 0x58455400, 0x524f4f43, 0x4f430044, 0x00524f4c, 0x4e47534f,
1875     0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, 0x00000001,
1876     0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, 0x00000000,
1877     0x00000003, 0x00000001, 0x00000c03, 0x00000065, 0x00000000, 0x00000000,
1878     0x00000003, 0x00000002, 0x0000000f, 0x505f5653, 0x5449534f, 0x004e4f49,
1879     0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f
1880 };
1881 #else
1882 #error "An appropriate vertex shader is not defined."
1883 #endif
1884
1885 static struct
1886 {
1887     const void *shader_data;
1888     SIZE_T shader_size;
1889 } D3D11_shaders[] = {
1890     { D3D11_PixelShader_Colors, sizeof(D3D11_PixelShader_Colors) },
1891     { D3D11_PixelShader_Textures, sizeof(D3D11_PixelShader_Textures) },
1892     { D3D11_PixelShader_YUV_JPEG, sizeof(D3D11_PixelShader_YUV_JPEG) },
1893     { D3D11_PixelShader_YUV_BT601, sizeof(D3D11_PixelShader_YUV_BT601) },
1894     { D3D11_PixelShader_YUV_BT709, sizeof(D3D11_PixelShader_YUV_BT709) },
1895     { D3D11_PixelShader_NV12_JPEG, sizeof(D3D11_PixelShader_NV12_JPEG) },
1896     { D3D11_PixelShader_NV12_BT601, sizeof(D3D11_PixelShader_NV12_BT601) },
1897     { D3D11_PixelShader_NV12_BT709, sizeof(D3D11_PixelShader_NV12_BT709) },
1898     { D3D11_PixelShader_NV21_JPEG, sizeof(D3D11_PixelShader_NV21_JPEG) },
1899     { D3D11_PixelShader_NV21_BT601, sizeof(D3D11_PixelShader_NV21_BT601) },
1900     { D3D11_PixelShader_NV21_BT709, sizeof(D3D11_PixelShader_NV21_BT709) },
1901 };
1902
1903 int D3D11_CreateVertexShader(ID3D11Device1 *d3dDevice, ID3D11VertexShader **vertexShader, ID3D11InputLayout **inputLayout)
1904 {
1905     /* Declare how the input layout for SDL's vertex shader will be setup: */
1906     const D3D11_INPUT_ELEMENT_DESC vertexDesc[] = 
1907     {
1908         { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
1909         { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
1910         { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0 },
1911     };
1912     HRESULT result;
1913
1914     /* Load in SDL's one and only vertex shader: */
1915     result = ID3D11Device_CreateVertexShader(d3dDevice,
1916         D3D11_VertexShader,
1917         sizeof(D3D11_VertexShader),
1918         NULL,
1919         vertexShader
1920         );
1921     if (FAILED(result)) {
1922         return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateVertexShader"), result);
1923     }
1924
1925     /* Create an input layout for SDL's vertex shader: */
1926     result = ID3D11Device_CreateInputLayout(d3dDevice,
1927         vertexDesc,
1928         ARRAYSIZE(vertexDesc),
1929         D3D11_VertexShader,
1930         sizeof(D3D11_VertexShader),
1931         inputLayout
1932         );
1933     if (FAILED(result)) {
1934         return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreateInputLayout"), result);
1935     }
1936     return 0;
1937 }
1938
1939 int D3D11_CreatePixelShader(ID3D11Device1 *d3dDevice, D3D11_Shader shader, ID3D11PixelShader **pixelShader)
1940 {
1941     HRESULT result;
1942
1943     result = ID3D11Device_CreatePixelShader(d3dDevice,
1944         D3D11_shaders[shader].shader_data,
1945         D3D11_shaders[shader].shader_size,
1946         NULL,
1947         pixelShader
1948         );
1949     if (FAILED(result)) {
1950         return WIN_SetErrorFromHRESULT(SDL_COMPOSE_ERROR("ID3D11Device1::CreatePixelShader"), result);
1951     }
1952     return 0;
1953 }
1954
1955 #endif /* SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED */
1956
1957 /* vi: set ts=4 sw=4 expandtab: */