Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/d2d1/tests/d2d1.c | 285 +++++++++-------------------------------- 1 file changed, 57 insertions(+), 228 deletions(-)
diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index ec4fb093635..78a16a90252 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -1110,6 +1110,26 @@ static void geometry_sink_check_(unsigned int line, const struct geometry_sink * } }
+#define init_test(a, b, c, d, e) init_test_(__LINE__, a, b, c, d, e) +static BOOL init_test_(int line, IDXGIDevice **device, HWND *window, IDXGISwapChain **swapchain, IDXGISurface **surface, ID2D1RenderTarget **rt) +{ + HRESULT hr; + + if (!(*device = create_device())) + { + skip_(__FILE__, line)("Failed to create device, skipping tests.\n"); + return FALSE; + } + *window = create_window(); + *swapchain = create_swapchain(*device, *window, TRUE); + hr = IDXGISwapChain_GetBuffer(*swapchain, 0, &IID_IDXGISurface, (void **)surface); + ok_(__FILE__, line)(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); + *rt = create_render_target(*surface); + ok_(__FILE__, line)(!!*rt, "Failed to create render target.\n"); + + return TRUE; +} + static void test_clip(void) { IDXGISwapChain *swapchain; @@ -1133,17 +1153,8 @@ static void test_clip(void) 0.0f, 0.0f, }}};
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
ID2D1RenderTarget_GetDpi(rt, &dpi_x, &dpi_y); ok(dpi_x == 96.0f, "Got unexpected dpi_x %.8e.\n", dpi_x); @@ -1351,17 +1362,9 @@ static void test_state_block(void) 11.0f, 12.0f, }}};
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); + ID2D1RenderTarget_GetFactory(rt, &factory); hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, &IID_IDWriteFactory, (IUnknown **)&dwrite_factory); ok(SUCCEEDED(hr), "Failed to create dwrite factory, hr %#x.\n", hr); @@ -1607,17 +1610,8 @@ static void test_color_brush(void) HRESULT hr; BOOL match;
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED); @@ -1746,17 +1740,8 @@ static void test_bitmap_brush(void) 0xffffffff, 0xff000000, 0xff000000, 0xff000000, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED); @@ -2050,17 +2035,8 @@ static void test_linear_brush(void) {520, 390, 0xff90ae40}, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED); @@ -2256,17 +2232,8 @@ static void test_radial_brush(void) {520, 390, 0xff4059e6}, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED); @@ -2862,17 +2829,9 @@ static void test_path_geometry(void) {D2D1_FIGURE_BEGIN_HOLLOW, D2D1_FIGURE_END_OPEN, { 40.0f, 20.0f}, 2, &expected_segments[172]}, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); + ID2D1RenderTarget_GetFactory(rt, &factory);
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); @@ -3963,17 +3922,8 @@ static void test_bitmap_formats(void) {DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, 0x8a}, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
bitmap_desc.dpiX = 96.0f; bitmap_desc.dpiY = 96.0f; @@ -4032,17 +3982,8 @@ static void test_alpha_mode(void) 0x7f7f7f7f, 0x7f000000, 0x7f000000, 0x7f000000, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -4241,7 +4182,7 @@ static void test_shared_bitmap(void) ID2D1GdiInteropRenderTarget *interop; D2D1_RENDER_TARGET_PROPERTIES desc; D2D1_BITMAP_PROPERTIES bitmap_desc; - ID2D1RenderTarget *rt1, *rt2, *rt3; + ID2D1RenderTarget *rt, *rt1, *rt2, *rt3; IDXGISurface *surface1, *surface2; ID2D1Factory *factory1, *factory2; IDXGIDevice *device1, *device2; @@ -4254,18 +4195,12 @@ static void test_shared_bitmap(void) HWND window1, window2; HRESULT hr;
- if (!(device1 = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device1, &window1, &swapchain1, &surface1, &rt)) return; - } + ID2D1RenderTarget_Release(rt);
- window1 = create_window(); window2 = create_window(); - swapchain1 = create_swapchain(device1, window1, TRUE); swapchain2 = create_swapchain(device1, window2, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain1, 0, &IID_IDXGISurface, (void **)&surface1); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); hr = IDXGISwapChain_GetBuffer(swapchain2, 0, &IID_IDXGISurface, (void **)&surface2); ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
@@ -4514,17 +4449,8 @@ static void test_bitmap_updates(void) 0xffffffff, 0xff000000, 0xff000000, 0xff000000, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -4622,17 +4548,9 @@ static void test_opacity_brush(void) 0xffffffff, 0x40000000, 0x40000000, 0xff000000, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); + ID2D1RenderTarget_GetFactory(rt, &factory);
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); @@ -4800,15 +4718,9 @@ static void test_create_target(void) }; unsigned int i;
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); + ID2D1RenderTarget_Release(rt);
hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory, NULL, (void **)&factory); ok(SUCCEEDED(hr), "Failed to create factory, hr %#x.\n", hr); @@ -4917,15 +4829,9 @@ static void test_draw_text_layout(void) D2D1_RECT_F rect; unsigned int i;
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); + ID2D1RenderTarget_Release(rt);
hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory, NULL, (void **)&factory); ok(SUCCEEDED(hr), "Failed to create factory, hr %#x.\n", hr); @@ -5812,17 +5718,8 @@ static void test_gradient(void) HWND window; HRESULT hr;
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n");
stops2[0].position = 0.5f; set_color(&stops2[0].color, 1.0f, 1.0f, 0.0f, 1.0f); @@ -5880,17 +5777,9 @@ static void test_draw_geometry(void) HRESULT hr; BOOL match;
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); + ID2D1RenderTarget_GetFactory(rt, &factory);
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); @@ -6807,17 +6696,9 @@ static void test_fill_geometry(void) HRESULT hr; BOOL match;
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); + ID2D1RenderTarget_GetFactory(rt, &factory);
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); @@ -7745,17 +7626,9 @@ static void test_layer(void) HWND window; HRESULT hr;
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); + ID2D1RenderTarget_GetFactory(rt, &factory);
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); @@ -7805,17 +7678,9 @@ static void test_bezier_intersect(void) HRESULT hr; BOOL match;
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); + ID2D1RenderTarget_GetFactory(rt, &factory);
ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f); @@ -8231,11 +8096,8 @@ static void test_bitmap_surface(void) IWICBitmap *wic_bitmap; IWICImagingFactory *wic_factory;
- if (!(d3d_device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt)) return; - }
if (FAILED(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory1, NULL, (void **)&factory))) { @@ -8244,14 +8106,6 @@ static void test_bitmap_surface(void) return; }
- /* DXGI target */ - window = create_window(); - swapchain = create_swapchain(d3d_device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); - hr = ID2D1RenderTarget_QueryInterface(rt, &IID_ID2D1DeviceContext, (void **)&device_context); ok(SUCCEEDED(hr), "Failed to get device context, hr %#x.\n", hr);
@@ -8465,11 +8319,8 @@ static void test_device_context(void) IWICBitmap *wic_bitmap; IWICImagingFactory *wic_factory;
- if (!(d3d_device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt)) return; - }
if (FAILED(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory1, NULL, (void **)&factory))) { @@ -8501,14 +8352,6 @@ static void test_device_context(void)
ID2D1DeviceContext_Release(device_context);
- /* DXGI target */ - window = create_window(); - swapchain = create_swapchain(d3d_device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); - hr = ID2D1RenderTarget_QueryInterface(rt, &IID_ID2D1DeviceContext, (void **)&device_context); ok(SUCCEEDED(hr), "Failed to get device context interface, hr %#x.\n", hr); ID2D1DeviceContext_GetTarget(device_context, (ID2D1Image **)&bitmap); @@ -9160,6 +9003,7 @@ static void test_dpi(void) IWICImagingFactory *wic_factory; IDXGISwapChain *swapchain; IDXGIDevice *d3d_device; + ID2D1RenderTarget *rt; ID2D1Factory1 *factory; IDXGISurface *surface; ID2D1Bitmap1 *bitmap; @@ -9187,11 +9031,9 @@ static void test_dpi(void) static const float dc_dpi_x = 120.0f, dc_dpi_y = 144.0f; unsigned int i;
- if (!(d3d_device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt)) return; - } + ID2D1RenderTarget_Release(rt);
if (FAILED(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory1, NULL, (void **)&factory))) { @@ -9200,11 +9042,6 @@ static void test_dpi(void) return; }
- window = create_window(); - swapchain = create_swapchain(d3d_device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); - device_context = create_device_context(factory, d3d_device); ok(!!device_context, "Failed to create device context.\n");
@@ -9404,17 +9241,9 @@ static void test_wic_bitmap_format(void) {&GUID_WICPixelFormat32bppBGR, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}}, };
- if (!(device = create_device())) - { - skip("Failed to create device, skipping tests.\n"); + if (!init_test(&device, &window, &swapchain, &surface, &rt)) return; - } - window = create_window(); - swapchain = create_swapchain(device, window, TRUE); - hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface); - ok(hr == S_OK, "Failed to get buffer, hr %#x.\n", hr); - rt = create_render_target(surface); - ok(!!rt, "Failed to create render target.\n"); + CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER,