These two patches are prerequisites for the render target IsSupported() patches that will be sent later.
From: Zhiyi Zhang zzhang@codeweavers.com
--- 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); }
From: Zhiyi Zhang zzhang@codeweavers.com
Also, alpha mode should not be overwritten with D2D1_ALPHA_MODE_IGNORE just because DXGI_FORMAT_UNKNOWN is specified. --- dlls/d2d1/hwnd_render_target.c | 4 ++-- dlls/d2d1/tests/d2d1.c | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/dlls/d2d1/hwnd_render_target.c b/dlls/d2d1/hwnd_render_target.c index 5338ca3383f..4d3fe43a1b3 100644 --- a/dlls/d2d1/hwnd_render_target.c +++ b/dlls/d2d1/hwnd_render_target.c @@ -835,10 +835,10 @@ HRESULT d2d_hwnd_render_target_init(struct d2d_hwnd_render_target *render_target ID2D1Factory1_GetDesktopDpi(factory, &dxgi_rt_desc.dpiX, &dxgi_rt_desc.dpiY);
if (dxgi_rt_desc.pixelFormat.format == DXGI_FORMAT_UNKNOWN) - { dxgi_rt_desc.pixelFormat.format = DXGI_FORMAT_B8G8R8A8_UNORM; + + if (dxgi_rt_desc.pixelFormat.alphaMode == D2D1_ALPHA_MODE_UNKNOWN) dxgi_rt_desc.pixelFormat.alphaMode = D2D1_ALPHA_MODE_IGNORE; - }
swapchain_desc.BufferDesc.Width = hwnd_rt_desc->pixelSize.width; swapchain_desc.BufferDesc.Height = hwnd_rt_desc->pixelSize.height; diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index 67cb83bdd4a..a065c8ddfb5 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -6088,15 +6088,14 @@ static void test_hwnd_target(BOOL d3d11) 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_PREMULTIPLIED}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED}}, {{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_UNKNOWN}, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}}, {{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}}, @@ -6172,7 +6171,6 @@ static void test_hwnd_target(BOOL d3d11) 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);
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=125745
Your paranoid android.
=== debian11b (32 bit WoW report) ===
d2d1: Unhandled exception: page fault on write access to 0x00000000 in 32-bit code (0x6ab30f94).
This merge request was approved by Nikolay Sivov.