1/*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2021 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)
84static 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)
111static 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)
160static 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)
197static 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)
277static 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)
343static 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)
451static 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)
517static 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)
625static 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)
691static 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)
797static 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)
857static 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)
956static 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)
1016static 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)
1115static 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)
1175static 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)
1274static 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)
1334static 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)
1433static 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)
1493static 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)
1592static 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)
1652static 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)
1756static 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)
1819static 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
1885static 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
1903int 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
1939int 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: */
1958