Ziqing Hui : d3dx10: Introduce get_d3dx10_dds_format().

Alexandre Julliard julliard at winehq.org
Tue Sep 1 15:43:31 CDT 2020


Module: wine
Branch: master
Commit: b4d273e7fee0b39fe9dbba346d11974f5039c864
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b4d273e7fee0b39fe9dbba346d11974f5039c864

Author: Ziqing Hui <zhui at codeweavers.com>
Date:   Mon Aug 17 19:33:47 2020 +0800

d3dx10: Introduce get_d3dx10_dds_format().

Signed-off-by: Ziqing Hui <zhui at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);




More information about the wine-cvs mailing list