[PATCH v2 06/12] d2d1/tests: Factor test render target creation in d2d1_test_context.

Rémi Bernon rbernon at codeweavers.com
Tue Jan 12 05:34:46 CST 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/d2d1/tests/d2d1.c | 104 +++++++++++++++++++----------------------
 1 file changed, 47 insertions(+), 57 deletions(-)

diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index d6f5e670276..55628ef11ff 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -48,6 +48,7 @@ struct d2d1_test_context
     HWND window;
     IDXGISwapChain *swapchain;
     IDXGISurface *surface;
+    ID2D1RenderTarget *rt;
 };
 
 struct resource_readback
@@ -770,6 +771,7 @@ static ID2D1RenderTarget *create_render_target_desc(IDXGISurface *surface, const
     ok(SUCCEEDED(hr), "Failed to create render target, hr %#x.\n", hr);
     ID2D1Factory_Release(factory);
 
+    if (FAILED(hr)) return NULL;
     return render_target;
 }
 
@@ -791,6 +793,17 @@ static ID2D1RenderTarget *create_render_target(IDXGISurface *surface)
 #define release_test_context(ctx) release_test_context_(__LINE__, ctx)
 static void release_test_context_(unsigned int line, struct d2d1_test_context *ctx)
 {
+    ID2D1Factory *factory;
+    ULONG ref;
+
+    if (ctx->rt)
+    {
+        ID2D1RenderTarget_GetFactory(ctx->rt, &factory);
+        ID2D1RenderTarget_Release(ctx->rt);
+        ref = ID2D1Factory_Release(factory);
+        ok(!ref, "Factory has %u references left.\n", ref);
+    }
+
     if (ctx->surface) IDXGISurface_Release(ctx->surface);
     if (ctx->swapchain) IDXGISwapChain_Release(ctx->swapchain);
     if (ctx->window) DestroyWindow(ctx->window);
@@ -834,6 +847,14 @@ static BOOL init_test_context_(unsigned int line, struct d2d1_test_context *ctx)
         return FALSE;
     }
 
+    ctx->rt = create_render_target(ctx->surface);
+    ok(!!ctx->rt, "Failed to create render target.\n");
+    if (!ctx->rt)
+    {
+        release_test_context(ctx);
+        return FALSE;
+    }
+
     return TRUE;
 }
 
@@ -1166,8 +1187,7 @@ static void test_clip(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     ID2D1RenderTarget_GetDpi(rt, &dpi_x, &dpi_y);
     ok(dpi_x == 96.0f, "Got unexpected dpi_x %.8e.\n", dpi_x);
@@ -1372,8 +1392,7 @@ static void test_state_block(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
     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);
@@ -1616,8 +1635,7 @@ static void test_color_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -1743,8 +1761,7 @@ static void test_bitmap_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -2035,8 +2052,7 @@ static void test_linear_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -2229,8 +2245,7 @@ static void test_radial_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -2502,7 +2517,6 @@ static void test_path_geometry(void)
     BOOL match, contains;
     D2D1_COLOR_F color;
     D2D1_RECT_F rect;
-    ULONG refcount;
     UINT32 count;
     HRESULT hr;
 
@@ -2823,8 +2837,7 @@ static void test_path_geometry(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -3544,8 +3557,7 @@ static void test_path_geometry(void)
 
     ID2D1SolidColorBrush_Release(brush);
     ID2D1RenderTarget_Release(rt);
-    refcount = ID2D1Factory_Release(factory);
-    ok(!refcount, "Factory has %u references left.\n", refcount);
+    ID2D1Factory_Release(factory);
     release_test_context(&ctx);
 }
 
@@ -3912,8 +3924,7 @@ static void test_bitmap_formats(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     bitmap_desc.dpiX = 96.0f;
     bitmap_desc.dpiY = 96.0f;
@@ -3969,8 +3980,7 @@ static void test_alpha_mode(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
 
@@ -4430,8 +4440,7 @@ static void test_bitmap_updates(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
 
@@ -4526,8 +4535,7 @@ static void test_opacity_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -4661,8 +4669,7 @@ static void test_opacity_brush(void)
     ID2D1BitmapBrush_Release(opacity_brush);
     ID2D1SolidColorBrush_Release(color_brush);
     ID2D1RenderTarget_Release(rt);
-    refcount = ID2D1Factory_Release(factory);
-    ok(!refcount, "Factory has %u references left.\n", refcount);
+    ID2D1Factory_Release(factory);
     release_test_context(&ctx);
 }
 
@@ -5671,8 +5678,7 @@ static void test_gradient(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     stops2[0].position = 0.5f;
     set_color(&stops2[0].color, 1.0f, 1.0f, 0.0f, 1.0f);
@@ -5720,15 +5726,13 @@ static void test_draw_geometry(void)
     D2D1_ELLIPSE ellipse;
     D2D1_COLOR_F color;
     D2D1_RECT_F rect;
-    ULONG refcount;
     HRESULT hr;
     BOOL match;
 
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -6614,8 +6618,7 @@ static void test_draw_geometry(void)
 
     ID2D1SolidColorBrush_Release(brush);
     ID2D1RenderTarget_Release(rt);
-    refcount = ID2D1Factory_Release(factory);
-    ok(!refcount, "Factory has %u references left.\n", refcount);
+    ID2D1Factory_Release(factory);
     release_test_context(&ctx);
 }
 
@@ -6635,15 +6638,13 @@ static void test_fill_geometry(void)
     D2D1_ELLIPSE ellipse;
     D2D1_COLOR_F color;
     D2D1_RECT_F rect;
-    ULONG refcount;
     HRESULT hr;
     BOOL match;
 
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -7416,8 +7417,7 @@ static void test_fill_geometry(void)
 
     ID2D1SolidColorBrush_Release(brush);
     ID2D1RenderTarget_Release(rt);
-    refcount = ID2D1Factory_Release(factory);
-    ok(!refcount, "Factory has %u references left.\n", refcount);
+    ID2D1Factory_Release(factory);
     release_test_context(&ctx);
 }
 
@@ -7559,14 +7559,12 @@ static void test_layer(void)
     ID2D1RenderTarget *rt;
     ID2D1Layer *layer;
     D2D1_SIZE_F size;
-    ULONG refcount;
     HRESULT hr;
 
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -7591,8 +7589,7 @@ static void test_layer(void)
     ID2D1Layer_Release(layer);
 
     ID2D1RenderTarget_Release(rt);
-    refcount = ID2D1Factory_Release(factory);
-    ok(!refcount, "Factory has %u references left.\n", refcount);
+    ID2D1Factory_Release(factory);
     release_test_context(&ctx);
 }
 
@@ -7606,15 +7603,13 @@ static void test_bezier_intersect(void)
     ID2D1RenderTarget *rt;
     ID2D1Factory *factory;
     D2D1_COLOR_F color;
-    ULONG refcount;
     HRESULT hr;
     BOOL match;
 
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -7729,8 +7724,7 @@ static void test_bezier_intersect(void)
 
     ID2D1SolidColorBrush_Release(brush);
     ID2D1RenderTarget_Release(rt);
-    refcount = ID2D1Factory_Release(factory);
-    ok(!refcount, "Factory has %u references left.\n", refcount);
+    ID2D1Factory_Release(factory);
     release_test_context(&ctx);
 }
 
@@ -8033,8 +8027,7 @@ static void test_bitmap_surface(void)
     }
 
     /* DXGI target */
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     hr = ID2D1RenderTarget_QueryInterface(rt, &IID_ID2D1DeviceContext, (void **)&device_context);
     ok(SUCCEEDED(hr), "Failed to get device context, hr %#x.\n", hr);
@@ -8280,8 +8273,7 @@ static void test_device_context(void)
     ID2D1DeviceContext_Release(device_context);
 
     /* DXGI target */
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
 
     hr = ID2D1RenderTarget_QueryInterface(rt, &IID_ID2D1DeviceContext, (void **)&device_context);
     ok(SUCCEEDED(hr), "Failed to get device context interface, hr %#x.\n", hr);
@@ -8805,8 +8797,7 @@ todo_wine
 
     ID2D1RenderTarget_Release(rt);
     ID2D1DeviceContext_Release(device_context);
-    refcount = ID2D1Factory1_Release(factory);
-    ok(!refcount, "Factory has %u references left.\n", refcount);
+    ID2D1Factory1_Release(factory);
     release_test_context(&ctx);
 }
 
@@ -9166,8 +9157,7 @@ static void test_wic_bitmap_format(void)
     if (!init_test_context(&ctx))
         return;
 
-    rt = create_render_target(ctx.surface);
-    ok(!!rt, "Failed to create render target.\n");
+    ID2D1RenderTarget_AddRef(rt = ctx.rt);
     CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
 
     hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER,
-- 
2.29.2




More information about the wine-devel mailing list