From 1e4d31199953a76c1ab4914e2af41b14ef5de2d0 Mon Sep 17 00:00:00 2001
From: Zhiyi Zhang <zzhang@codeweavers.com>
Date: Thu, 3 Nov 2022 17:15:39 +0800
Subject: [PATCH] d2d1/tests: Add hwnd render target pixel format tests.

---
 dlls/d2d1/tests/d2d1.c | 48 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index 99a1013a333..67cb83bdd4a 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -6075,12 +6075,33 @@ static void test_hwnd_target(BOOL d3d11)
     ID2D1GdiInteropRenderTarget *interop;
     D2D1_RENDER_TARGET_PROPERTIES desc;
     ID2D1HwndRenderTarget *rt, *rt2;
+    D2D1_PIXEL_FORMAT pixel_format;
     struct d2d1_test_context ctx;
     ID2D1RenderTarget *rt3;
     ID2D1Factory *factory;
     D2D1_SIZE_U size;
+    unsigned int i;
     HRESULT hr;
 
+    static const struct format_test
+    {
+        D2D1_PIXEL_FORMAT format;
+        D2D1_PIXEL_FORMAT expected_format;
+        BOOL expected_failure;
+        BOOL todo;
+    }
+    format_tests[] =
+    {
+        {{DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_UNKNOWN}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}},
+        {{DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED}, FALSE, TRUE},
+        {{DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_STRAIGHT}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_STRAIGHT}, TRUE},
+        {{DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_IGNORE}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}},
+        {{DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_UNKNOWN}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}, FALSE, TRUE},
+        {{DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED}},
+        {{DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_STRAIGHT}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_STRAIGHT}, TRUE},
+        {{DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}},
+    };
+
     if (!init_test_context(&ctx, d3d11))
         return;
     release_test_context(&ctx);
@@ -6132,6 +6153,33 @@ static void test_hwnd_target(BOOL d3d11)
 
     ID2D1HwndRenderTarget_Release(rt);
 
+    /* Test render target format */
+    for (i = 0; i < ARRAY_SIZE(format_tests); ++i)
+    {
+        winetest_push_context("test %d", i);
+
+        desc.pixelFormat = format_tests[i].format;
+        hr = ID2D1Factory_CreateHwndRenderTarget(factory, &desc, &hwnd_rt_desc, &rt);
+        if (format_tests[i].expected_failure)
+        {
+            todo_wine
+            ok(FAILED(hr), "Got unexpected hr %#lx.\n", hr);
+            winetest_pop_context();
+            continue;
+        }
+        ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+
+        pixel_format = ID2D1HwndRenderTarget_GetPixelFormat(rt);
+        ok(pixel_format.format == format_tests[i].expected_format.format,
+                "Got unexpected format %#x.\n", pixel_format.format);
+        todo_wine_if(format_tests[i].todo)
+        ok(pixel_format.alphaMode == format_tests[i].expected_format.alphaMode,
+                "Got unexpected alpha mode %d.\n", pixel_format.alphaMode);
+
+        ID2D1HwndRenderTarget_Release(rt);
+        winetest_pop_context();
+    }
+
     DestroyWindow(hwnd_rt_desc.hwnd);
     ID2D1Factory_Release(factory);
 }
-- 
GitLab