Module: wine Branch: master Commit: b4d273e7fee0b39fe9dbba346d11974f5039c864 URL: https://source.winehq.org/git/wine.git/?a=commit;h=b4d273e7fee0b39fe9dbba346...
Author: Ziqing Hui zhui@codeweavers.com Date: Mon Aug 17 19:33:47 2020 +0800
d3dx10: Introduce get_d3dx10_dds_format().
Signed-off-by: Ziqing Hui zhui@codeweavers.com Signed-off-by: Matteo Bruni mbruni@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/d3dx10_43/d3dx10_43_main.c | 26 +++++++++++++++++++++++++- dlls/d3dx10_43/tests/d3dx10.c | 2 -- 2 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/dlls/d3dx10_43/d3dx10_43_main.c b/dlls/d3dx10_43/d3dx10_43_main.c index 53781f5de6..005b234437 100644 --- a/dlls/d3dx10_43/d3dx10_43_main.c +++ b/dlls/d3dx10_43/d3dx10_43_main.c @@ -54,6 +54,18 @@ file_formats[] = { &GUID_ContainerFormatWmp, D3DX10_IFF_WMP }, };
+static const DXGI_FORMAT to_be_converted_format[] = +{ + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_R8_UNORM, + DXGI_FORMAT_R8G8_UNORM, + DXGI_FORMAT_B5G6R5_UNORM, + DXGI_FORMAT_B4G4R4A4_UNORM, + DXGI_FORMAT_B5G5R5A1_UNORM, + DXGI_FORMAT_B8G8R8X8_UNORM, + DXGI_FORMAT_B8G8R8A8_UNORM +}; + static D3DX10_IMAGE_FILE_FORMAT wic_container_guid_to_file_format(GUID *container_format) { unsigned int i; @@ -82,6 +94,18 @@ static D3D10_RESOURCE_DIMENSION wic_dimension_to_d3dx10_dimension(WICDdsDimensio } }
+static DXGI_FORMAT get_d3dx10_dds_format(DXGI_FORMAT format) +{ + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(to_be_converted_format); ++i) + { + if (format == to_be_converted_format[i]) + return DXGI_FORMAT_R8G8B8A8_UNORM; + } + return format; +} + BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) @@ -339,7 +363,7 @@ HRESULT WINAPI D3DX10GetImageInfoFromMemory(const void *src_data, SIZE_T src_dat img_info->Depth = dds_params.Depth; img_info->MipLevels = dds_params.MipLevels; img_info->ResourceDimension = wic_dimension_to_d3dx10_dimension(dds_params.Dimension); - img_info->Format = dds_params.DxgiFormat; + img_info->Format = get_d3dx10_dds_format(dds_params.DxgiFormat); img_info->MiscFlags = 0; if (dds_params.Dimension == WICDdsTextureCube) { diff --git a/dlls/d3dx10_43/tests/d3dx10.c b/dlls/d3dx10_43/tests/d3dx10.c index e1d3ba0b83..e39025a930 100644 --- a/dlls/d3dx10_43/tests/d3dx10.c +++ b/dlls/d3dx10_43/tests/d3dx10.c @@ -1346,8 +1346,6 @@ static void test_get_image_info(void) ok(image_info.MiscFlags == test_image[i].expected.MiscFlags, "Test %u: Got unexpected MiscFlags %#x, expected %#x.\n", i, image_info.MiscFlags, test_image[i].expected.MiscFlags); - todo_wine_if(test_image[i].expected.ImageFileFormat == D3DX10_IFF_DDS - && test_image[i].expected.Format == DXGI_FORMAT_R8G8B8A8_UNORM) ok(image_info.Format == test_image[i].expected.Format, "Test %u: Got unexpected Format %#x, expected %#x.\n", i, image_info.Format, test_image[i].expected.Format);