diff --git a/VisualC-WinPhone/SDL/SDL-WinPhone_VS2012.vcxproj b/VisualC-WinPhone/SDL/SDL-WinPhone_VS2012.vcxproj index 0f185bec2..4eaeca36b 100644 --- a/VisualC-WinPhone/SDL/SDL-WinPhone_VS2012.vcxproj +++ b/VisualC-WinPhone/SDL/SDL-WinPhone_VS2012.vcxproj @@ -397,26 +397,6 @@ true - - - Pixel - Pixel - Pixel - Pixel - - - Pixel - Pixel - Pixel - Pixel - - - Vertex - Vertex - Vertex - Vertex - - diff --git a/VisualC-WinPhone/SDL/SDL-WinPhone_VS2012.vcxproj.filters b/VisualC-WinPhone/SDL/SDL-WinPhone_VS2012.vcxproj.filters index 59296bf42..9535fe759 100644 --- a/VisualC-WinPhone/SDL/SDL-WinPhone_VS2012.vcxproj.filters +++ b/VisualC-WinPhone/SDL/SDL-WinPhone_VS2012.vcxproj.filters @@ -7,9 +7,6 @@ {abc3a7e6-f955-4cb5-8340-fae0f653e9c1} - - {fd67993e-5155-488b-9313-d1eb06a1b67e} - @@ -612,15 +609,4 @@ Source Files - - - GPU Shaders - - - GPU Shaders - - - GPU Shaders - - \ No newline at end of file diff --git a/VisualC-WinRT/SDL/SDL-WinRT_VS2012.vcxproj b/VisualC-WinRT/SDL/SDL-WinRT_VS2012.vcxproj index f06787f78..a63bbc8cd 100644 --- a/VisualC-WinRT/SDL/SDL-WinRT_VS2012.vcxproj +++ b/VisualC-WinRT/SDL/SDL-WinRT_VS2012.vcxproj @@ -324,48 +324,6 @@ - - - Pixel - Pixel - Pixel - Pixel - Pixel - Pixel - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - - - Pixel - Pixel - Pixel - Pixel - Pixel - Pixel - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - - - Vertex - Vertex - Vertex - Vertex - Vertex - Vertex - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 - - {aeaea3a2-d4e6-45b1-8ec6-53d84287fc14} Win32Proj diff --git a/VisualC-WinRT/SDL/SDL-WinRT_VS2012.vcxproj.filters b/VisualC-WinRT/SDL/SDL-WinRT_VS2012.vcxproj.filters index bff9c9deb..21ec9bb9d 100644 --- a/VisualC-WinRT/SDL/SDL-WinRT_VS2012.vcxproj.filters +++ b/VisualC-WinRT/SDL/SDL-WinRT_VS2012.vcxproj.filters @@ -1,16 +1,5 @@  - - - GPU Shaders - - - GPU Shaders - - - GPU Shaders - - Source Files @@ -652,8 +641,5 @@ {ddf04d85-6a87-4c5a-bc52-869b38f45a61} - - {83ed1283-8234-4c77-99a8-ffcfd8ce7381} - \ No newline at end of file diff --git a/src/render/direct3d11/SDL_D3D11_PixelShader_FixedColor.hlsl b/src/render/direct3d11/SDL_D3D11_PixelShader_FixedColor.hlsl deleted file mode 100644 index 84de709f5..000000000 --- a/src/render/direct3d11/SDL_D3D11_PixelShader_FixedColor.hlsl +++ /dev/null @@ -1,12 +0,0 @@ - -struct PixelShaderInput -{ - float4 pos : SV_POSITION; - float2 tex : TEXCOORD0; - float4 color : COLOR0; -}; - -float4 main(PixelShaderInput input) : SV_TARGET -{ - return input.color; -} diff --git a/src/render/direct3d11/SDL_D3D11_PixelShader_TextureColored.hlsl b/src/render/direct3d11/SDL_D3D11_PixelShader_TextureColored.hlsl deleted file mode 100644 index 503b4fdcb..000000000 --- a/src/render/direct3d11/SDL_D3D11_PixelShader_TextureColored.hlsl +++ /dev/null @@ -1,14 +0,0 @@ -Texture2D theTexture : register(t0); -SamplerState theSampler : register(s0); - -struct PixelShaderInput -{ - float4 pos : SV_POSITION; - float2 tex : TEXCOORD0; - float4 color : COLOR0; -}; - -float4 main(PixelShaderInput input) : SV_TARGET -{ - return theTexture.Sample(theSampler, input.tex) * input.color; -} diff --git a/src/render/direct3d11/SDL_D3D11_VertexShader_Default.hlsl b/src/render/direct3d11/SDL_D3D11_VertexShader_Default.hlsl deleted file mode 100644 index c625c0970..000000000 --- a/src/render/direct3d11/SDL_D3D11_VertexShader_Default.hlsl +++ /dev/null @@ -1,41 +0,0 @@ - -#pragma pack_matrix( row_major ) - -cbuffer VertexShaderConstants : register(b0) -{ - matrix model; - matrix view; - matrix projection; -}; - -struct VertexShaderInput -{ - float3 pos : POSITION; - float2 tex : TEXCOORD0; - float4 color : COLOR0; -}; - -struct VertexShaderOutput -{ - float4 pos : SV_POSITION; - float2 tex : TEXCOORD0; - float4 color : COLOR0; -}; - -VertexShaderOutput main(VertexShaderInput input) -{ - VertexShaderOutput output; - float4 pos = float4(input.pos, 1.0f); - - // Transform the vertex position into projected space. - pos = mul(pos, model); - pos = mul(pos, view); - pos = mul(pos, projection); - output.pos = pos; - - // Pass through texture coordinates and color values without transformation - output.tex = input.tex; - output.color = input.color; - - return output; -} diff --git a/src/render/direct3d11/SDL_render_d3d11.cpp b/src/render/direct3d11/SDL_render_d3d11.cpp index 56d3ba381..f285a644a 100644 --- a/src/render/direct3d11/SDL_render_d3d11.cpp +++ b/src/render/direct3d11/SDL_render_d3d11.cpp @@ -130,6 +130,395 @@ typedef struct } D3D11_RenderData; +/* Direct3D 11.x shaders + + SDL's shaders are compiled into SDL itself, to simplify distribution. + + All Direct3D 11.x shaders were compiled with the following: + + fxc /E"main" /T "" /Fo"" "" + + Variables: + - : the type of shader. A table of utilized shader types is + listed below. + - : where to store compiled output + - : where to read shader source code from + + Shader types: + - ps_4_0_level_9_1: Pixel shader for Windows 8+, including Windows RT + - vs_4_0_level_9_1: Vertex shader for Windows 8+, including Windows RT + - ps_4_0_level_9_3: Pixel shader for Windows Phone 8 + - vs_4_0_level_9_3: Vertex shader for Windows Phone 8 + */ +#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP +#define D3D11_USE_SHADER_MODEL_4_0_level_9_3 +#else +#define D3D11_USE_SHADER_MODEL_4_0_level_9_1 +#endif + +/* The texture-rendering pixel shader: + + --- D3D11_PixelShader_Textures.hlsl --- + Texture2D theTexture : register(t0); + SamplerState theSampler : register(s0); + + struct PixelShaderInput + { + float4 pos : SV_POSITION; + float2 tex : TEXCOORD0; + float4 color : COLOR0; + }; + + float4 main(PixelShaderInput input) : SV_TARGET + { + return theTexture.Sample(theSampler, input.tex) * input.color; + } +*/ +#if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1) +static const DWORD D3D11_PixelShader_Textures[] = { + 0x43425844, 0x6299b59f, 0x155258f2, 0x873ab86a, 0xfcbb6dcd, 0x00000001, + 0x00000330, 0x00000006, 0x00000038, 0x000000c0, 0x0000015c, 0x000001d8, + 0x00000288, 0x000002fc, 0x396e6f41, 0x00000080, 0x00000080, 0xffff0200, + 0x00000058, 0x00000028, 0x00280000, 0x00280000, 0x00280000, 0x00240001, + 0x00280000, 0x00000000, 0xffff0200, 0x0200001f, 0x80000000, 0xb0030000, + 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000, 0xa00f0800, + 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40800, 0x03000005, 0x800f0000, + 0x80e40000, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff, + 0x52444853, 0x00000094, 0x00000040, 0x00000025, 0x0300005a, 0x00106000, + 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, + 0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065, + 0x001020f2, 0x00000000, 0x02000068, 0x00000001, 0x09000045, 0x001000f2, + 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000, + 0x00000000, 0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, + 0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x00000003, + 0x00000001, 0x00000000, 0x00000003, 0x00000001, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000a8, + 0x00000000, 0x00000000, 0x00000002, 0x0000001c, 0xffff0400, 0x00000100, + 0x00000072, 0x0000005c, 0x00000003, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000001, 0x00000067, 0x00000002, 0x00000005, + 0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x53656874, + 0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x694d0065, 0x736f7263, + 0x2074666f, 0x20295228, 0x4c534c48, 0x61685320, 0x20726564, 0x706d6f43, + 0x72656c69, 0x332e3920, 0x32392e30, 0x312e3030, 0x34383336, 0xababab00, + 0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, + 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, + 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000, + 0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, + 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, + 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, + 0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054 +}; +#elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3) +static const DWORD D3D11_PixelShader_Textures[] = { + 0x43425844, 0x5876569a, 0x01b6c87e, 0x8447454f, 0xc7f3ef10, 0x00000001, + 0x00000330, 0x00000006, 0x00000038, 0x000000c0, 0x0000015c, 0x000001d8, + 0x00000288, 0x000002fc, 0x396e6f41, 0x00000080, 0x00000080, 0xffff0200, + 0x00000058, 0x00000028, 0x00280000, 0x00280000, 0x00280000, 0x00240001, + 0x00280000, 0x00000000, 0xffff0201, 0x0200001f, 0x80000000, 0xb0030000, + 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, 0x90000000, 0xa00f0800, + 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40800, 0x03000005, 0x800f0000, + 0x80e40000, 0xb0e40001, 0x02000001, 0x800f0800, 0x80e40000, 0x0000ffff, + 0x52444853, 0x00000094, 0x00000040, 0x00000025, 0x0300005a, 0x00106000, + 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, + 0x00101032, 0x00000001, 0x03001062, 0x001010f2, 0x00000002, 0x03000065, + 0x001020f2, 0x00000000, 0x02000068, 0x00000001, 0x09000045, 0x001000f2, + 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000, + 0x00000000, 0x07000038, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, + 0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x00000003, + 0x00000001, 0x00000000, 0x00000003, 0x00000001, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, 0x000000a8, + 0x00000000, 0x00000000, 0x00000002, 0x0000001c, 0xffff0400, 0x00000100, + 0x00000072, 0x0000005c, 0x00000003, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000001, 0x00000067, 0x00000002, 0x00000005, + 0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000d, 0x53656874, + 0x6c706d61, 0x74007265, 0x65546568, 0x72757478, 0x694d0065, 0x736f7263, + 0x2074666f, 0x20295228, 0x4c534c48, 0x61685320, 0x20726564, 0x706d6f43, + 0x72656c69, 0x332e3920, 0x32392e30, 0x312e3030, 0x34383336, 0xababab00, + 0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, + 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, + 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x00000065, 0x00000000, + 0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, + 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, + 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, + 0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054 +}; +#else +#error "An appropriate 'textures' pixel shader is not defined" +#endif + +/* The color-only-rendering pixel shader: + + --- D3D11_PixelShader_Colors.hlsl --- + struct PixelShaderInput + { + float4 pos : SV_POSITION; + float2 tex : TEXCOORD0; + float4 color : COLOR0; + }; + + float4 main(PixelShaderInput input) : SV_TARGET + { + return input.color; + } +*/ +#if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1) +static const DWORD D3D11_PixelShader_Colors[] = { + 0x43425844, 0xd74c28fe, 0xa1eb8804, 0x269d512a, 0x7699723d, 0x00000001, + 0x00000240, 0x00000006, 0x00000038, 0x00000084, 0x000000c4, 0x00000140, + 0x00000198, 0x0000020c, 0x396e6f41, 0x00000044, 0x00000044, 0xffff0200, + 0x00000020, 0x00000024, 0x00240000, 0x00240000, 0x00240000, 0x00240000, + 0x00240000, 0xffff0200, 0x0200001f, 0x80000000, 0xb00f0001, 0x02000001, + 0x800f0800, 0xb0e40001, 0x0000ffff, 0x52444853, 0x00000038, 0x00000040, + 0x0000000e, 0x03001062, 0x001010f2, 0x00000002, 0x03000065, 0x001020f2, + 0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00101e46, 0x00000002, + 0x0100003e, 0x54415453, 0x00000074, 0x00000002, 0x00000000, 0x00000000, + 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x46454452, 0x00000050, 0x00000000, 0x00000000, + 0x00000000, 0x0000001c, 0xffff0400, 0x00000100, 0x0000001c, 0x7263694d, + 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, + 0x6c69706d, 0x39207265, 0x2e30332e, 0x30303239, 0x3336312e, 0xab003438, + 0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, + 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, + 0x00000000, 0x00000003, 0x00000001, 0x00000003, 0x00000065, 0x00000000, + 0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, + 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, + 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, + 0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054 +}; +#elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3) +static const DWORD D3D11_PixelShader_Colors[] = { + 0x43425844, 0x93f6ccfc, 0x5f919270, 0x7a11aa4f, 0x9148e931, 0x00000001, + 0x00000240, 0x00000006, 0x00000038, 0x00000084, 0x000000c4, 0x00000140, + 0x00000198, 0x0000020c, 0x396e6f41, 0x00000044, 0x00000044, 0xffff0200, + 0x00000020, 0x00000024, 0x00240000, 0x00240000, 0x00240000, 0x00240000, + 0x00240000, 0xffff0201, 0x0200001f, 0x80000000, 0xb00f0001, 0x02000001, + 0x800f0800, 0xb0e40001, 0x0000ffff, 0x52444853, 0x00000038, 0x00000040, + 0x0000000e, 0x03001062, 0x001010f2, 0x00000002, 0x03000065, 0x001020f2, + 0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00101e46, 0x00000002, + 0x0100003e, 0x54415453, 0x00000074, 0x00000002, 0x00000000, 0x00000000, + 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x46454452, 0x00000050, 0x00000000, 0x00000000, + 0x00000000, 0x0000001c, 0xffff0400, 0x00000100, 0x0000001c, 0x7263694d, + 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, + 0x6c69706d, 0x39207265, 0x2e30332e, 0x30303239, 0x3336312e, 0xab003438, + 0x4e475349, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, 0x00000000, + 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, 0x00000000, + 0x00000000, 0x00000003, 0x00000001, 0x00000003, 0x00000065, 0x00000000, + 0x00000000, 0x00000003, 0x00000002, 0x00000f0f, 0x505f5653, 0x5449534f, + 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, 0x4e47534f, + 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, + 0x00000003, 0x00000000, 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054, +}; +#else +#error "An appropriate 'colors' pixel shader is not defined." +#endif + +/* The sole vertex shader: + + --- D3D11_VertexShader.hlsl --- + #pragma pack_matrix( row_major ) + + cbuffer VertexShaderConstants : register(b0) + { + matrix model; + matrix view; + matrix projection; + }; + + struct VertexShaderInput + { + float3 pos : POSITION; + float2 tex : TEXCOORD0; + float4 color : COLOR0; + }; + + struct VertexShaderOutput + { + float4 pos : SV_POSITION; + float2 tex : TEXCOORD0; + float4 color : COLOR0; + }; + + VertexShaderOutput main(VertexShaderInput input) + { + VertexShaderOutput output; + float4 pos = float4(input.pos, 1.0f); + + // Transform the vertex position into projected space. + pos = mul(pos, model); + pos = mul(pos, view); + pos = mul(pos, projection); + output.pos = pos; + + // Pass through texture coordinates and color values without transformation + output.tex = input.tex; + output.color = input.color; + + return output; + } +*/ +#if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1) +static const DWORD D3D11_VertexShader[] = { + 0x43425844, 0x3f31b022, 0x2ffad8b8, 0xd6c45cbd, 0xa7894c28, 0x00000001, + 0x00000690, 0x00000006, 0x00000038, 0x000001b8, 0x00000418, 0x00000494, + 0x000005ac, 0x0000061c, 0x396e6f41, 0x00000178, 0x00000178, 0xfffe0200, + 0x00000144, 0x00000034, 0x00240001, 0x00300000, 0x00300000, 0x00240000, + 0x00300001, 0x00000000, 0x0001000c, 0x00000000, 0x00000000, 0xfffe0200, + 0x0200001f, 0x80000005, 0x900f0000, 0x0200001f, 0x80010005, 0x900f0001, + 0x0200001f, 0x80020005, 0x900f0002, 0x03000005, 0x800f0000, 0x90550000, + 0xa0e40002, 0x04000004, 0x800f0000, 0x90000000, 0xa0e40001, 0x80e40000, + 0x04000004, 0x800f0000, 0x90aa0000, 0xa0e40003, 0x80e40000, 0x03000002, + 0x800f0000, 0x80e40000, 0xa0e40004, 0x03000005, 0x800f0001, 0x80550000, + 0xa0e40006, 0x04000004, 0x800f0001, 0x80000000, 0xa0e40005, 0x80e40001, + 0x04000004, 0x800f0001, 0x80aa0000, 0xa0e40007, 0x80e40001, 0x04000004, + 0x800f0000, 0x80ff0000, 0xa0e40008, 0x80e40001, 0x03000005, 0x800f0001, + 0x80550000, 0xa0e4000a, 0x04000004, 0x800f0001, 0x80000000, 0xa0e40009, + 0x80e40001, 0x04000004, 0x800f0001, 0x80aa0000, 0xa0e4000b, 0x80e40001, + 0x04000004, 0x800f0000, 0x80ff0000, 0xa0e4000c, 0x80e40001, 0x04000004, + 0xc0030000, 0x80ff0000, 0xa0e40000, 0x80e40000, 0x02000001, 0xc00c0000, + 0x80e40000, 0x02000001, 0xe0030000, 0x90e40001, 0x02000001, 0xe00f0001, + 0x90e40002, 0x0000ffff, 0x52444853, 0x00000258, 0x00010040, 0x00000096, + 0x04000059, 0x00208e46, 0x00000000, 0x0000000c, 0x0300005f, 0x00101072, + 0x00000000, 0x0300005f, 0x00101032, 0x00000001, 0x0300005f, 0x001010f2, + 0x00000002, 0x04000067, 0x001020f2, 0x00000000, 0x00000001, 0x03000065, + 0x00102032, 0x00000001, 0x03000065, 0x001020f2, 0x00000002, 0x02000068, + 0x00000002, 0x08000038, 0x001000f2, 0x00000000, 0x00101556, 0x00000000, + 0x00208e46, 0x00000000, 0x00000001, 0x0a000032, 0x001000f2, 0x00000000, + 0x00101006, 0x00000000, 0x00208e46, 0x00000000, 0x00000000, 0x00100e46, + 0x00000000, 0x0a000032, 0x001000f2, 0x00000000, 0x00101aa6, 0x00000000, + 0x00208e46, 0x00000000, 0x00000002, 0x00100e46, 0x00000000, 0x08000000, + 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00208e46, 0x00000000, + 0x00000003, 0x08000038, 0x001000f2, 0x00000001, 0x00100556, 0x00000000, + 0x00208e46, 0x00000000, 0x00000005, 0x0a000032, 0x001000f2, 0x00000001, + 0x00100006, 0x00000000, 0x00208e46, 0x00000000, 0x00000004, 0x00100e46, + 0x00000001, 0x0a000032, 0x001000f2, 0x00000001, 0x00100aa6, 0x00000000, + 0x00208e46, 0x00000000, 0x00000006, 0x00100e46, 0x00000001, 0x0a000032, + 0x001000f2, 0x00000000, 0x00100ff6, 0x00000000, 0x00208e46, 0x00000000, + 0x00000007, 0x00100e46, 0x00000001, 0x08000038, 0x001000f2, 0x00000001, + 0x00100556, 0x00000000, 0x00208e46, 0x00000000, 0x00000009, 0x0a000032, + 0x001000f2, 0x00000001, 0x00100006, 0x00000000, 0x00208e46, 0x00000000, + 0x00000008, 0x00100e46, 0x00000001, 0x0a000032, 0x001000f2, 0x00000001, + 0x00100aa6, 0x00000000, 0x00208e46, 0x00000000, 0x0000000a, 0x00100e46, + 0x00000001, 0x0a000032, 0x001020f2, 0x00000000, 0x00100ff6, 0x00000000, + 0x00208e46, 0x00000000, 0x0000000b, 0x00100e46, 0x00000001, 0x05000036, + 0x00102032, 0x00000001, 0x00101046, 0x00000001, 0x05000036, 0x001020f2, + 0x00000002, 0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, + 0x0000000f, 0x00000002, 0x00000000, 0x00000006, 0x00000004, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, + 0x00000110, 0x00000001, 0x00000054, 0x00000001, 0x0000001c, 0xfffe0400, + 0x00000100, 0x000000dc, 0x0000003c, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x74726556, 0x68537865, + 0x72656461, 0x736e6f43, 0x746e6174, 0xabab0073, 0x0000003c, 0x00000003, + 0x0000006c, 0x000000c0, 0x00000000, 0x00000000, 0x000000b4, 0x00000000, + 0x00000040, 0x00000002, 0x000000bc, 0x00000000, 0x000000cc, 0x00000040, + 0x00000040, 0x00000002, 0x000000bc, 0x00000000, 0x000000d1, 0x00000080, + 0x00000040, 0x00000002, 0x000000bc, 0x00000000, 0x65646f6d, 0xabab006c, + 0x00030002, 0x00040004, 0x00000000, 0x00000000, 0x77656976, 0x6f727000, + 0x7463656a, 0x006e6f69, 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, + 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e30332e, + 0x30303239, 0x3336312e, 0xab003438, 0x4e475349, 0x00000068, 0x00000003, + 0x00000008, 0x00000050, 0x00000000, 0x00000000, 0x00000003, 0x00000000, + 0x00000707, 0x00000059, 0x00000000, 0x00000000, 0x00000003, 0x00000001, + 0x00000303, 0x00000062, 0x00000000, 0x00000000, 0x00000003, 0x00000002, + 0x00000f0f, 0x49534f50, 0x4e4f4954, 0x58455400, 0x524f4f43, 0x4f430044, + 0x00524f4c, 0x4e47534f, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, + 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, + 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000c03, 0x00000065, + 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x0000000f, 0x505f5653, + 0x5449534f, 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f, +}; +#elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3) +static const DWORD D3D11_VertexShader[] = { + 0x43425844, 0xacfd840a, 0x6a6ae1e1, 0xc3649c43, 0x8bfc0816, 0x00000001, + 0x00000690, 0x00000006, 0x00000038, 0x000001b8, 0x00000418, 0x00000494, + 0x000005ac, 0x0000061c, 0x396e6f41, 0x00000178, 0x00000178, 0xfffe0200, + 0x00000144, 0x00000034, 0x00240001, 0x00300000, 0x00300000, 0x00240000, + 0x00300001, 0x00000000, 0x0001000c, 0x00000000, 0x00000000, 0xfffe0201, + 0x0200001f, 0x80000005, 0x900f0000, 0x0200001f, 0x80010005, 0x900f0001, + 0x0200001f, 0x80020005, 0x900f0002, 0x03000005, 0x800f0000, 0x90550000, + 0xa0e40002, 0x04000004, 0x800f0000, 0x90000000, 0xa0e40001, 0x80e40000, + 0x04000004, 0x800f0000, 0x90aa0000, 0xa0e40003, 0x80e40000, 0x03000002, + 0x800f0000, 0x80e40000, 0xa0e40004, 0x03000005, 0x800f0001, 0x80550000, + 0xa0e40006, 0x04000004, 0x800f0001, 0x80000000, 0xa0e40005, 0x80e40001, + 0x04000004, 0x800f0001, 0x80aa0000, 0xa0e40007, 0x80e40001, 0x04000004, + 0x800f0000, 0x80ff0000, 0xa0e40008, 0x80e40001, 0x03000005, 0x800f0001, + 0x80550000, 0xa0e4000a, 0x04000004, 0x800f0001, 0x80000000, 0xa0e40009, + 0x80e40001, 0x04000004, 0x800f0001, 0x80aa0000, 0xa0e4000b, 0x80e40001, + 0x04000004, 0x800f0000, 0x80ff0000, 0xa0e4000c, 0x80e40001, 0x04000004, + 0xc0030000, 0x80ff0000, 0xa0e40000, 0x80e40000, 0x02000001, 0xc00c0000, + 0x80e40000, 0x02000001, 0xe0030000, 0x90e40001, 0x02000001, 0xe00f0001, + 0x90e40002, 0x0000ffff, 0x52444853, 0x00000258, 0x00010040, 0x00000096, + 0x04000059, 0x00208e46, 0x00000000, 0x0000000c, 0x0300005f, 0x00101072, + 0x00000000, 0x0300005f, 0x00101032, 0x00000001, 0x0300005f, 0x001010f2, + 0x00000002, 0x04000067, 0x001020f2, 0x00000000, 0x00000001, 0x03000065, + 0x00102032, 0x00000001, 0x03000065, 0x001020f2, 0x00000002, 0x02000068, + 0x00000002, 0x08000038, 0x001000f2, 0x00000000, 0x00101556, 0x00000000, + 0x00208e46, 0x00000000, 0x00000001, 0x0a000032, 0x001000f2, 0x00000000, + 0x00101006, 0x00000000, 0x00208e46, 0x00000000, 0x00000000, 0x00100e46, + 0x00000000, 0x0a000032, 0x001000f2, 0x00000000, 0x00101aa6, 0x00000000, + 0x00208e46, 0x00000000, 0x00000002, 0x00100e46, 0x00000000, 0x08000000, + 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00208e46, 0x00000000, + 0x00000003, 0x08000038, 0x001000f2, 0x00000001, 0x00100556, 0x00000000, + 0x00208e46, 0x00000000, 0x00000005, 0x0a000032, 0x001000f2, 0x00000001, + 0x00100006, 0x00000000, 0x00208e46, 0x00000000, 0x00000004, 0x00100e46, + 0x00000001, 0x0a000032, 0x001000f2, 0x00000001, 0x00100aa6, 0x00000000, + 0x00208e46, 0x00000000, 0x00000006, 0x00100e46, 0x00000001, 0x0a000032, + 0x001000f2, 0x00000000, 0x00100ff6, 0x00000000, 0x00208e46, 0x00000000, + 0x00000007, 0x00100e46, 0x00000001, 0x08000038, 0x001000f2, 0x00000001, + 0x00100556, 0x00000000, 0x00208e46, 0x00000000, 0x00000009, 0x0a000032, + 0x001000f2, 0x00000001, 0x00100006, 0x00000000, 0x00208e46, 0x00000000, + 0x00000008, 0x00100e46, 0x00000001, 0x0a000032, 0x001000f2, 0x00000001, + 0x00100aa6, 0x00000000, 0x00208e46, 0x00000000, 0x0000000a, 0x00100e46, + 0x00000001, 0x0a000032, 0x001020f2, 0x00000000, 0x00100ff6, 0x00000000, + 0x00208e46, 0x00000000, 0x0000000b, 0x00100e46, 0x00000001, 0x05000036, + 0x00102032, 0x00000001, 0x00101046, 0x00000001, 0x05000036, 0x001020f2, + 0x00000002, 0x00101e46, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, + 0x0000000f, 0x00000002, 0x00000000, 0x00000006, 0x00000004, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452, + 0x00000110, 0x00000001, 0x00000054, 0x00000001, 0x0000001c, 0xfffe0400, + 0x00000100, 0x000000dc, 0x0000003c, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x74726556, 0x68537865, + 0x72656461, 0x736e6f43, 0x746e6174, 0xabab0073, 0x0000003c, 0x00000003, + 0x0000006c, 0x000000c0, 0x00000000, 0x00000000, 0x000000b4, 0x00000000, + 0x00000040, 0x00000002, 0x000000bc, 0x00000000, 0x000000cc, 0x00000040, + 0x00000040, 0x00000002, 0x000000bc, 0x00000000, 0x000000d1, 0x00000080, + 0x00000040, 0x00000002, 0x000000bc, 0x00000000, 0x65646f6d, 0xabab006c, + 0x00030002, 0x00040004, 0x00000000, 0x00000000, 0x77656976, 0x6f727000, + 0x7463656a, 0x006e6f69, 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, + 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e30332e, + 0x30303239, 0x3336312e, 0xab003438, 0x4e475349, 0x00000068, 0x00000003, + 0x00000008, 0x00000050, 0x00000000, 0x00000000, 0x00000003, 0x00000000, + 0x00000707, 0x00000059, 0x00000000, 0x00000000, 0x00000003, 0x00000001, + 0x00000303, 0x00000062, 0x00000000, 0x00000000, 0x00000003, 0x00000002, + 0x00000f0f, 0x49534f50, 0x4e4f4954, 0x58455400, 0x524f4f43, 0x4f430044, + 0x00524f4c, 0x4e47534f, 0x0000006c, 0x00000003, 0x00000008, 0x00000050, + 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000005c, + 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000c03, 0x00000065, + 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x0000000f, 0x505f5653, + 0x5449534f, 0x004e4f49, 0x43584554, 0x44524f4f, 0x4c4f4300, 0xab00524f +}; +#else +#error "An appropriate vertex shader is not defined." +#endif + /* Direct3D 11.1 renderer implementation */ static SDL_Renderer *D3D11_CreateRenderer(SDL_Window * window, Uint32 flags); static void D3D11_WindowEvent(SDL_Renderer * renderer, @@ -294,66 +683,6 @@ D3D11_DestroyRenderer(SDL_Renderer * renderer) } } -static bool -D3D11_ReadFileContents(const wstring & fileName, vector & out) -{ - ifstream in(fileName, ios::in | ios::binary); - if (!in) { - return false; - } - - in.seekg(0, ios::end); - out.resize((size_t) in.tellg()); - in.seekg(0, ios::beg); - in.read(&out[0], out.size()); - return in.good(); -} - -static bool -D3D11_ReadShaderContents(const wstring & shaderName, vector & out) -{ - wstring fileName; - -#if WINAPI_FAMILY == WINAPI_FAMILY_APP - fileName = SDL_WinRTGetFSPathUNICODE(SDL_WINRT_PATH_INSTALLED_LOCATION); - fileName += L"\\SDL_VS2012_WinRT\\"; -#elif WINAPI_FAMILY == WINAPI_PHONE_APP - fileName = SDL_WinRTGetFSPathUNICODE(SDL_WINRT_PATH_INSTALLED_LOCATION); - fileName += L"\\"; -#endif - // TODO, WinRT: test Direct3D 11.1 shader loading on Win32 - fileName += shaderName; - return D3D11_ReadFileContents(fileName, out); -} - -static HRESULT -D3D11_LoadPixelShader(SDL_Renderer * renderer, - const wstring & shaderName, - ID3D11PixelShader ** shaderOutput) -{ - D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata; - HRESULT result = S_OK; - vector fileData; - - if (!D3D11_ReadShaderContents(shaderName, fileData)) { - SDL_SetError("Unable to open SDL's pixel shader file."); - return E_FAIL; - } - - result = data->d3dDevice->CreatePixelShader( - &fileData[0], - fileData.size(), - nullptr, - shaderOutput - ); - if (FAILED(result)) { - WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreatePixelShader", result); - return result; - } - - return S_OK; -} - static HRESULT D3D11_CreateBlendMode(SDL_Renderer * renderer, BOOL enableBlending, @@ -396,12 +725,12 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer) UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; // Make sure Direct3D's debugging feature gets used, if the app requests it. - const char *hint = SDL_GetHint(SDL_HINT_RENDER_DIRECT3D11_DEBUG); - if (hint) { - if (*hint == '1') { + //const char *hint = SDL_GetHint(SDL_HINT_RENDER_DIRECT3D11_DEBUG); + //if (hint) { + // if (*hint == '1') { creationFlags |= D3D11_CREATE_DEVICE_DEBUG; - } - } + // } + //} // This array defines the set of DirectX hardware feature levels this app will support. // Note the ordering should be preserved. @@ -481,15 +810,9 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer) // // Load in SDL's one and only vertex shader: // - vector fileData; - if (!D3D11_ReadShaderContents(L"SDL_D3D11_VertexShader_Default.cso", fileData)) { - SDL_SetError("Unable to open SDL's vertex shader file."); - return E_FAIL; - } - result = data->d3dDevice->CreateVertexShader( - &fileData[0], - fileData.size(), + D3D11_VertexShader, + sizeof(D3D11_VertexShader), nullptr, &data->vertexShader ); @@ -511,8 +834,8 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer) result = data->d3dDevice->CreateInputLayout( vertexDesc, ARRAYSIZE(vertexDesc), - &fileData[0], - fileData.size(), + D3D11_VertexShader, + sizeof(D3D11_VertexShader), &data->inputLayout ); if (FAILED(result)) { @@ -523,15 +846,26 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer) // // Load in SDL's pixel shaders // - result = D3D11_LoadPixelShader(renderer, L"SDL_D3D11_PixelShader_TextureColored.cso", &data->texturePixelShader); + + result = data->d3dDevice->CreatePixelShader( + D3D11_PixelShader_Textures, + sizeof(D3D11_PixelShader_Textures), + nullptr, + &data->texturePixelShader + ); if (FAILED(result)) { - // D3D11_LoadPixelShader will have aleady set the SDL error + WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreatePixelShader ['textures' shader]", result); return result; } - result = D3D11_LoadPixelShader(renderer, L"SDL_D3D11_PixelShader_FixedColor.cso", &data->colorPixelShader); + result = data->d3dDevice->CreatePixelShader( + D3D11_PixelShader_Colors, + sizeof(D3D11_PixelShader_Colors), + nullptr, + &data->colorPixelShader + ); if (FAILED(result)) { - // D3D11_LoadPixelShader will have aleady set the SDL error + WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreatePixelShader ['color' shader]", result); return result; }