Signed-off-by: Rémi Bernon rbernon@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,