From 62ed43633c3d13d49d87463f69c890cc61c98735 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 6 Sep 2022 07:44:08 -0700 Subject: [PATCH] d3d9: Correct decode of 16-bit textures. Was causing crashes since we assumed this func could handle non-replaced formats. --- GPU/D3D11/TextureCacheD3D11.cpp | 10 +++++++++- GPU/Directx9/TextureCacheDX9.cpp | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/GPU/D3D11/TextureCacheD3D11.cpp b/GPU/D3D11/TextureCacheD3D11.cpp index 5cc42adee6..2563825ea1 100644 --- a/GPU/D3D11/TextureCacheD3D11.cpp +++ b/GPU/D3D11/TextureCacheD3D11.cpp @@ -59,7 +59,15 @@ static const D3D11_INPUT_ELEMENT_DESC g_QuadVertexElements[] = { Draw::DataFormat FromD3D11Format(u32 fmt) { switch (fmt) { - case DXGI_FORMAT_B8G8R8A8_UNORM: default: return Draw::DataFormat::R8G8B8A8_UNORM; + case DXGI_FORMAT_B4G4R4A4_UNORM: + return Draw::DataFormat::A4R4G4B4_UNORM_PACK16; + case DXGI_FORMAT_B5G5R5A1_UNORM: + return Draw::DataFormat::A1R5G5B5_UNORM_PACK16; + case DXGI_FORMAT_B5G6R5_UNORM: + return Draw::DataFormat::R5G6B5_UNORM_PACK16; + case DXGI_FORMAT_B8G8R8A8_UNORM: + default: + return Draw::DataFormat::R8G8B8A8_UNORM; } } diff --git a/GPU/Directx9/TextureCacheDX9.cpp b/GPU/Directx9/TextureCacheDX9.cpp index 289d52d3b7..3a06c3b4f5 100644 --- a/GPU/Directx9/TextureCacheDX9.cpp +++ b/GPU/Directx9/TextureCacheDX9.cpp @@ -41,7 +41,15 @@ Draw::DataFormat FromD3D9Format(u32 fmt) { switch (fmt) { - case D3DFMT_A8R8G8B8: default: return Draw::DataFormat::R8G8B8A8_UNORM; + case D3DFMT_A4R4G4B4: + return Draw::DataFormat::B4G4R4A4_UNORM_PACK16; + case D3DFMT_A1R5G5B5: + return Draw::DataFormat::A1R5G5B5_UNORM_PACK16; + case D3DFMT_R5G6B5: + return Draw::DataFormat::R5G6B5_UNORM_PACK16; + case D3DFMT_A8R8G8B8: + default: + return Draw::DataFormat::R8G8B8A8_UNORM; } }