[PATCH v2 05/12] d2d1/tests: Factor test surface creation in d2d1_test_context.

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


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

diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index 1d18122146b..d6f5e670276 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -47,6 +47,7 @@ struct d2d1_test_context
     ID3D10Device1 *device;
     HWND window;
     IDXGISwapChain *swapchain;
+    IDXGISurface *surface;
 };
 
 struct resource_readback
@@ -790,6 +791,7 @@ 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)
 {
+    if (ctx->surface) IDXGISurface_Release(ctx->surface);
     if (ctx->swapchain) IDXGISwapChain_Release(ctx->swapchain);
     if (ctx->window) DestroyWindow(ctx->window);
     ID3D10Device1_Release(ctx->device);
@@ -798,6 +800,8 @@ static void release_test_context_(unsigned int line, struct d2d1_test_context *c
 #define init_test_context(ctx) init_test_context_(__LINE__, ctx)
 static BOOL init_test_context_(unsigned int line, struct d2d1_test_context *ctx)
 {
+    HRESULT hr;
+
     memset(ctx, 0, sizeof(*ctx));
 
     if (!(ctx->device = create_device()))
@@ -822,6 +826,14 @@ static BOOL init_test_context_(unsigned int line, struct d2d1_test_context *ctx)
         return FALSE;
     }
 
+    hr = IDXGISwapChain_GetBuffer(ctx->swapchain, 0, &IID_IDXGISurface, (void **)&ctx->surface);
+    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
+    if (FAILED(hr))
+    {
+        release_test_context(ctx);
+        return FALSE;
+    }
+
     return TRUE;
 }
 
@@ -1137,7 +1149,6 @@ static void test_clip(void)
     D2D1_MATRIX_3X2_F matrix;
     D2D1_SIZE_U pixel_size;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     D2D1_POINT_2F point;
     D2D1_COLOR_F color;
     float dpi_x, dpi_y;
@@ -1155,9 +1166,7 @@ static void test_clip(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_GetDpi(rt, &dpi_x, &dpi_y);
@@ -1256,7 +1265,7 @@ static void test_clip(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "035a44d4198d6e422e9de6185b5b2c2bac5e33c9");
+    match = compare_surface(ctx.surface, "035a44d4198d6e422e9de6185b5b2c2bac5e33c9");
     ok(match, "Surface does not match.\n");
 
     /* Fractional clip rectangle coordinates, aliased mode. */
@@ -1322,11 +1331,10 @@ static void test_clip(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "cb418ec4a7c8407b5e36db06fc6292a06bb8476c");
+    match = compare_surface(ctx.surface, "cb418ec4a7c8407b5e36db06fc6292a06bb8476c");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -1339,7 +1347,6 @@ static void test_state_block(void)
     IDWriteFactory *dwrite_factory;
     ID2D1Factory1 *factory1;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     ULONG refcount;
     HRESULT hr;
@@ -1365,9 +1372,7 @@ static void test_state_block(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
     ID2D1RenderTarget_GetFactory(rt, &factory);
     hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, &IID_IDWriteFactory, (IUnknown **)&dwrite_factory);
@@ -1592,7 +1597,6 @@ static void test_state_block(void)
     ok(!refcount, "Rendering params %u references left.\n", refcount);
     ID2D1Factory_Release(factory);
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -1604,7 +1608,6 @@ static void test_color_brush(void)
     D2D1_COLOR_F color, tmp_color;
     ID2D1SolidColorBrush *brush;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     D2D1_RECT_F rect;
     float opacity;
     HRESULT hr;
@@ -1613,9 +1616,7 @@ static void test_color_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -1679,12 +1680,11 @@ static void test_color_brush(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "6d1218fca5e21fb7e287b3a439d60dbc251f5ceb");
+    match = compare_surface(ctx.surface, "6d1218fca5e21fb7e287b3a439d60dbc251f5ceb");
     ok(match, "Surface does not match.\n");
 
     ID2D1SolidColorBrush_Release(brush);
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -1702,7 +1702,6 @@ static void test_bitmap_brush(void)
     ID2D1BitmapBrush1 *brush1;
     ID2D1BitmapBrush *brush;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     D2D1_COLOR_F color;
     ID2D1Image *image;
@@ -1744,9 +1743,7 @@ static void test_bitmap_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -1834,7 +1831,7 @@ static void test_bitmap_brush(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "9437f4447d98feaad41a1c4202ee90aadc718ee6");
+    match = compare_surface(ctx.surface, "9437f4447d98feaad41a1c4202ee90aadc718ee6");
     ok(match, "Surface does not match.\n");
 
     /* Invalid interpolation mode. */
@@ -1847,7 +1844,7 @@ static void test_bitmap_brush(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
-    match = compare_surface(surface, "9437f4447d98feaad41a1c4202ee90aadc718ee6");
+    match = compare_surface(ctx.surface, "9437f4447d98feaad41a1c4202ee90aadc718ee6");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -1876,7 +1873,7 @@ static void test_bitmap_brush(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "b4b775afecdae2d26642001f4faff73663bb8b31");
+    match = compare_surface(ctx.surface, "b4b775afecdae2d26642001f4faff73663bb8b31");
     ok(match, "Surface does not match.\n");
 
     ID2D1Bitmap_Release(bitmap);
@@ -1925,7 +1922,7 @@ static void test_bitmap_brush(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "cf7b90ba7b139fdfbe9347e1907d635cfb4ed197");
+    match = compare_surface(ctx.surface, "cf7b90ba7b139fdfbe9347e1907d635cfb4ed197");
     ok(match, "Surface does not match.\n");
 
     if (SUCCEEDED(ID2D1BitmapBrush_QueryInterface(brush, &IID_ID2D1BitmapBrush1, (void **)&brush1)))
@@ -1975,7 +1972,6 @@ static void test_bitmap_brush(void)
     refcount = ID2D1Bitmap_Release(bitmap);
     ok(!refcount, "Bitmap has %u references left.\n", refcount);
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -1990,7 +1986,6 @@ static void test_linear_brush(void)
     ID2D1LinearGradientBrush *brush;
     struct resource_readback rb;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     D2D1_COLOR_F colour;
     D2D1_POINT_2F p;
@@ -2040,9 +2035,7 @@ static void test_linear_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -2084,7 +2077,7 @@ static void test_linear_brush(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    get_surface_readback(surface, &rb);
+    get_surface_readback(ctx.surface, &rb);
     for (i = 0; i < ARRAY_SIZE(test1); ++i)
     {
         DWORD colour;
@@ -2157,7 +2150,7 @@ static void test_linear_brush(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    get_surface_readback(surface, &rb);
+    get_surface_readback(ctx.surface, &rb);
     for (i = 0; i < ARRAY_SIZE(test2); ++i)
     {
         DWORD colour;
@@ -2173,7 +2166,6 @@ static void test_linear_brush(void)
     refcount = ID2D1GradientStopCollection_Release(gradient);
     ok(!refcount, "Gradient has %u references left.\n", refcount);
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -2188,7 +2180,6 @@ static void test_radial_brush(void)
     ID2D1RadialGradientBrush *brush;
     struct resource_readback rb;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     D2D1_COLOR_F colour;
     D2D1_POINT_2F p;
@@ -2238,9 +2229,7 @@ static void test_radial_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -2288,7 +2277,7 @@ static void test_radial_brush(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    get_surface_readback(surface, &rb);
+    get_surface_readback(ctx.surface, &rb);
     for (i = 0; i < ARRAY_SIZE(test1); ++i)
     {
         DWORD colour;
@@ -2363,7 +2352,7 @@ static void test_radial_brush(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    get_surface_readback(surface, &rb);
+    get_surface_readback(ctx.surface, &rb);
     for (i = 0; i < ARRAY_SIZE(test2); ++i)
     {
         DWORD colour;
@@ -2379,7 +2368,6 @@ static void test_radial_brush(void)
     refcount = ID2D1GradientStopCollection_Release(gradient);
     ok(!refcount, "Gradient has %u references left.\n", refcount);
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -2510,7 +2498,6 @@ static void test_path_geometry(void)
     ID2D1PathGeometry *geometry;
     ID2D1Geometry *tmp_geometry;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     BOOL match, contains;
     D2D1_COLOR_F color;
@@ -2836,9 +2823,7 @@ static void test_path_geometry(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
@@ -3224,7 +3209,7 @@ static void test_path_geometry(void)
     ID2D1RenderTarget_FillGeometry(rt, (ID2D1Geometry *)transformed_geometry, (ID2D1Brush *)brush, NULL);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "3aace1b22aae111cb577614fed16e4eb1650dba5");
+    match = compare_surface(ctx.surface, "3aace1b22aae111cb577614fed16e4eb1650dba5");
     ok(match, "Surface does not match.\n");
 
     /* Edge test. */
@@ -3305,7 +3290,7 @@ static void test_path_geometry(void)
     ID2D1RenderTarget_FillGeometry(rt, (ID2D1Geometry *)transformed_geometry, (ID2D1Brush *)brush, NULL);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "bfb40a1f007694fa07dbd3b854f3f5d9c3e1d76b");
+    match = compare_surface(ctx.surface, "bfb40a1f007694fa07dbd3b854f3f5d9c3e1d76b");
     ok(match, "Surface does not match.\n");
     ID2D1TransformedGeometry_Release(transformed_geometry);
     ID2D1PathGeometry_Release(geometry);
@@ -3365,7 +3350,7 @@ static void test_path_geometry(void)
     ID2D1RenderTarget_FillGeometry(rt, (ID2D1Geometry *)transformed_geometry, (ID2D1Brush *)brush, NULL);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_figure(surface, 0, 0, 160, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 0, 0, 160, 160, 0xff652e89, 64,
             "7xoCngECngECngECngECngECngECngECnQEEnAEEnAEEnAEEnAEEmwEGmgEGmgEGmgEGmQEImAEI"
             "lAEECASLAQgKCIEBDQoMew8KD3YQDBByEgwSbhMOEmwUDhRpFBAUZxUQFWUVEhVjFhIWYRYUFl8X"
             "FBddFxYWXRYYFlsXGBdaFhoWWRYcFlgVHhVXFSAVVhQiFFUUIxRVEyYTVBIoElQRKhFUECwQUxAu"
@@ -3375,7 +3360,7 @@ static void test_path_geometry(void)
             "EBVnFBAUaRQOFGsTDhJvEgwSchAMEHYPCg96DQoMggEICgiLAQQIBJQBCJgBCJkBBpoBBpoBBpoB"
             "BpsBBJwBBJwBBJwBBJwBBJ0BAp4BAp4BAp4BAp4BAp4BAp4BAp4BAgAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 0, 226, 160, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 0, 226, 160, 160, 0xff652e89, 64,
             "7xoCngECngECngECngECngECngECngECnQEEnAEEnAEEnAEEnAEEmwEGmgEGmgEGmgEGmQEImAEI"
             "lAEECASLAQgKCIEBDQoMew8KD3YQDBByEgwSbhMOEmwUDhRpFBAUZxUQFWUVEhVjFhIWYRYUFl8X"
             "FBddFxYWXRYYFlsXGBdaFhoWWRYcFlgVHhVXFSAVVhQiFFUUIxRVEyYTVBIoElQRKhFUECwQUxAu"
@@ -3385,7 +3370,7 @@ static void test_path_geometry(void)
             "EBVnFBAUaRQOFGsTDhJvEgwSchAMEHYPCg96DQoMggEICgiLAQQIBJQBCJgBCJkBBpoBBpoBBpoB"
             "BpsBBJwBBJwBBJwBBJwBBJ0BAp4BAp4BAp4BAp4BAp4BAp4BAp4BAgAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 0, 320, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 160, 0, 320, 160, 0xff652e89, 64,
             "gVQBwAIBWgHlAQFYAecBAVYB6QEBVAHrAQEjDCMB7AECHhQeAu0BAxoYGgPvAQMWHhYD8QEDFCAU"
             "A/MBBBAkEAT0AQUOJw0F9QEGCioKBvcBBggsCAb4AQgFLgUI+QEJATIBCfsBCAIwAgj8AQcFLAUH"
             "/QEFCCgIBf4BBAwiDAT/AQIQHBAClwISlwIBPgGAAgI8Av8BAzwD/QEEPAT7AQY6BvkBBzoH+AEI"
@@ -3397,7 +3382,7 @@ static void test_path_geometry(void)
             "BfUBBBAlDwTzAQQSIhIE8QEDFh4WA/ABAhkaGQLvAQIcFhwC7QECIBAgAusBASgEKAHpAQFWAecB"
             "AVgB5QEBWgHAAgHhUgAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 320, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 160, 160, 320, 160, 0xff652e89, 64,
             "/VUB5QEBWAHnAQFWAekBAVQB6wECIQ8hAe0BAh0VHQLuAQIZGhkD7wEDFh4WA/EBBBMhEwPzAQQQ"
             "JQ8F9AEFDCgNBfUBBgoqCgb3AQcHLQcG+QEIBC8ECPkBPAEJ+wEIAy8CCP0BBgYrBQf9AQUJJgkF"
             "/wEDDSANBP8BAhEaEQKYAhAXAYACAT4BgAICPQL+AQM8BPwBBTsE+wEGOgb6AQc5B/gBCDgJ9gEJ"
@@ -3461,21 +3446,21 @@ static void test_path_geometry(void)
     ID2D1RenderTarget_FillGeometry(rt, (ID2D1Geometry *)transformed_geometry, (ID2D1Brush *)brush, NULL);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_figure(surface, 0, 0, 160, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 0, 0, 160, 160, 0xff652e89, 64,
             "7xoCngECngECngECngECngECngECngECnQEEnAEEnAEEnAEEnAEEmwEGmgEGmgEGmgEGmQEImAEI"
             "lAEQiwEagQEjeyh2LHIwbjNsNmk4ZzplPGM+YUBfQl1DXURbRlpGWUhYSFdKVkpVS1VMVExUTFRM"
             "U05STlJOUk5STlFQUFBQUFBQTlRIXD9mMnYqdjJmP1xIVE5QUFBQUFBQUU5STlJOUk5STlNMVExU"
             "TFRMVEtWSlZKV0hYSFlGWkZbRFxDXkJfQGE+YzxlOmc4aTZrM28wcix2KHojggEaiwEQlAEImAEI"
             "mQEGmgEGmgEGmgEGmwEEnAEEnAEEnAEEnAEEnQECngECngECngECngECngECngECngEC");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 0, 226, 160, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 0, 226, 160, 160, 0xff652e89, 64,
             "7xoCngECngECngECngECngECngECngECnQEEnAEEnAEEnAEEnAEEmwEGmgEGmgEGmgEGmQEImAEI"
             "lAEQiwEagQEjeyh2LHIwbjNsNmk4ZzplPGM+YUBfQl1DXURbRlpGWUhYSFdKVkpVS1VMVExUTFRM"
             "U05STlJOUk5STlFQUFBQUFBQTlRIXD9mMnYqdjJmP1xIVE5QUFBQUFBQUU5STlJOUk5STlNMVExU"
             "TFRMVEtWSlZKV0hYSFlGWkZbRFxDXkJfQGE+YzxlOmc4aTZrM28wcix2KHojggEaiwEQlAEImAEI"
             "mQEGmgEGmgEGmgEGmwEEnAEEnAEEnAEEnAEEnQECngECngECngECngECngECngECngEC");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 0, 320, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 160, 0, 320, 160, 0xff652e89, 64,
             "4VIBwAIBWgHlAQFYAecBAVYB6QEBVAHrAQIhDiIB7QECHRUdAu4BAhkaGQPvAQMWHhYD8QEEEyET"
             "A/MBBBAkEAT1AQUMKA0F9QEGCioKBvcBBwctBwb5AQgELwQI+QEJATIBCfsBRP0BQ/0BQv8BQf8B"
             "QIECP4ACQIACQf4BQ/wBRPsBRvoBR/gBSPcBSvYBS/QBTPMBTvIBTvIBT/ABUPABUe4BUu4BUu4B"
@@ -3484,7 +3469,7 @@ static void test_path_geometry(void)
             "RPsBCQEyAQn6AQgELwQI+AEHBy0GB/cBBgoqCgb2AQUMKA0F9AEEECUPBPMBBBIiEwPxAQMWHhYD"
             "8AECGRoZA+4BAh0VHQLsAQIhDiIB6wEBVAHpAQFWAecBAVgB5QEBWgHAAgEA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 320, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 160, 160, 320, 160, 0xff652e89, 64,
             "gVQBXAHjAQFaAeUBAVgB5wEBVgHpAQEpAikB6wECIBAgAu0BAhwWHALvAQIZGhkC8AEDFh4WA/EB"
             "BBIiEgTzAQQPJRAE9QEFDCgMBfYBBgoqCgb3AQcGLgYH+QEIAzADCPoBRvsBRPwBRP0BQv8BQIAC"
             "QIECPoECQP8BQv0BRPwBRPsBRvkBSPgBSPcBSvUBTPQBTPMBTvIBTvEBUPABUO8BUu4BUu4BUu4B"
@@ -3528,7 +3513,7 @@ static void test_path_geometry(void)
     ID2D1RenderTarget_FillGeometry(rt, (ID2D1Geometry *)geometry, (ID2D1Brush *)brush, NULL);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "a875e68e0cb9c055927b1b50b879f90b24e38470");
+    match = compare_surface(ctx.surface, "a875e68e0cb9c055927b1b50b879f90b24e38470");
     ok(match, "Surface does not match.\n");
     ID2D1PathGeometry_Release(geometry);
 
@@ -3561,7 +3546,6 @@ static void test_path_geometry(void)
     ID2D1RenderTarget_Release(rt);
     refcount = ID2D1Factory_Release(factory);
     ok(!refcount, "Factory has %u references left.\n", refcount);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -3898,7 +3882,6 @@ static void test_bitmap_formats(void)
     D2D1_BITMAP_PROPERTIES bitmap_desc;
     D2D1_SIZE_U size = {4, 4};
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Bitmap *bitmap;
     unsigned int i, j;
     HRESULT hr;
@@ -3929,9 +3912,7 @@ static void test_bitmap_formats(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     bitmap_desc.dpiX = 96.0f;
@@ -3958,7 +3939,6 @@ static void test_bitmap_formats(void)
     }
 
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -3970,7 +3950,6 @@ static void test_alpha_mode(void)
     ID2D1SolidColorBrush *color_brush;
     ID2D1BitmapBrush *bitmap_brush;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Bitmap *bitmap;
     D2D1_COLOR_F color;
     D2D1_RECT_F rect;
@@ -3990,9 +3969,7 @@ static void test_alpha_mode(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -4019,7 +3996,7 @@ static void test_alpha_mode(void)
     ID2D1RenderTarget_Clear(rt, NULL);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "48c41aff3a130a17ee210866b2ab7d36763934d5");
+    match = compare_surface(ctx.surface, "48c41aff3a130a17ee210866b2ab7d36763934d5");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4027,7 +4004,7 @@ static void test_alpha_mode(void)
     ID2D1RenderTarget_Clear(rt, &color);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "6487e683730fb5a77c1911388d00b04664c5c4e4");
+    match = compare_surface(ctx.surface, "6487e683730fb5a77c1911388d00b04664c5c4e4");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4035,7 +4012,7 @@ static void test_alpha_mode(void)
     ID2D1RenderTarget_Clear(rt, &color);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "7a35ba09e43cbaf591388ff1ef8de56157630c98");
+    match = compare_surface(ctx.surface, "7a35ba09e43cbaf591388ff1ef8de56157630c98");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4076,7 +4053,7 @@ static void test_alpha_mode(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "14f8ac64b70966c7c3c6281c59aaecdb17c3b16a");
+    match = compare_surface(ctx.surface, "14f8ac64b70966c7c3c6281c59aaecdb17c3b16a");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_Release(rt);
@@ -4087,7 +4064,7 @@ static void test_alpha_mode(void)
     rt_desc.dpiY = 0.0f;
     rt_desc.usage = D2D1_RENDER_TARGET_USAGE_NONE;
     rt_desc.minLevel = D2D1_FEATURE_LEVEL_DEFAULT;
-    rt = create_render_target_desc(surface, &rt_desc);
+    rt = create_render_target_desc(ctx.surface, &rt_desc);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -4114,7 +4091,7 @@ static void test_alpha_mode(void)
     ID2D1RenderTarget_Clear(rt, NULL);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "b44510bf2d2e61a8d7c0ad862de49a471f1fd13f");
+    match = compare_surface(ctx.surface, "b44510bf2d2e61a8d7c0ad862de49a471f1fd13f");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4122,7 +4099,7 @@ static void test_alpha_mode(void)
     ID2D1RenderTarget_Clear(rt, &color);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "2184f4a9198fc1de09ac85301b7a03eebadd9b81");
+    match = compare_surface(ctx.surface, "2184f4a9198fc1de09ac85301b7a03eebadd9b81");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4130,7 +4107,7 @@ static void test_alpha_mode(void)
     ID2D1RenderTarget_Clear(rt, &color);
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "6527ec83b4039c895b50f9b3e144fe0cf90d1889");
+    match = compare_surface(ctx.surface, "6527ec83b4039c895b50f9b3e144fe0cf90d1889");
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4171,7 +4148,7 @@ static void test_alpha_mode(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "465f5a3190d7bde408b3206b4be939fb22f8a3d6");
+    match = compare_surface(ctx.surface, "465f5a3190d7bde408b3206b4be939fb22f8a3d6");
     ok(match, "Surface does not match.\n");
 
     refcount = ID2D1Bitmap_Release(bitmap);
@@ -4179,7 +4156,6 @@ static void test_alpha_mode(void)
     ID2D1SolidColorBrush_Release(color_brush);
     ID2D1BitmapBrush_Release(bitmap_brush);
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -4192,7 +4168,7 @@ static void test_shared_bitmap(void)
     D2D1_RENDER_TARGET_PROPERTIES desc;
     D2D1_BITMAP_PROPERTIES bitmap_desc;
     ID2D1RenderTarget *rt1, *rt2, *rt3;
-    IDXGISurface *surface1, *surface2;
+    IDXGISurface *surface2;
     ID2D1Factory *factory1, *factory2;
     ID3D10Device1 *device2;
     IWICImagingFactory *wic_factory;
@@ -4209,8 +4185,6 @@ static void test_shared_bitmap(void)
 
     window2 = create_window();
     swapchain2 = create_swapchain(ctx.device, window2, TRUE);
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 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);
 
@@ -4245,7 +4219,7 @@ static void test_shared_bitmap(void)
     ok(SUCCEEDED(hr), "Failed to create factory, hr %#x.\n", hr);
 
     /* DXGI surface render targets with the same device and factory. */
-    hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory1, surface1, &desc, &rt1);
+    hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory1, ctx.surface, &desc, &rt1);
     ok(SUCCEEDED(hr), "Failed to create render target, hr %#x.\n", hr);
     hr = ID2D1RenderTarget_CreateBitmap(rt1, size, NULL, 0, &bitmap_desc, &bitmap1);
     check_bitmap_surface(bitmap1, TRUE, 0);
@@ -4425,7 +4399,6 @@ static void test_shared_bitmap(void)
     IWICBitmap_Release(wic_bitmap2);
     IWICBitmap_Release(wic_bitmap1);
     IDXGISurface_Release(surface2);
-    IDXGISurface_Release(surface1);
     IDXGISwapChain_Release(swapchain2);
     ID3D10Device1_Release(device2);
     release_test_context(&ctx);
@@ -4438,7 +4411,6 @@ static void test_bitmap_updates(void)
     struct d2d1_test_context ctx;
     D2D1_BITMAP_PROPERTIES bitmap_desc;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     D2D1_RECT_U dst_rect;
     ID2D1Bitmap *bitmap;
     D2D1_COLOR_F color;
@@ -4458,9 +4430,7 @@ static void test_bitmap_updates(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -4519,12 +4489,11 @@ static void test_bitmap_updates(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    match = compare_surface(surface, "cb8136c91fbbdc76bb83b8c09edc1907b0a5d0a6");
+    match = compare_surface(ctx.surface, "cb8136c91fbbdc76bb83b8c09edc1907b0a5d0a6");
     ok(match, "Surface does not match.\n");
 
     ID2D1Bitmap_Release(bitmap);
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -4537,7 +4506,6 @@ static void test_opacity_brush(void)
     ID2D1SolidColorBrush *color_brush;
     D2D1_MATRIX_3X2_F matrix;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     ID2D1Bitmap *bitmap;
     D2D1_COLOR_F color;
@@ -4558,9 +4526,7 @@ static void test_opacity_brush(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
@@ -4646,7 +4612,7 @@ static void test_opacity_brush(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(hr == D2DERR_INCOMPATIBLE_BRUSH_TYPES, "Got unexpected hr %#x.\n", hr);
-    match = compare_surface(surface, "7141c6c7b3decb91196428efb1856bcbf9872935");
+    match = compare_surface(ctx.surface, "7141c6c7b3decb91196428efb1856bcbf9872935");
     ok(match, "Surface does not match.\n");
     ID2D1RenderTarget_BeginDraw(rt);
 
@@ -4688,7 +4654,7 @@ static void test_opacity_brush(void)
 
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
-    match = compare_surface(surface, "c3a5802d1750efa3e9122c1a92f6064df3872732");
+    match = compare_surface(ctx.surface, "c3a5802d1750efa3e9122c1a92f6064df3872732");
     ok(match, "Surface does not match.\n");
 
     ID2D1BitmapBrush_Release(bitmap_brush);
@@ -4697,7 +4663,6 @@ static void test_opacity_brush(void)
     ID2D1RenderTarget_Release(rt);
     refcount = ID2D1Factory_Release(factory);
     ok(!refcount, "Factory has %u references left.\n", refcount);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -4706,7 +4671,6 @@ static void test_create_target(void)
     struct d2d1_test_context ctx;
     ID2D1Factory *factory;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     HRESULT hr;
     static const struct
     {
@@ -4728,8 +4692,6 @@ static void test_create_target(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
 
     hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory, NULL, (void **)&factory);
     ok(SUCCEEDED(hr), "Failed to create factory, hr %#x.\n", hr);
@@ -4750,7 +4712,7 @@ static void test_create_target(void)
         desc.usage = D2D1_RENDER_TARGET_USAGE_NONE;
         desc.minLevel = D2D1_FEATURE_LEVEL_DEFAULT;
 
-        hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory, surface, &desc, &rt);
+        hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory, ctx.surface, &desc, &rt);
         ok(hr == create_dpi_tests[i].hr, "Wrong return code, hr %#x, expected %#x, test %u.\n", hr,
             create_dpi_tests[i].hr, i);
 
@@ -4780,7 +4742,6 @@ static void test_create_target(void)
     }
 
     ID2D1Factory_Release(factory);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -4821,7 +4782,6 @@ static void test_draw_text_layout(void)
     D2D1_RENDER_TARGET_PROPERTIES desc;
     ID2D1Factory *factory, *factory2;
     ID2D1RenderTarget *rt, *rt2;
-    IDXGISurface *surface;
     HRESULT hr;
     IDWriteFactory *dwrite_factory;
     IDWriteTextFormat *text_format;
@@ -4837,8 +4797,6 @@ static void test_draw_text_layout(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
 
     hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory, NULL, (void **)&factory);
     ok(SUCCEEDED(hr), "Failed to create factory, hr %#x.\n", hr);
@@ -4855,10 +4813,10 @@ static void test_draw_text_layout(void)
     desc.usage = D2D1_RENDER_TARGET_USAGE_NONE;
     desc.minLevel = D2D1_FEATURE_LEVEL_DEFAULT;
 
-    hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory, surface, &desc, &rt);
+    hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory, ctx.surface, &desc, &rt);
     ok(SUCCEEDED(hr), "Failed to create a target, hr %#x.\n", hr);
 
-    hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory2, surface, &desc, &rt2);
+    hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory2, ctx.surface, &desc, &rt2);
     ok(SUCCEEDED(hr), "Failed to create a target, hr %#x.\n", hr);
 
     hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, &IID_IDWriteFactory, (IUnknown **)&dwrite_factory);
@@ -4942,7 +4900,6 @@ todo_wine
 
     ID2D1Factory_Release(factory);
     ID2D1Factory_Release(factory2);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -5706,7 +5663,6 @@ static void test_gradient(void)
     ID2D1GradientStopCollection *gradient;
     D2D1_GRADIENT_STOP stops[3], stops2[3];
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     D2D1_COLOR_F color;
     unsigned int i;
     UINT32 count;
@@ -5715,9 +5671,7 @@ static void test_gradient(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     stops2[0].position = 0.5f;
@@ -5746,7 +5700,6 @@ static void test_gradient(void)
     ID2D1GradientStopCollection_Release(gradient);
     ID2D1RenderTarget_Release(rt);
 
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -5762,7 +5715,6 @@ static void test_draw_geometry(void)
     D2D1_MATRIX_3X2_F matrix;
     ID2D1GeometrySink *sink;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     D2D1_POINT_2F p0, p1;
     D2D1_ELLIPSE ellipse;
@@ -5775,9 +5727,7 @@ static void test_draw_geometry(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
@@ -5824,18 +5774,18 @@ static void test_draw_geometry(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0, "");
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0, "");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQUFBQUFBQUFDoYQAA");
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQUFBQUFBQUFDoYQAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0,
             "xjIUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUxjIA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 2,
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 2,
             "zjECnQETjAEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEV"
             "igEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEV"
             "igEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEV"
@@ -5843,18 +5793,18 @@ static void test_draw_geometry(void)
             "igEVigEVigEVigEVjAETnQECzjEA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "5mAUjAEUjAEUjAEUjAEUhmIA");
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 0, "5mAUjAEUjAEUjAEUjAEUhmIA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "vmBkPGQ8ZDxkPGTeYQAA");
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 0, "vmBkPGQ8ZDxkPGTeYQAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 0,
             "5i4UjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUhjAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 0,
             "vi5kPGQ8ZDxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -5863,18 +5813,18 @@ static void test_draw_geometry(void)
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 10,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 10,
             "hDAYgwEieyh1LnAybBcIF2gWDhZkFhIWYRUWFV4VGhVbFRwVWRUeFVcVIBVVFCQUUxQmFFEUKBRP"
             "FSgVTRUqFUwULBRLFC4USRQwFEgUMBRHFDIURhQyFEUUNBREFDQUQxQ2FEIUNhRBFDgUQBQ4FEAU"
             "OBQ/FDoUPhQ6FD4UOhQ+FDoUPhQ6FD0UPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
@@ -5917,18 +5867,18 @@ static void test_draw_geometry(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 0,
             "3C4oaUZVUExYRlxCHCgcPxU4FT0UPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -5937,18 +5887,18 @@ static void test_draw_geometry(void)
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FD0VOBU/YEJcRlhMUFVG7S8A");
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 8,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 8,
             "3C4obT5dSFRQTlRKGCgYRhYwFkMVNBVBFTYVPxU5FD4UOhQ9FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -5957,18 +5907,18 @@ static void test_draw_geometry(void)
             "PBQ8FDwUPRQ6FD4UOhQ/FTYVQRU0FUMWMBZGWEpVTVBTSltA8C8A");
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 0,
             "3C4oZU5NWERgP2I9HigePBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6011,18 +5961,18 @@ static void test_draw_geometry(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 16,
             "hDAYgwEieyh1LnAybBcIF2gWDhZkFhIWYRUWFV4WGRVbFRwVWRUeFVcVIBVVFSMUUxQmFFEVJxRP"
             "FSgVTRUqFUwULBRLFC4USRUvFEgUMBRHFDIURhQyFEUUNBREFDQUQxQ2FEIUNhRBFDgUQBQ4FEAU"
             "OBQ/FTkUPhQ6FD4UOhQ+FDoUPhQ6FD0UPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
@@ -6031,18 +5981,18 @@ static void test_draw_geometry(void)
             "FRwVWxUaFV4VFhVhFhIWZBYOFmgWChZsMnAudCp6IoMBGIQw");
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 16,
             "3C4obzpjQF5EWkhXFSAVVRQkFFMUJhRRFCgUTxQqFE0VKhVMFCwUSxQuFEoULhVIFDAUSBQwFUYU"
             "MhRGFDIURRQ0FEQUNBRDFTQVQhQ2FEIUNhRCFDYUQRQ4FEAUOBRAFDgUQBQ4FD8UOhQ+FDoUPhQ6"
             "FD4UOhQ+FDoUPhQ6FD0VOxQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6051,18 +6001,18 @@ static void test_draw_geometry(void)
             "LhRLFCwUTBUrFE0UKhRPFCgUURQmFFMUJBRVSldIWUZdQWI78i8A");
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 8,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 8,
             "9i80ZERWUExYRV5AHCocPRY4FjwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6154,18 +6104,18 @@ static void test_draw_geometry(void)
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
     ID2D1PathGeometry_Release(geometry);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0, "");
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0, "");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "");
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0, "");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "");
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0, "");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0, "q2MKlgEKq2MA");
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 0, "q2MKlgEKq2MA");
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGNQUFCIYwAA");
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 0, "iGNQUFCIYwAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 0,
             "qyIKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEK"
             "lgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEK"
             "lgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKQQpLCkEKSwqWAQqW"
@@ -6173,9 +6123,9 @@ static void test_draw_geometry(void)
             "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqW"
             "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQrLIwAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "4GLAAuBi");
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 0, "4GLAAuBi");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 0,
             "qyIKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEK"
             "lgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEK"
             "lgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKSwpBCksKQQqWAQqWAQqW"
@@ -6184,7 +6134,7 @@ static void test_draw_geometry(void)
             "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQrLIwAA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 0,
             "rycCngECnQEEnAEEmwEGmgEGmQEImAEIlwEKlgEKlQEMlAEMkwEOkgEOkQEQkAEQjwESjgESjQEU"
             "jAEUiwEKAgqKAQoCCokBCgQKiAEKBAqHAQoGCoYBCgYKhQEKCAqEAQoICoMBCgoKggEKCgqBAQoM"
             "CoABCgwKfwoOCn4KDgp9ChAKfAoQCnsKEgp6ChIKeQoUCngKFAp3ChYKdgoWCnUKGAp0ChgKcwoa"
@@ -6193,7 +6143,7 @@ static void test_draw_geometry(void)
             "CjYKVQo4ClQKOApTCjoKUgo6ClEKPApQCjwKTwo+Ck4KPgpNCkAKTApACksKQgpKCkIKSQpECkgK"
             "RApHCkYKozIA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 0,
             "ozIKRgpHCkQKSApECkkKQgpKCkIKSwpACkwKQApNCj4KTgo+Ck8KPApQCjwKUQo6ClIKOgpTCjgK"
             "VAo4ClUKNgpWCjYKVwo0ClgKNApZCjIKWgoyClsKMApcCjAKXQouCl4KLgpfCiwKYAosCmEKKgpi"
             "CioKYwooCmQKKAplCiYKZgomCmcKJApoCiQKaQoiCmoKIgprCiAKbAogCm0KHgpuCh4KbwocCnAK"
@@ -6202,7 +6152,7 @@ static void test_draw_geometry(void)
             "CgIKiwEUjAEUjQESjgESjwEQkAEQkQEOkgEOkwEMlAEMlQEKlgEKlwEImAEImQEGmgEGmwEEnAEE"
             "nQECngECrycA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 0,
             "rycCngECnQEEnAEEmwEGmgEGmQEImAEIlwEKlgEKlQEMlAEMkwEOkgEOkQEQkAEQjwESjgESjQEU"
             "jAEUiwEKAgqKAQoCCokBCgQKiAEKBAqHAQoGCoYBCgYKhQEKCAqEAQoICoMBCgoKggEKCgqBAQoM"
             "CoABCgwKfwoOCn4KDgp9ChAKfAoQCnsKEgp6ChIKeQoUCngKFAp3ChYKdgoWCnUKGAp0ChgKcwoa"
@@ -6211,7 +6161,7 @@ static void test_draw_geometry(void)
             "CjYKVQo4ClQKOApTCjoKUgo6ClEKPApQCjwKTwo+Ck4KPgpNCkAKTApACksKQgpKCkIKSQpECkgK"
             "RApHWkZagzEA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 0,
             "gzFaRlpHCkQKSApECkkKQgpKCkIKSwpACkwKQApNCj4KTgo+Ck8KPApQCjwKUQo6ClIKOgpTCjgK"
             "VAo4ClUKNgpWCjYKVwo0ClgKNApZCjIKWgoyClsKMApcCjAKXQouCl4KLgpfCiwKYAosCmEKKgpi"
             "CioKYwooCmQKKAplCiYKZgomCmcKJApoCiQKaQoiCmoKIgprCiAKbAogCm0KHgpuCh4KbwocCnAK"
@@ -6266,7 +6216,7 @@ static void test_draw_geometry(void)
     ID2D1RectangleGeometry_Release(rect_geometry[1]);
     ID2D1RectangleGeometry_Release(rect_geometry[0]);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0,
             "vi5kPGQ8ZDxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6274,7 +6224,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 32,
+    match = compare_figure(ctx.surface, 160,   0, 320, 160, 0xff652e89, 32,
             "8XYGtQIOrAIXpAIfmwIokwIwigI4gwJA+gFJ8gFR6QEzAiXhATMKJdgBMxMl0AEzGyXHATMkJb8B"
             "MysmtgEzNCWvATM8JaYBM0UlngEzTSWVATNWJY0BM14lhAEzZyV8M28lczN4JWszgAElYjOIASZa"
             "M5ABJVgtmQElWCWhASVYJaEBJVgloQElWCWhASVYJaEBJVgloQElWCWhASVYJaEBJVglmQEtWCWQ"
@@ -6282,7 +6232,7 @@ static void test_draw_geometry(void)
             "KzO/ASUkM8cBJRsz0AElEzPYASUKM+EBJQIz6QFR8gFJ+gFAgwI4igIwkwIomwIfpAIXrAIOtQIG"
             "8XYA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 32,
+    match = compare_figure(ctx.surface,   0, 160, 160, 320, 0xff652e89, 32,
             "ujEBngECnQEDnQEEmwEFmgEHmQEHmAEIlwEKlgEKlQELlAENkwENkgEOkQEQjwERjwESjQETjAEU"
             "jAEKAQqKAQoCCokBCgMKiQEKBAqHAQoFCoYBCgYKhgEKBwqEAQoICoMBCgkKgwEKCgqBAQoLCoAB"
             "Cg0KfgsNCn4KDgp9ChAKewsQCnsKEQp6ChMKeAoUCngKFAp3ChYKdQoXCnUKGApzChkKcgoaCnIK"
@@ -6301,7 +6251,7 @@ static void test_draw_geometry(void)
             "CoMBCggKhAEKBwqGAQoGCoYBCgUKhwEKBAqJAQoDCokBCgIKigEKAQqMARSMARONARKPARGPARCR"
             "AQ6SAQ2TAQ2UAQuVAQqWAQqXAQiYAQeZAQeaAQWbAQSdAQOdAQKeAQG6MQAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 160, 160, 320, 320, 0xff652e89, 64,
             "82ICvQIEugIHuAIJtgIKtAINsgIPsAIRrQITrAIVqQIYpwIZpgIbowIeoQIgnwIhnQIkmwImmAIp"
             "lgIVARSVAhUDFJICFQUVkAIVBxSPAhUJFIwCFQwUigIVDRWHAhYPFIYCFRIUhAIVFBSBAhUWFf8B"
             "FRgU/gEVGhT7ARUcFfkBFR4U9wEWIBT1ARUjFPMBFSQV8AEVJxTvARUpFOwBFisU6gEVLRXoARUv"
@@ -6437,7 +6387,7 @@ static void test_draw_geometry(void)
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
     ID2D1PathGeometry_Release(geometry);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0,
             "vi5kPGQ8ZDxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6445,7 +6395,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0,
             "vi5kPGQ8ZDxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6453,7 +6403,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0,
             "vi5kPGQ8ZDxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6461,7 +6411,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 0,
             "yC5aRlpGWjxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6470,7 +6420,7 @@ static void test_draw_geometry(void)
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 64,
             "3SoDYAM6B1gHOgtQCzoPSA87EkASPBc2FzwcLBw8IiAiPWI+Yj5iPhQBOAEUPhQKJgoUPxQ4FEAU"
             "OBRAFDgUQBQ4FEAUOBRBFDYUQhQ2FEIUNhRCFDYUQhQ2FEIUNhRDFDQURBQ0FEQUNBREFDQURBQ0"
             "FEQUNBREFDQURBQ0FEQUNBREFDQURRQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIU"
@@ -6479,7 +6429,7 @@ static void test_draw_geometry(void)
             "NhRCFDYUQhQ2FEEUOBRAFDgUQBQ4FEAUOBRAFDgUPxQKJgoUPhQBOAEUPmI+Yj5iPSIgIjwcLBw8"
             "FzYXPBJAEjsPSA86C1ALOgdYBzoDYAPdKgAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 1024,
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 1024,
             "uxUBnwECngEDnQEEnAEFmwEGmwEGmgEHmQEImAEJlwEKlgELlQEMlQEMlAENkwEOkgEPkQEQkAER"
             "VQQ2Ek0KOBJFEDkTPRY6FDUcOxUrJDwYHi09Yj5iP2BAQwkUQDgUFEAUOBRAFDcUQRQ3FEEUNxRC"
             "FDYUQhQ2FEIUNhRCFDUUQxQ1FEMUNRRDFDUUQxQ1FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQU"
@@ -6490,7 +6440,7 @@ static void test_draw_geometry(void)
             "NgRVEZABEJEBD5IBDpMBDZQBDJUBDJUBC5YBCpcBCZgBCJkBB5oBBpsBBpsBBZwBBJ0BA54BAp8B"
             "AbsV");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 1024,
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 1024,
             "pBYBngECnQEDnAEEmwEFmgEGmQEGmQEHmAEIlwEJlgEKlQELlAEMkwEMkwENkgEOkQEPkAEQNgRV"
             "ETcKTRI4EEUSOhY9EzscNRQ8JCsVPS0eGD5iPmI/YEAUCUNAFBQ4QBQ4FEEUNxRBFDcUQRQ3FEEU"
             "NhRCFDYUQhQ2FEMUNRRDFDUUQxQ1FEMUNRRDFDUUQxQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0"
@@ -6501,7 +6451,7 @@ static void test_draw_geometry(void)
             "EVUENhCQAQ+RAQ6SAQ2TAQyTAQyUAQuVAQqWAQmXAQiYAQeZAQaZAQaaAQWbAQScAQOdAQKeAQGk"
             "FgAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 64,
             "wCsDmQEHlQELkQEPSwJAEkgLNhc8HCwcPCIgIj1iPmI+Yj4UATgBFD4UCiYKFD8UOBRAFDgUQBQ4"
             "FEAUOBRAFDgUQRQ2FEIUNhRCFDYUQhQ2FEIUNhRCFDYUQxQ0FEQUNBREFDQURBQ0FEQUNBREFDQU"
             "RBQ0FEQUNBREFDQURBQ0FEUUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRG"
@@ -6511,7 +6461,7 @@ static void test_draw_geometry(void)
             "QBI7D0gPOgtQCzoHWAc6A2AD3SoA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 64,
             "3SkmcThiRFdOTVhEICAgPhwsHDwXNhc8FDwUOxQ+FDoUPhQ6FD4UOhQ+FDoUPhQ5FEAUOBRAFDgU"
             "QBQ4FEAUOBRAFDcUQhQ2FEIUNhRCFDYUQhQ2FEIUNhRCFDUURBQ0FEQUNBREFDQURBQ0FEQUNBRE"
             "FDQURBQ0FEQUNBREFDQURBQzFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYU"
@@ -6520,7 +6470,7 @@ static void test_draw_geometry(void)
             "QhQ2FEIUNxRAFDgUQBQ4FEAUOBRAFDgUQBQ5FD4UOhQ+FDoUPhQ6FD4UOhQ+FDsUPBQ8FzYXPBws"
             "HD4gICBEWE1OV0RiOHEm3SkA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 1024,
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 1024,
             "zykoczhkRVhQTlpEFx4tPRUrJDwUNRw7FDwVOxQ+FDoUPhQ5FEAUOBRAFDgUQBQ4FEAUOBRBFDcU"
             "QRQ3FEEUNhRCFDYUQhQ2FEIUNhRDFDUUQxQ1FEMUNRRDFDUUQxQ0FEQUNBREFDQURBQ0FEQUNBRE"
             "FDQURBQ0FEQUNBREFDQURBQ0FEQUMxRFFDMURRQzFEUUMxRFFDMURRQzFEUUMxRFFDMURRQzFEUU"
@@ -6529,7 +6479,7 @@ static void test_draw_geometry(void)
             "QhQ2FEIUNhRCFDYUQRQ3FEEUNxRBFDgUQBQ4FEAUOBRAFDgUQBQ5FD4UOhQ+FDsVPBQ7HDUUPCQr"
             "FT0tHhdEWk5QWEVkOHMozykA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 1024,
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 1024,
             "6SkobThfRVNQSFpALR4XPSQrFTscNRQ7FTwUOhQ+FDoUPhQ5FEAUOBRAFDgUQBQ4FEAUNxRBFDcU"
             "QRQ3FEEUNxRCFDYUQhQ2FEIUNRRDFDUUQxQ1FEMUNRRDFDUUQxQ1FEQUNBREFDQURBQ0FEQUNBRE"
             "FDQURBQ0FEQUNBREFDQURBQ0FEQUNBRFFDMURRQzFEUUMxRFFDMURRQzFEUUMxRFFDMURRQzFEUU"
@@ -6538,7 +6488,7 @@ static void test_draw_geometry(void)
             "QhQ2FEIUNhRCFDcUQRQ3FEEUNxRBFDcUQBQ4FEAUOBRAFDgUQBQ5FD4UOhQ+FDoUPBU7FDUcOxUr"
             "JD0XHi1AWkhQU0VfOG0o6SkA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 64,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 64,
             "3SkmcThiRFdOTVhGHiAgRhQsHDwXNhc8FDwUOxQ+FDoUPhQ6FD4UOhQ+FDoUPhQ5FEAUOBRAFDgU"
             "QBQ4FEAUOBRAFDcUQhQ2FEIUNhRCFDYUQhQ2FEIUNhRCFDUURBQ0FEQUNBREFDQURBQ0FEQUNBRE"
             "FDQURBQ0FEQUNBREFDQURBQzFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYU"
@@ -6617,7 +6567,7 @@ static void test_draw_geometry(void)
     ID2D1TransformedGeometry_Release(transformed_geometry[1]);
     ID2D1TransformedGeometry_Release(transformed_geometry[0]);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 128,
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 128,
             "yjIJkQEHBwaIAQUSBYMBBBYEggEEFgSCAQQWBIIBBBYEggEEFgSCAQQWBIIBBBYEggEEFgSCAQQW"
             "BIIBBBYEggEEFgSDAQQVBIMBBBUEgwEEFQSDAQQVBIMBBBUEgwEEFQSDAQQVBIMBBBUEgwEEFQSD"
             "AQQVBIQBBBQEhAEEFASEAQQTBIUBBBMEhQEEEwSFAQQTBIUBBBMEhQEEEwSGAQQSBIYBBBIEhgEE"
@@ -6626,13 +6576,13 @@ static void test_draw_geometry(void)
             "AQaaAQaaAQaaAQabAQWbAQWbAQWbAQWaAQeZAQeZAQeZAQiXAQQBBJYBBAMElQEEAwWRAQUGBY0B"
             "BQwFhwEFEgSCAQUXBYABBBoFfgUYBIIBBhEFiAEUpTEA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 512,
+    match = compare_figure(ctx.surface, 160,   0, 320, 160, 0xff652e89, 512,
             "yJIBArkCDa4CGKMCIZoCK5ECM4gCO4ECQ/gBS/EBUesBLAYl5QEsDiPeASwWIdkBLBwh0wEsISHO"
             "ASsgKMsBKR4vyAEnHDPIASUaNMsBIxg1mQEFMCIUN54BCygiDzijAREhIgY9qAEYGWGuAR4RXbMB"
             "JAhbuQGAAcABesYBc84Ba9YBTvQBP4MCOIoCNI4CM5ACMZICL5QCLZYCK5kCKJsCJ54CI6MCHq8C"
             "EraSAQAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 512,
+    match = compare_figure(ctx.surface,   0, 160, 160, 320, 0xff652e89, 512,
             "xWkCmwEFmAEJlQELlAENkgEOkQEPjwESjQETjAEVigELAQqJAQsCCogBCwQKhwEKBQqGAQoGCoYB"
             "CgcKhAEKCAqEAQoIC4IBCgoKggEKCgqBAQoMCoABCgwKfwoNCn8KDgp9Cg8KfQoPCnwKEQp7ChEK"
             "egoSCnoKEwp4ChQKeAoUCncLFQp2ChYKdgoWCnYKFwp2ChYKdgoWCncKFgp2ChYKdgoWCncKFQt2"
@@ -6646,7 +6596,7 @@ static void test_draw_geometry(void)
             "iQEKAgqJAQoCCooBCgIKiQEKAgqKAQoBCosBCgEKigEKAQqLARSMARSLARSMAROMARONARKOARGO"
             "ARGPARCQAQ6RAQ2YAQTEZAAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 1024,
+    match = compare_figure(ctx.surface, 160, 160, 320, 320, 0xff652e89, 1024,
             "ytABA7gCCbICD60CFKkCF6cCGqMCHqACIZ0CJJoCJpgCKZUCFgIUkgIWBBWPAhYHFI4CFQoUjAIV"
             "DBSKAhUNFYgCFQ8UhwIVERSFAhUTFIMCFRQVgQIUFxSAAhQZFP4BFBoV/AEUHBT7ARQeFPkBFB8V"
             "9wEUIRT2ARQjFPQBFSMV8gEVJRTxARUnFPABFCgV7gEUKhTtARQsFOwBFCwV7AEULBTsARUsFOwB"
@@ -6666,7 +6616,6 @@ static void test_draw_geometry(void)
     ID2D1RenderTarget_Release(rt);
     refcount = ID2D1Factory_Release(factory);
     ok(!refcount, "Factory has %u references left.\n", refcount);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -6682,7 +6631,6 @@ static void test_fill_geometry(void)
     D2D1_MATRIX_3X2_F matrix;
     ID2D1GeometrySink *sink;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     D2D1_ELLIPSE ellipse;
     D2D1_COLOR_F color;
@@ -6694,9 +6642,7 @@ static void test_fill_geometry(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
@@ -6731,25 +6677,25 @@ static void test_fill_geometry(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 8,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 8,
             "yjIMjwEWhwEcggEgfiR6KHYscy5xMG40azZpOGc6ZTxjPmI+YUBfQl1EXERbRlpGWUhYSFdKVkpV"
             "TFRMVExTTlJOUk5STlJOUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU5STlJOUk5STlNMVExUTFVK"
             "VkpXSFhIWUZaRltEXERdQl9AYT5iPmM8ZTpnOGk2azRuMHEucyx2KHokfiCCARyHARaPAQzKMgAA");
@@ -6789,37 +6735,37 @@ static void test_fill_geometry(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 0,
             "szI6YURZSlROUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU5USllEYTqzMgAA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 2,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 2,
             "tjI0aDxhQlxGWEpVTFNOUk5RUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFOUk5TTFVKWEZcQmA+ZzS2MgAA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 0,
             "sDJAWkxSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJMWkCwMgAA");
@@ -6859,37 +6805,37 @@ static void test_fill_geometry(void)
     hr = ID2D1RenderTarget_EndDraw(rt, NULL, NULL);
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 10,
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 10,
             "yjIMjwEWhwEcggEgfiR6KHYscy5xMG40azZpOGc6ZTxjPmI+YUBfQl1EXERbRlpGWUhYSFdKVkpV"
             "TFRMVExTTlJOUk5STlJOUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU5STlJOUk5STlNMVExUTFVK"
             "VkpXSFhIWUZaRltEXERdQl9AYT5iPmM8ZTpnOGk2azRuMHEucyx2KHokfiCCARyHARaPAQzKMgAA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 10,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 10,
             "uTIucDJsNmk4ZzplPGM+YUBgQF9CXkJdRFxEW0ZaRllIWEhXSlZKVkpWSlVMVExUTFRMU05STlJO"
             "Uk5STlJOUk9QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFPUU5STlJOUk5STlJOU0xU"
             "TFRMVExVSlZKVkpWSldIWEhZRlpGW0RcRF1CXkJfQGBAYT5jPGU6ZzhpNmwycC65MgAA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 10,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 10,
             "vzIiczhhRldMUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUkxXRmA6cSS+MgAA");
@@ -6978,43 +6924,43 @@ static void test_fill_geometry(void)
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
     ID2D1PathGeometry_Release(geometry);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 0,
             "7zMCngECnQEEnAEEmwEGmgEGmQEImAEIlwEKlgEKlQEMlAEMkwEOkgEOkQEQkAEQjwESjgESjQEU"
             "jAEUiwEWigEWiQEYiAEYhwEahgEahQEchAEcgwEeggEegQEggAEgfyJ+In0kfCR7JnomeSh4KHcq"
             "dip1LHQscy5yLnEwcDBvMm4ybTRsNGs2ajZpOGg4ZzpmOmU8ZDxjPmI+YUBgQF9CXkJdRFxEW0Za"
             "RllIWEhXSlZKVUxUTFNOUk5RUKgy");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 0,
             "qDJQUU5STlNMVExVSlZKV0hYSFlGWkZbRFxEXUJeQl9AYEBhPmI+YzxkPGU6ZjpnOGg4aTZqNms0"
             "bDRtMm4ybzBwMHEuci5zLHQsdSp2KncoeCh5JnomeyR8JH0ifiJ/IIABIIEBHoIBHoMBHIQBHIUB"
             "GoYBGocBGIgBGIkBFooBFosBFIwBFI0BEo4BEo8BEJABEJEBDpIBDpMBDJQBDJUBCpYBCpcBCJgB"
             "CJkBBpoBBpsBBJwBBJ0BAp4BAu8z");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 0,
             "7zMCngECnQEEnAEEmwEGmgEGmQEImAEIlwEKlgEKlQEMlAEMkwEOkgEOkQEQkAEQjwESjgESjQEU"
             "jAEUiwEWigEWiQEYiAEYhwEahgEahQEchAEcgwEeggEegQEggAEgfyJ+In0kfCR7JnomeSh4KHcq"
             "dip1LHQscy5yLnEwcDBvMm4ybTRsNGs2ajZpOGg4ZzpmOmU8ZDxjPmI+YUBgQF9CXkJdRFxEW0Za"
             "RllIWEhXSlZKVUxUTFNOUk5RUKgy");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 0,
             "qDJQUU5STlNMVExVSlZKV0hYSFlGWkZbRFxEXUJeQl9AYEBhPmI+YzxkPGU6ZjpnOGg4aTZqNms0"
             "bDRtMm4ybzBwMHEuci5zLHQsdSp2KncoeCh5JnomeyR8JH0ifiJ/IIABIIEBHoIBHoMBHIQBHIUB"
             "GoYBGocBGIgBGIkBFooBFosBFIwBFI0BEo4BEo8BEJABEJEBDpIBDpMBDJQBDJUBCpYBCpcBCJgB"
@@ -7066,18 +7012,18 @@ static void test_fill_geometry(void)
     ID2D1RectangleGeometry_Release(rect_geometry[1]);
     ID2D1RectangleGeometry_Release(rect_geometry[0]);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 32,
+    match = compare_figure(ctx.surface, 160,   0, 320, 160, 0xff652e89, 32,
             "sIMBA7cCDK8CFKYCHZ4CJJYCLY4CNYUCPv0BRvQBT+wBV+MBYNsBaNIBccoBecEBgQG6AYkBsQGS"
             "AakBmgGgAaMBmAGrAY8BtAGHAbwBfsUBfcYBfcYBfcUBfsUBfcYBfcYBfcYBfcYBfcUBfr0BhgG0"
             "AY8BrAGXAaMBoAGbAagBkgGwAYsBuAGCAcEBeskBcdIBadoBYOMBWOsBT/QBR/wBPoUCNowCLpUC"
             "Jp0CHaYCFa4CDLcCBK+DAQAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 32,
+    match = compare_figure(ctx.surface,   0, 160, 160, 320, 0xff652e89, 32,
             "+D0BngEDnQEDnAEEmwEGmgEGmQEHmAEJlwEJlgELlAEMkwENkwEOkQEPkAEQkAERjgESjQETjQEU"
             "iwEVigEXiQEXiAEYhwEahgEahQEbhAEdggEeggEegQEgfyF/In0jfCR8JXomeSd5KHcpdip2K3Qs"
             "cy5xL3EvcDFuMm4ybTRrNWs1ajdoOGg5ZjplO2U8Yz1iPmFAYEBfQV5DXUNcRVpGWkZZSFdJV0lW"
@@ -7088,7 +7034,7 @@ static void test_fill_geometry(void)
             "KXgneSZ6JXwkfCN9In8hfyCBAR6CAR6CAR2EARuFARuFARqHARiIAReJAReKARWLARSNARONARKO"
             "ARGQARCQAQ+RAQ6TAQ2TAQyUAQuWAQqWAQmYAQeZAQaaAQabAQScAQOdAQOeAQH4PQAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 32,
+    match = compare_figure(ctx.surface, 160, 160, 320, 320, 0xff652e89, 32,
             "sXkBvgIDvAIEugIHuAIJtgILswINsgIPrwISrQITrAIVqQIYpwIapQIbowIeoQIgngIjnAIkmwIm"
             "mAIplgIqlQIskgIvkAIxjQIzjAI1igI3hwI5hgI7hAI9gQJA/wFB/QFE+wFG+QFI9gFK9QFM8wFO"
             "8AFQ7wFS7AFV6gFX6AFY5gFb5AFd4gFf3wFh3gFj2wFm2QFn2AFp1QFs0wFu0QFvzwFyzQF0ygF3"
@@ -7216,70 +7162,70 @@ static void test_fill_geometry(void)
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
     ID2D1PathGeometry_Release(geometry);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 160,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 320,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0,
+    match = compare_figure(ctx.surface, 480,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface,   0, 160, 160, 160, 0xff652e89, 16,
             "qDICTAJQB0IHUQs4C1IRLBFSGxgbUk5STlNMVExUTFRMVExVSlZKVkpWSlZKVkpXSFhIWEhYSFhI"
             "WEhYSFhIWEhYSFlGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZa"
             "RllIWEhYSFhIWEhYSFhIWEhYSFhIV0pWSlZKVkpWSlZKVUxUTFRMVExUTFNOUk5SGxgbUhEsEVIL"
             "OAtRB0IHUAJMAqgy");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface, 160, 160, 160, 160, 0xff652e89, 16,
             "qDIBSwRQAkMKUQQ5EVIIKxtTDRkmVExUTFRMVEtVS1VLVkpWSlZKVklXSVdJV0lXSVhIWEhYSFhI"
             "WEhYSFhIWEhYSFhIWUdZR1lHWUdZR1lHWUdZR1lHWUdZSFhIWUdZR1lHWUdZR1lHWUdZR1lHWUdZ"
             "SFhIWEhYSFhIWEhYSFhIWEhYSFhJV0lXSVdJV0lWSlZKVkpWS1VLVUtUTFRMVExUJhkNUxsrCFIR"
             "OQRRCkMCUARLAagy");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface, 320, 160, 160, 160, 0xff652e89, 16,
             "qDIESwFRCkMCUhE5BFIbKwhTJhkNVExUTFRMVUtVS1VLVUpWSlZKV0lXSVdJV0lXSVdIWEhYSFhI"
             "WEhYSFhIWEhYSFhIWEdZR1lHWUdZR1lHWUdZR1lHWUdYSFhIWEdZR1lHWUdZR1lHWUdZR1lHWUdY"
             "SFhIWEhYSFhIWEhYSFhIWEhYSFdJV0lXSVdJV0lXSlZKVkpVS1VLVUtVTFRMVExUDRkmUwgrG1IE"
             "ORFSAkMKUQFLBKgy");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface, 480, 160, 160, 160, 0xff652e89, 16,
             "qDICTAJQB0IHUQs4C1IRLBFSGxgbUk5STlNMVExUTFRMVExVSlZKVkpWSlZKVkpXSFhIWEhYSFhI"
             "WEhYSFhIWEhYSFlGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZa"
             "RllIWEhYSFhIWEhYSFhIWEhYSFhIV0pWSlZKVkpWSlZKVUxUTFRMVExUTFNOUk5SGxgbUhEsEVIL"
             "OAtRB0IHUAJMAqgy");
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface,   0, 320, 160, 160, 0xff652e89, 16,
             "pCwYfixuOGNCWUxSUFBQT1JOUk5STlJOUk1UTFRMVExUTFRLVkpWSlZKVkpWSlZJWEhYSFhIWEhY"
             "SFhIWEhYSFhIWEdaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpG"
             "WkdYSFhIWEhYSFhIWEhYSFhIWEhYSVZKVkpWSlZKVkpWS1RMVExUTFRMVE1STlJOUk5STlJPUFBQ"
             "UkxZQmM4bix+GKQs");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface, 160, 320, 160, 160, 0xff652e89, 16,
             "liwZgQErcTllQ1xLVFBQUU9STlJNVExUTFRMVExVS1VLVUpWSlZKVkpXSVdJV0lXSVdIWEhYSFhI"
             "WEhYSFhIWEhYSFhIWEdZR1lHWUdZR1lHWUdZR1lHWUdZR1hIWEdZR1lHWUdZR1lHWUdZR1lHWUdZ"
             "R1hIWEhYSFhIWEhYSFhIWEhYSFhIV0lXSVdJV0lXSlZKVkpWSlVLVUtVTFRMVExUTFRNUk5ST1FQ"
             "UFRLXENlOXErgQEZliwA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface, 320, 320, 160, 160, 0xff652e89, 16,
             "sSwZeytrOV9DVktRUE9RTlJOUk1UTFRMVExUS1VLVUtVS1ZKVkpWSVdJV0lXSVdJV0lYSFhIWEhY"
             "SFhIWEhYSFhIWEhYSFlHWUdZR1lHWUdZR1lHWUdZR1lIWEhYSFlHWUdZR1lHWUdZR1lHWUdZR1lI"
             "WEhYSFhIWEhYSFhIWEhYSFhIWElXSVdJV0lXSVdJVkpWSlZLVUtVS1VLVExUTFRMVE1STlJOUU9Q"
             "UUtWQ185ayt7GbEs");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 16,
+    match = compare_figure(ctx.surface, 480, 320, 160, 160, 0xff652e89, 16,
             "pCwYfixuOGNCWUxSUFBQT1JOUk5STlJOUk1UTFRMVExUTFRLVkpWSlZKVkpWSlZJWEhYSFhIWEhY"
             "SFhIWEhYSFhIWEdaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpG"
             "WkdYSFhIWEhYSFhIWEhYSFhIWEhYSVZKVkpWSlZKVkpWS1RMVExUTFRMVE1STlJOUk5STlJPUFBQ"
@@ -7355,19 +7301,19 @@ static void test_fill_geometry(void)
     ID2D1TransformedGeometry_Release(transformed_geometry[1]);
     ID2D1TransformedGeometry_Release(transformed_geometry[0]);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 32,
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 32,
             "6DMNjgEWiAEahgEahgEahgEahgEahgEahgEahgEahgEahgEahgEahwEZhwEZhwEZhwEZhwEZhwEZ"
             "hwEZhwEZhwEZiAEYiAEYiAEYiAEYiAEXiQEXiQEXiQEXigEWigEWigEWigEWigEWigEWigEWiwEU"
             "jAEUjAEUjAEUjQESjgESjwEQkAEQkQEOkgENlAEMlQEKlgEKlwEImAEImQEHmQEGmwEFmwEEnQED"
             "nQECngECngECnwEBnwEBnwEBnwEBnwEBnwECnQEDnQEDnQEEmwEFmgEHmQEHlwELkQERjAEXhgEd"
             "hAEfgwEchgEXjwEMqTEA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 32,
+    match = compare_figure(ctx.surface, 160,   0, 320, 160, 0xff652e89, 32,
             "h58BBrYCDq0CF6QCIJwCKJMCMIwCNoUCPf8BQ/kBSPQBTu4BTe8BTPEBSfUBRvgBQf0BPYECOYUC"
             "NIoCMI4CK+UBAS0W/AEHIwiPAgsaBZcCEAwIngIepAIaqAIWrAITsAIRsgIPtQIMtwILugIHwAIB"
             "ypwB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 32,
+    match = compare_figure(ctx.surface,   0, 160, 160, 320, 0xff652e89, 32,
             "wW4DnAEEmwEFmgEHmAEIlwEKlQELlAEMkwEOkQEPkAEQkAERjgESjgETjAEUjAEUiwEWigEWiQEX"
             "iQEYhwEZhwEZhgEbhQEbhAEchAEdggEeggEeggEfgAEggAEggAEhgAEggAEggQEggAEggAEggQEg"
             "gAEggQEfgQEfggEfgQEfgQEfggEfgQEfggEeggEfggEeggEegwEdgwEeggEegwEdgwEegwEdgwEd"
@@ -7378,7 +7324,7 @@ static void test_fill_geometry(void)
             "AQ6SAQ2TAQ2SAQ2TAQ2TAQyTAQyUAQyUAQuUAQuVAQuUAQuVAQqWAQmWAQqWAQmXAQiXAQiYAQeY"
             "AQeZAQWbAQSDZwAA");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 32,
+    match = compare_figure(ctx.surface, 160, 160, 320, 320, 0xff652e89, 32,
             "g90BBLkCCLYCC7ICDrACEa0CFKoCF6cCGqQCHKMCHqECIJ8CIpwCJJsCJpkCKJcCKZYCK5QCLZIC"
             "L5ACMI8CMo0CNIsCNYoCN4gCOYcCOYYCO4QCPYICPoECQIACQYACQIECQIACQIECQIECQIECP4IC"
             "P4ICP4ECP4ICP4ICPoMCPoMCPoMCPYQCPYMCPYQCPYQCPYQCPIUCPIUCPIUCO4YCO4YCOoYCO4YC"
@@ -7459,20 +7405,19 @@ static void test_fill_geometry(void)
     ID2D1TransformedGeometry_Release(transformed_geometry[1]);
     ID2D1TransformedGeometry_Release(transformed_geometry[0]);
 
-    match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(ctx.surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 0, "gJAD");
+    match = compare_figure(ctx.surface, 160,   0, 320, 160, 0xff652e89, 0, "gJAD");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 0, "gJAD");
+    match = compare_figure(ctx.surface,   0, 160, 160, 320, 0xff652e89, 0, "gJAD");
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 0, "gKAG");
+    match = compare_figure(ctx.surface, 160, 160, 320, 320, 0xff652e89, 0, "gKAG");
     ok(match, "Figure does not match.\n");
 
     ID2D1SolidColorBrush_Release(brush);
     ID2D1RenderTarget_Release(rt);
     refcount = ID2D1Factory_Release(factory);
     ok(!refcount, "Factory has %u references left.\n", refcount);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -7612,7 +7557,6 @@ static void test_layer(void)
     struct d2d1_test_context ctx;
     ID2D1Factory *factory, *layer_factory;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Layer *layer;
     D2D1_SIZE_F size;
     ULONG refcount;
@@ -7621,9 +7565,7 @@ static void test_layer(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
@@ -7651,7 +7593,6 @@ static void test_layer(void)
     ID2D1RenderTarget_Release(rt);
     refcount = ID2D1Factory_Release(factory);
     ok(!refcount, "Factory has %u references left.\n", refcount);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -7663,7 +7604,6 @@ static void test_bezier_intersect(void)
     ID2D1PathGeometry *geometry;
     ID2D1GeometrySink *sink;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Factory *factory;
     D2D1_COLOR_F color;
     ULONG refcount;
@@ -7673,9 +7613,7 @@ static void test_bezier_intersect(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
     ID2D1RenderTarget_GetFactory(rt, &factory);
 
@@ -7720,7 +7658,7 @@ static void test_bezier_intersect(void)
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
     ID2D1PathGeometry_Release(geometry);
 
-    match = compare_figure(surface, 160, 120, 320, 240, 0xff652e89, 2048,
+    match = compare_figure(ctx.surface, 160, 120, 320, 240, 0xff652e89, 2048,
             "aRQjIxRpYiIcHCJiXSwXFyxdWTQTEzRZVTsQEDtVUkIMDEJST0cKCkdPTUsICEtNSlEFBVFKSFUD"
             "A1VIRlkBAVlGRFsBAVtEQlwCAlxCQFwEBFxAPl0FBV0+PF0HB108Ol4ICF46OV0KCl05N14LC143"
             "Nl4MDF42NF8NDV80M14PD14zMV8QEF8xMF8REV8wL18SEl8vLWATE2AtLGAUFGAsK2EUFGErKWIV"
@@ -7770,7 +7708,7 @@ static void test_bezier_intersect(void)
     ok(SUCCEEDED(hr), "Failed to end draw, hr %#x.\n", hr);
     ID2D1PathGeometry_Release(geometry);
 
-    match = compare_figure(surface, 160, 120, 320, 240, 0xff652e89, 2048,
+    match = compare_figure(ctx.surface, 160, 120, 320, 240, 0xff652e89, 2048,
             "pQIZkgIrhAI5/QE/9gFH7wFO6wFS5wFW4gFb3gFf2wFi2AFl1gFn1AFp0gFszwFuzQFxywFyyQF1"
             "xwF2xgF4xAF5xAF6wgF8wAF+vwF+vwF/vQGBAbwBggG7AYMBugGEAbkBhQG4AYYBtwGHAbcBiAG1"
             "AYkBtAGKAbQBigGzAYsBswGMAbEBjQGxAY0BsQGOAa8BjwGvAZABrgGQAa4BkQGtAZEBrQGSAawB"
@@ -7793,7 +7731,6 @@ static void test_bezier_intersect(void)
     ID2D1RenderTarget_Release(rt);
     refcount = ID2D1Factory_Release(factory);
     ok(!refcount, "Factory has %u references left.\n", refcount);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
@@ -8069,7 +8006,7 @@ static void test_bitmap_surface(void)
     D2D1_RENDER_TARGET_PROPERTIES rt_desc;
     D2D1_BITMAP_PROPERTIES1 bitmap_desc;
     ID2D1DeviceContext *device_context;
-    IDXGISurface *surface, *surface2;
+    IDXGISurface *surface2;
     D2D1_PIXEL_FORMAT pixel_format;
     IDXGIDevice *dxgi_device;
     ID2D1Factory1 *factory;
@@ -8096,9 +8033,7 @@ static void test_bitmap_surface(void)
     }
 
     /* DXGI target */
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     hr = ID2D1RenderTarget_QueryInterface(rt, &IID_ID2D1DeviceContext, (void **)&device_context);
@@ -8132,7 +8067,7 @@ static void test_bitmap_surface(void)
         bitmap_desc.pixelFormat = bitmap_format_tests[i].original;
         bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW;
 
-        hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(device_context, surface, &bitmap_desc, &bitmap);
+        hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(device_context, ctx.surface, &bitmap_desc, &bitmap);
     todo_wine_if(bitmap_format_tests[i].hr == WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT)
         ok(hr == bitmap_format_tests[i].hr, "%u: unexpected hr %#x.\n", i, hr);
 
@@ -8150,7 +8085,7 @@ static void test_bitmap_surface(void)
     }
 
     /* A8 surface */
-    hr = IDXGISurface_GetDevice(surface, &IID_IDXGIDevice, (void **)&dxgi_device);
+    hr = IDXGISurface_GetDevice(ctx.surface, &IID_IDXGIDevice, (void **)&dxgi_device);
     ok(SUCCEEDED(hr), "Failed to get the device, hr %#x.\n", hr);
 
     surface2 = create_surface(dxgi_device, DXGI_FORMAT_A8_UNORM);
@@ -8171,7 +8106,7 @@ static void test_bitmap_surface(void)
     IDXGIDevice_Release(dxgi_device);
     IDXGISurface_Release(surface2);
 
-    hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(device_context, surface, NULL, &bitmap);
+    hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(device_context, ctx.surface, NULL, &bitmap);
     ok(SUCCEEDED(hr), "Failed to create a bitmap, hr %#x.\n", hr);
 
     pixel_format = ID2D1Bitmap1_GetPixelFormat(bitmap);
@@ -8229,7 +8164,6 @@ static void test_bitmap_surface(void)
 
     ID2D1Device_Release(device);
     IDXGIDevice_Release(dxgi_device);
-    IDXGISurface_Release(surface);
 
     /* DC target */
     rt_desc.type = D2D1_RENDER_TARGET_TYPE_DEFAULT;
@@ -8346,9 +8280,7 @@ static void test_device_context(void)
     ID2D1DeviceContext_Release(device_context);
 
     /* DXGI target */
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
 
     hr = ID2D1RenderTarget_QueryInterface(rt, &IID_ID2D1DeviceContext, (void **)&device_context);
@@ -8359,13 +8291,13 @@ static void test_device_context(void)
             "Unexpected bitmap options %#x.\n", options);
     hr = ID2D1Bitmap1_GetSurface(bitmap, &surface2);
     ok(SUCCEEDED(hr), "Failed to get bitmap surface, hr %#x.\n", hr);
-    ok(surface2 == surface, "Unexpected surface instance.\n");
+    ok(surface2 == ctx.surface, "Unexpected surface instance.\n");
     IDXGISurface_Release(surface2);
 
     ID2D1DeviceContext_BeginDraw(device_context);
     hr = ID2D1Bitmap1_GetSurface(bitmap, &surface2);
     ok(SUCCEEDED(hr), "Failed to get bitmap surface, hr %#x.\n", hr);
-    ok(surface2 == surface, "Unexpected surface instance.\n");
+    ok(surface2 == ctx.surface, "Unexpected surface instance.\n");
     IDXGISurface_Release(surface2);
     ID2D1DeviceContext_EndDraw(device_context, NULL, NULL);
     ID2D1Bitmap1_Release(bitmap);
@@ -8376,7 +8308,6 @@ static void test_device_context(void)
 
     ID2D1DeviceContext_Release(device_context);
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
 
     /* WIC target */
     CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
@@ -9004,7 +8935,6 @@ static void test_dpi(void)
     ID2D1DeviceContext *device_context;
     IWICImagingFactory *wic_factory;
     ID2D1Factory1 *factory;
-    IDXGISurface *surface;
     ID2D1Bitmap1 *bitmap;
     float dpi_x, dpi_y;
     HRESULT hr;
@@ -9039,8 +8969,6 @@ static void test_dpi(void)
         return;
     }
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
 
     device_context = create_device_context(factory, ctx.device);
     ok(!!device_context, "Failed to create device context.\n");
@@ -9060,7 +8988,7 @@ static void test_dpi(void)
         bitmap_desc.dpiY = create_dpi_tests[i].dpi_y;
         bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW;
         bitmap_desc.colorContext = NULL;
-        hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(device_context, surface, &bitmap_desc, &bitmap);
+        hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(device_context, ctx.surface, &bitmap_desc, &bitmap);
         /* Native accepts negative DPI values for DXGI surface bitmap. */
         ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr);
 
@@ -9208,7 +9136,6 @@ static void test_dpi(void)
     ok(dpi_y == dc_dpi_y, "Got unexpected dpi_y %.8e, expected %.8e.\n", dpi_y, dc_dpi_y);
 
     ID2D1DeviceContext_Release(device_context);
-    IDXGISurface_Release(surface);
     ID2D1Factory1_Release(factory);
     release_test_context(&ctx);
 }
@@ -9220,7 +9147,6 @@ static void test_wic_bitmap_format(void)
     D2D1_PIXEL_FORMAT format;
     IWICBitmap *wic_bitmap;
     ID2D1RenderTarget *rt;
-    IDXGISurface *surface;
     ID2D1Bitmap *bitmap;
     unsigned int i;
     HRESULT hr;
@@ -9240,9 +9166,7 @@ static void test_wic_bitmap_format(void)
     if (!init_test_context(&ctx))
         return;
 
-    hr = IDXGISwapChain_GetBuffer(ctx.swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(hr == S_OK, "Failed to get buffer, hr %#x.\n", hr);
-    rt = create_render_target(surface);
+    rt = create_render_target(ctx.surface);
     ok(!!rt, "Failed to create render target.\n");
     CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
 
@@ -9272,7 +9196,6 @@ static void test_wic_bitmap_format(void)
     IWICImagingFactory_Release(wic_factory);
     CoUninitialize();
     ID2D1RenderTarget_Release(rt);
-    IDXGISurface_Release(surface);
     release_test_context(&ctx);
 }
 
-- 
2.29.2




More information about the wine-devel mailing list