From: Zhiyi Zhang zzhang@codeweavers.com
--- dlls/d2d1/device.c | 26 ++++++++++++++++++++++++-- dlls/d2d1/tests/d2d1.c | 14 +++++++------- 2 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c index b35e99acaf8..fa3595d7f70 100644 --- a/dlls/d2d1/device.c +++ b/dlls/d2d1/device.c @@ -2013,9 +2013,31 @@ static UINT32 STDMETHODCALLTYPE d2d_device_context_GetMaximumBitmapSize(ID2D1Dev static BOOL STDMETHODCALLTYPE d2d_device_context_IsSupported(ID2D1DeviceContext1 *iface, const D2D1_RENDER_TARGET_PROPERTIES *desc) { - FIXME("iface %p, desc %p stub!\n", iface, desc); + struct d2d_device_context *render_target = impl_from_ID2D1DeviceContext(iface); + const D2D1_RENDER_TARGET_PROPERTIES *target_desc = &render_target->desc;
- return FALSE; + TRACE("iface %p, desc %p.\n", iface, desc); + + if (!(target_desc->type == desc->type + || (target_desc->type == D2D1_RENDER_TARGET_TYPE_DEFAULT && desc->type == D2D1_RENDER_TARGET_TYPE_HARDWARE) + || (target_desc->type == D2D1_RENDER_TARGET_TYPE_HARDWARE && desc->type == D2D1_RENDER_TARGET_TYPE_DEFAULT))) + return FALSE; + + if (!(target_desc->pixelFormat.format == desc->pixelFormat.format + || (target_desc->pixelFormat.format == DXGI_FORMAT_UNKNOWN && desc->pixelFormat.format == DXGI_FORMAT_B8G8R8A8_UNORM) + || (target_desc->pixelFormat.format == DXGI_FORMAT_B8G8R8A8_UNORM && desc->pixelFormat.format == DXGI_FORMAT_UNKNOWN))) + return FALSE; + + if (!(target_desc->pixelFormat.alphaMode == desc->pixelFormat.alphaMode + || desc->pixelFormat.alphaMode == D2D1_ALPHA_MODE_UNKNOWN)) + return FALSE; + + if (!(target_desc->usage == desc->usage + || (target_desc->usage == D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING + && desc->usage == D2D1_RENDER_TARGET_USAGE_NONE))) + return FALSE; + + return TRUE; }
static HRESULT STDMETHODCALLTYPE d2d_device_context_ID2D1DeviceContext_CreateBitmap(ID2D1DeviceContext1 *iface, diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index abcf682a289..00c25604659 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -13248,7 +13248,7 @@ static void test_target_is_supported(BOOL d3d11) ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); ok(device_context == (ID2D1DeviceContext *)rt, "Got unexpected interface pointer.\n"); supported = ID2D1RenderTarget_IsSupported(rt, &template_desc); - todo_wine ok(supported, "Expected supported.\n"); + ok(supported, "Expected supported.\n");
test_desc = template_desc; test_desc.usage = D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE; @@ -13289,7 +13289,7 @@ static void test_target_is_supported(BOOL d3d11) supported = ID2D1RenderTarget_IsSupported(rt, &test_desc); if (i == j || (i == D2D1_RENDER_TARGET_TYPE_DEFAULT && j == D2D1_RENDER_TARGET_TYPE_HARDWARE) || (i == D2D1_RENDER_TARGET_TYPE_HARDWARE && j == D2D1_RENDER_TARGET_TYPE_DEFAULT)) - todo_wine ok(supported, "Expected supported.\n"); + ok(supported, "Expected supported.\n"); else ok(!supported, "Expected unsupported.\n");
@@ -13323,7 +13323,7 @@ static void test_target_is_supported(BOOL d3d11) supported = ID2D1RenderTarget_IsSupported(rt, &test_desc); if (i == j || (i == DXGI_FORMAT_UNKNOWN && j == DXGI_FORMAT_B8G8R8A8_UNORM) || (i == DXGI_FORMAT_B8G8R8A8_UNORM && j == DXGI_FORMAT_UNKNOWN)) - todo_wine ok(supported, "Expected supported.\n"); + ok(supported, "Expected supported.\n"); else ok(!supported, "Expected unsupported.\n");
@@ -13350,7 +13350,7 @@ static void test_target_is_supported(BOOL d3d11) test_desc.pixelFormat.alphaMode = j; supported = ID2D1RenderTarget_IsSupported(rt, &test_desc); if (i == j || j == D2D1_ALPHA_MODE_UNKNOWN) - todo_wine ok(supported, "Expected supported.\n"); + ok(supported, "Expected supported.\n"); else ok(!supported, "Expected unsupported.\n");
@@ -13378,7 +13378,7 @@ static void test_target_is_supported(BOOL d3d11) test_desc.dpiX = j; test_desc.dpiY = j; supported = ID2D1RenderTarget_IsSupported(rt, &test_desc); - todo_wine ok(supported, "Expected supported.\n"); + ok(supported, "Expected supported.\n");
winetest_pop_context(); } @@ -13404,7 +13404,7 @@ static void test_target_is_supported(BOOL d3d11) supported = ID2D1RenderTarget_IsSupported(rt, &test_desc); if (i == j || (i == D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING && j == D2D1_RENDER_TARGET_USAGE_NONE)) - todo_wine ok(supported, "Expected supported.\n"); + ok(supported, "Expected supported.\n"); else ok(!supported, "Expected unsupported.\n");
@@ -13430,7 +13430,7 @@ static void test_target_is_supported(BOOL d3d11) test_desc = template_desc; test_desc.minLevel = levels[j]; supported = ID2D1RenderTarget_IsSupported(rt, &test_desc); - todo_wine ok(supported, "Expected supported.\n"); + ok(supported, "Expected supported.\n");
winetest_pop_context(); }