[PATCH 4/4] d2d1/tests: Run tests using ID3D11Device too.

Rémi Bernon rbernon at codeweavers.com
Thu Jan 7 13:43:56 CST 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/d2d1/tests/Makefile.in |   2 +-
 dlls/d2d1/tests/d2d1.c      | 760 +++++++++++++++++++++---------------
 2 files changed, 457 insertions(+), 305 deletions(-)

diff --git a/dlls/d2d1/tests/Makefile.in b/dlls/d2d1/tests/Makefile.in
index 91ede7888aa..5eeb815e07f 100644
--- a/dlls/d2d1/tests/Makefile.in
+++ b/dlls/d2d1/tests/Makefile.in
@@ -1,5 +1,5 @@
 TESTDLL   = d2d1.dll
-IMPORTS   = d2d1 d3d10_1 dwrite dxguid uuid user32 advapi32 ole32 gdi32
+IMPORTS   = d2d1 d3d10_1 d3d11 dwrite dxguid uuid user32 advapi32 ole32 gdi32
 
 C_SRCS = \
 	d2d1.c
diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index 43155bfb79a..8dc52a9e0ac 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -21,6 +21,7 @@
 #include <math.h>
 #include <float.h>
 #include "d2d1_1.h"
+#include "d3d11.h"
 #include "wincrypt.h"
 #include "wine/test.h"
 #include "initguid.h"
@@ -36,13 +37,17 @@ static BOOL use_mt = TRUE;
 static struct test_entry
 {
     void (*test)(void);
+    void (*d3d1x_test)(BOOL d3d11);
+    BOOL d3d11;
 } *mt_tests;
 size_t mt_tests_size, mt_test_count;
 
 struct resource_readback
 {
-    ID3D10Resource *resource;
-    D3D10_MAPPED_TEXTURE2D map_desc;
+    ID3D10Resource *d3d10_resource;
+    ID3D11Resource *d3d11_resource;
+    D3D10_MAPPED_TEXTURE2D d3d10_map_desc;
+    D3D11_MAPPED_SUBRESOURCE d3d11_map_desc;
     unsigned int pitch, width, height;
     void *data;
 };
@@ -104,7 +109,29 @@ static void queue_test(void (*test)(void))
         mt_tests_size = max(16, mt_tests_size * 2);
         mt_tests = heap_realloc(mt_tests, mt_tests_size * sizeof(*mt_tests));
     }
-    mt_tests[mt_test_count++].test = test;
+    mt_tests[mt_test_count].test = test;
+    mt_tests[mt_test_count++].d3d1x_test = NULL;
+}
+
+static void queue_d3d1x_test(void (*test)(BOOL d3d11))
+{
+    if (mt_test_count >= mt_tests_size)
+    {
+        mt_tests_size = max(16, mt_tests_size * 2);
+        mt_tests = heap_realloc(mt_tests, mt_tests_size * sizeof(*mt_tests));
+    }
+    mt_tests[mt_test_count].test = NULL;
+    mt_tests[mt_test_count].d3d1x_test = test;
+    mt_tests[mt_test_count++].d3d11 = FALSE;
+
+    if (mt_test_count >= mt_tests_size)
+    {
+        mt_tests_size = max(16, mt_tests_size * 2);
+        mt_tests = heap_realloc(mt_tests, mt_tests_size * sizeof(*mt_tests));
+    }
+    mt_tests[mt_test_count].test = NULL;
+    mt_tests[mt_test_count].d3d1x_test = test;
+    mt_tests[mt_test_count++].d3d11 = TRUE;
 }
 
 static DWORD WINAPI thread_func(void *ctx)
@@ -115,7 +142,10 @@ static DWORD WINAPI thread_func(void *ctx)
     {
         j = *i;
         if (InterlockedCompareExchange(i, j + 1, j) == j)
-            mt_tests[j].test();
+        {
+            if (mt_tests[j].test) mt_tests[j].test();
+            else if (mt_tests[j].d3d1x_test) mt_tests[j].d3d1x_test(mt_tests[j].d3d11);
+        }
     }
 
     return 0;
@@ -132,7 +162,8 @@ static void run_queued_tests(void)
     {
         for (i = 0; i < mt_test_count; ++i)
         {
-            mt_tests[i].test();
+            if (mt_tests[i].test) mt_tests[i].test();
+            else if (mt_tests[i].d3d1x_test) mt_tests[i].d3d1x_test(mt_tests[i].d3d11);
         }
 
         return;
@@ -300,7 +331,7 @@ static void cubic_to(ID2D1GeometrySink *sink, float x1, float y1, float x2, floa
     ID2D1GeometrySink_AddBezier(sink, &b);
 }
 
-static void get_surface_readback(IDXGISurface *surface, struct resource_readback *rb)
+static void get_d3d10_surface_readback(IDXGISurface *surface, struct resource_readback *rb)
 {
     D3D10_TEXTURE2D_DESC texture_desc;
     DXGI_SURFACE_DESC surface_desc;
@@ -325,27 +356,101 @@ static void get_surface_readback(IDXGISurface *surface, struct resource_readback
     texture_desc.BindFlags = 0;
     texture_desc.CPUAccessFlags = D3D10_CPU_ACCESS_READ;
     texture_desc.MiscFlags = 0;
-    hr = ID3D10Device_CreateTexture2D(device, &texture_desc, NULL, (ID3D10Texture2D **)&rb->resource);
+    hr = ID3D10Device_CreateTexture2D(device, &texture_desc, NULL, (ID3D10Texture2D **)&rb->d3d10_resource);
     ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
 
     rb->width = texture_desc.Width;
     rb->height = texture_desc.Height;
 
-    ID3D10Device_CopyResource(device, rb->resource, src_resource);
+    ID3D10Device_CopyResource(device, rb->d3d10_resource, src_resource);
     ID3D10Resource_Release(src_resource);
     ID3D10Device_Release(device);
 
-    hr = ID3D10Texture2D_Map((ID3D10Texture2D *)rb->resource, 0, D3D10_MAP_READ, 0, &rb->map_desc);
+    hr = ID3D10Texture2D_Map((ID3D10Texture2D *)rb->d3d10_resource, 0, D3D10_MAP_READ, 0, &rb->d3d10_map_desc);
+    ok(SUCCEEDED(hr), "Failed to map texture, hr %#x.\n", hr);
+
+    rb->pitch = rb->d3d10_map_desc.RowPitch;
+    rb->data = rb->d3d10_map_desc.pData;
+}
+
+static void get_d3d11_surface_readback(IDXGISurface *surface, struct resource_readback *rb)
+{
+    D3D11_TEXTURE2D_DESC texture_desc;
+    DXGI_SURFACE_DESC surface_desc;
+    ID3D11Resource *src_resource;
+    ID3D11DeviceContext *context;
+    ID3D11Device *device;
+    HRESULT hr;
+
+    hr = IDXGISurface_GetDevice(surface, &IID_ID3D11Device, (void **)&device);
+    ok(SUCCEEDED(hr), "Failed to get device, hr %#x.\n", hr);
+    hr = IDXGISurface_QueryInterface(surface, &IID_ID3D11Resource, (void **)&src_resource);
+    ok(SUCCEEDED(hr), "Failed to query resource interface, hr %#x.\n", hr);
+
+    hr = IDXGISurface_GetDesc(surface, &surface_desc);
+    ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
+    texture_desc.Width = surface_desc.Width;
+    texture_desc.Height = surface_desc.Height;
+    texture_desc.MipLevels = 1;
+    texture_desc.ArraySize = 1;
+    texture_desc.Format = surface_desc.Format;
+    texture_desc.SampleDesc = surface_desc.SampleDesc;
+    texture_desc.Usage = D3D11_USAGE_STAGING;
+    texture_desc.BindFlags = 0;
+    texture_desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
+    texture_desc.MiscFlags = 0;
+    hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, (ID3D11Texture2D **)&rb->d3d11_resource);
+    ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
+
+    rb->width = texture_desc.Width;
+    rb->height = texture_desc.Height;
+
+    ID3D11Device_GetImmediateContext(device, &context);
+    ID3D11DeviceContext_CopyResource(context, rb->d3d11_resource, src_resource);
+    ID3D11Resource_Release(src_resource);
+    ID3D11Device_Release(device);
+
+    hr = ID3D11DeviceContext_Map(context, (ID3D11Resource *)rb->d3d11_resource, 0, D3D11_MAP_READ, 0, &rb->d3d11_map_desc);
     ok(SUCCEEDED(hr), "Failed to map texture, hr %#x.\n", hr);
+    ID3D11DeviceContext_Release(context);
 
-    rb->pitch = rb->map_desc.RowPitch;
-    rb->data = rb->map_desc.pData;
+    rb->pitch = rb->d3d11_map_desc.RowPitch;
+    rb->data = rb->d3d11_map_desc.pData;
 }
 
-static void release_resource_readback(struct resource_readback *rb)
+static void get_surface_readback(IDXGISurface *surface, struct resource_readback *rb, BOOL d3d11)
 {
-    ID3D10Texture2D_Unmap((ID3D10Texture2D *)rb->resource, 0);
-    ID3D10Resource_Release(rb->resource);
+    if (d3d11) get_d3d11_surface_readback(surface, rb);
+    else get_d3d10_surface_readback(surface, rb);
+}
+
+static void release_d3d10_resource_readback(IDXGISurface *surface, struct resource_readback *rb)
+{
+    ID3D10Texture2D_Unmap((ID3D10Texture2D *)rb->d3d10_resource, 0);
+    ID3D10Resource_Release(rb->d3d10_resource);
+}
+
+static void release_d3d11_resource_readback(IDXGISurface *surface, struct resource_readback *rb)
+{
+    ID3D11DeviceContext *context;
+    ID3D11Device *device;
+    HRESULT hr;
+
+    hr = IDXGISurface_GetDevice(surface, &IID_ID3D11Device, (void **)&device);
+    ok(SUCCEEDED(hr), "Failed to get device, hr %#x.\n", hr);
+
+    ID3D11Device_GetImmediateContext(device, &context);
+    ID3D11Device_Release(device);
+
+    ID3D11DeviceContext_Unmap(context, rb->d3d11_resource, 0);
+    ID3D11Resource_Release(rb->d3d11_resource);
+    ID3D11DeviceContext_Release(context);
+}
+
+static void release_resource_readback(IDXGISurface *surface, struct resource_readback *rb, BOOL d3d11)
+{
+    if (d3d11) release_d3d11_resource_readback(surface, rb);
+    else release_d3d10_resource_readback(surface, rb);
 }
 
 static DWORD get_readback_colour(struct resource_readback *rb, unsigned int x, unsigned int y)
@@ -449,14 +554,14 @@ static BOOL compare_sha1(void *data, unsigned int pitch, unsigned int bpp,
     return !strcmp(ref_sha1, (char *)sha1);
 }
 
-static BOOL compare_surface(IDXGISurface *surface, const char *ref_sha1)
+static BOOL compare_surface(IDXGISurface *surface, const char *ref_sha1, BOOL d3d11)
 {
     struct resource_readback rb;
     BOOL ret;
 
-    get_surface_readback(surface, &rb);
+    get_surface_readback(surface, &rb, d3d11);
     ret = compare_sha1(rb.data, rb.pitch, 4, rb.width, rb.height, ref_sha1);
-    release_resource_readback(&rb);
+    release_resource_readback(surface, &rb, d3d11);
 
     return ret;
 }
@@ -620,13 +725,14 @@ static void read_figure(struct figure *figure, BYTE *data, unsigned int pitch,
 }
 
 static BOOL compare_figure(IDXGISurface *surface, unsigned int x, unsigned int y,
-        unsigned int w, unsigned int h, DWORD prev, unsigned int max_diff, const char *ref)
+        unsigned int w, unsigned int h, DWORD prev, unsigned int max_diff, const char *ref,
+        BOOL d3d11)
 {
     struct figure ref_figure, figure;
     unsigned int i, j, span, diff;
     struct resource_readback rb;
 
-    get_surface_readback(surface, &rb);
+    get_surface_readback(surface, &rb, d3d11);
 
     figure.span_count = 0;
     figure.spans_size = 64;
@@ -676,7 +782,7 @@ static BOOL compare_figure(IDXGISurface *surface, unsigned int x, unsigned int y
 
     HeapFree(GetProcessHeap(), 0, ref_figure.spans);
     HeapFree(GetProcessHeap(), 0, figure.spans);
-    release_resource_readback(&rb);
+    release_resource_readback(surface, &rb, d3d11);
 
     return diff <= max_diff;
 }
@@ -698,19 +804,47 @@ static ID3D10Device1 *create_d3d10_device(void)
     return NULL;
 }
 
-static IDXGIDevice *create_device(void)
+static ID3D11Device *create_d3d11_device(void)
+{
+    ID3D11Device *device;
+    DWORD level = D3D_FEATURE_LEVEL_11_0;
+
+    if (SUCCEEDED(D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL,
+            D3D10_CREATE_DEVICE_BGRA_SUPPORT, &level, 1, D3D11_SDK_VERSION, &device, NULL, NULL)))
+        return device;
+    if (SUCCEEDED(D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_WARP, NULL,
+            D3D10_CREATE_DEVICE_BGRA_SUPPORT, &level, 1, D3D11_SDK_VERSION, &device, NULL, NULL)))
+        return device;
+    if (SUCCEEDED(D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_REFERENCE, NULL,
+            D3D10_CREATE_DEVICE_BGRA_SUPPORT, &level, 1, D3D11_SDK_VERSION, &device, NULL, NULL)))
+        return device;
+
+    return NULL;
+}
+
+static IDXGIDevice *create_device(BOOL d3d11)
 {
     ID3D10Device1 *d3d10_device;
+    ID3D11Device *d3d11_device;
     IDXGIDevice *device;
     HRESULT hr;
 
-    if (!(d3d10_device = create_d3d10_device()))
-        return NULL;
+    if (d3d11)
+    {
+        if (!(d3d11_device = create_d3d11_device()))
+            return NULL;
+        hr = ID3D11Device_QueryInterface(d3d11_device, &IID_IDXGIDevice, (void **)&device);
+        ID3D11Device_Release(d3d11_device);
+    }
+    else
+    {
+        if (!(d3d10_device = create_d3d10_device()))
+            return NULL;
+        hr = ID3D10Device1_QueryInterface(d3d10_device, &IID_IDXGIDevice, (void **)&device);
+        ID3D10Device1_Release(d3d10_device);
+    }
 
-    hr = ID3D10Device1_QueryInterface(d3d10_device, &IID_IDXGIDevice, (void **)&device);
     ok(SUCCEEDED(hr), "Failed to get DXGI device, hr %#x.\n", hr);
-    ID3D10Device1_Release(d3d10_device);
-
     if (FAILED(hr))
         return NULL;
 
@@ -777,7 +911,7 @@ static IDXGISwapChain *create_d3d10_swapchain(ID3D10Device1 *device, HWND window
     return swapchain;
 }
 
-static ID2D1RenderTarget *create_render_target_desc(IDXGISurface *surface, const D2D1_RENDER_TARGET_PROPERTIES *desc)
+static ID2D1RenderTarget *create_render_target_desc(IDXGISurface *surface, const D2D1_RENDER_TARGET_PROPERTIES *desc, BOOL d3d11)
 {
     ID2D1RenderTarget *render_target;
     ID2D1Factory *factory;
@@ -786,13 +920,14 @@ static ID2D1RenderTarget *create_render_target_desc(IDXGISurface *surface, const
     hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory, NULL, (void **)&factory);
     ok(SUCCEEDED(hr), "Failed to create factory, hr %#x.\n", hr);
     hr = ID2D1Factory_CreateDxgiSurfaceRenderTarget(factory, surface, desc, &render_target);
-    ok(SUCCEEDED(hr), "Failed to create render target, hr %#x.\n", hr);
+    todo_wine_if(d3d11) ok(SUCCEEDED(hr), "Failed to create render target, hr %#x.\n", hr);
     ID2D1Factory_Release(factory);
 
+    if (!SUCCEEDED(hr)) return NULL;
     return render_target;
 }
 
-static ID2D1RenderTarget *create_render_target(IDXGISurface *surface)
+static ID2D1RenderTarget *create_render_target(IDXGISurface *surface, BOOL d3d11)
 {
     D2D1_RENDER_TARGET_PROPERTIES desc;
 
@@ -804,7 +939,7 @@ static ID2D1RenderTarget *create_render_target(IDXGISurface *surface)
     desc.usage = D2D1_RENDER_TARGET_USAGE_NONE;
     desc.minLevel = D2D1_FEATURE_LEVEL_DEFAULT;
 
-    return create_render_target_desc(surface, &desc);
+    return create_render_target_desc(surface, &desc, d3d11);
 }
 
 #define check_bitmap_surface(b, s, o) check_bitmap_surface_(__LINE__, b, s, o)
@@ -1113,12 +1248,12 @@ static void geometry_sink_check_(unsigned int line, const struct geometry_sink *
     }
 }
 
-#define init_test(a, b, c, d, e) init_test_(__LINE__, a, b, c, d, e)
-static BOOL init_test_(int line, IDXGIDevice **device, HWND *window, IDXGISwapChain **swapchain, IDXGISurface **surface, ID2D1RenderTarget **rt)
+#define init_test(a, b, c, d, e, f) init_test_(__LINE__, a, b, c, d, e, f)
+static BOOL init_test_(int line, IDXGIDevice **device, HWND *window, IDXGISwapChain **swapchain, IDXGISurface **surface, ID2D1RenderTarget **rt, BOOL d3d11)
 {
     HRESULT hr;
 
-    if (!(*device = create_device()))
+    if (!(*device = create_device(d3d11)))
     {
         skip_(__FILE__, line)("Failed to create device, skipping tests.\n");
         return FALSE;
@@ -1127,13 +1262,23 @@ static BOOL init_test_(int line, IDXGIDevice **device, HWND *window, IDXGISwapCh
     *swapchain = create_swapchain(*device, *window, TRUE);
     hr = IDXGISwapChain_GetBuffer(*swapchain, 0, &IID_IDXGISurface, (void **)surface);
     ok_(__FILE__, line)(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
-    *rt = create_render_target(*surface);
-    ok_(__FILE__, line)(!!*rt, "Failed to create render target.\n");
+    *rt = create_render_target(*surface, d3d11);
 
+    if (!*rt && d3d11)
+    {
+        todo_wine win_skip_(__FILE__, line)("Skipping D3D11 tests.\n");
+        IDXGISurface_Release(*surface);
+        IDXGISwapChain_Release(*swapchain);
+        IDXGIDevice_Release(*device);
+        DestroyWindow(*window);
+        return FALSE;
+    }
+
+    ok_(__FILE__, line)(!!*rt, "Failed to create render target.\n");
     return TRUE;
 }
 
-static void test_clip(void)
+static void test_clip(BOOL d3d11)
 {
     IDXGISwapChain *swapchain;
     D2D1_MATRIX_3X2_F matrix;
@@ -1156,7 +1301,7 @@ static void test_clip(void)
         0.0f, 0.0f,
     }}};
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_GetDpi(rt, &dpi_x, &dpi_y);
@@ -1255,7 +1400,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(surface, "035a44d4198d6e422e9de6185b5b2c2bac5e33c9", d3d11);
     ok(match, "Surface does not match.\n");
 
     /* Fractional clip rectangle coordinates, aliased mode. */
@@ -1321,7 +1466,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, "cb418ec4a7c8407b5e36db06fc6292a06bb8476c");
+    match = compare_surface(surface, "cb418ec4a7c8407b5e36db06fc6292a06bb8476c", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_Release(rt);
@@ -1331,7 +1476,7 @@ static void test_clip(void)
     DestroyWindow(window);
 }
 
-static void test_state_block(void)
+static void test_state_block(BOOL d3d11)
 {
     IDWriteRenderingParams *text_rendering_params1, *text_rendering_params2;
     D2D1_DRAWING_STATE_DESCRIPTION drawing_state;
@@ -1365,7 +1510,7 @@ static void test_state_block(void)
         11.0f, 12.0f,
     }}};
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_GetFactory(rt, &factory);
@@ -1597,7 +1742,7 @@ static void test_state_block(void)
     DestroyWindow(window);
 }
 
-static void test_color_brush(void)
+static void test_color_brush(BOOL d3d11)
 {
     D2D1_MATRIX_3X2_F matrix, tmp_matrix;
     D2D1_BRUSH_PROPERTIES brush_desc;
@@ -1613,7 +1758,7 @@ static void test_color_brush(void)
     HRESULT hr;
     BOOL match;
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -1677,7 +1822,7 @@ 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(surface, "6d1218fca5e21fb7e287b3a439d60dbc251f5ceb", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1SolidColorBrush_Release(brush);
@@ -1688,7 +1833,7 @@ static void test_color_brush(void)
     DestroyWindow(window);
 }
 
-static void test_bitmap_brush(void)
+static void test_bitmap_brush(BOOL d3d11)
 {
     D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode;
     ID2D1TransformedGeometry *transformed_geometry;
@@ -1743,7 +1888,7 @@ static void test_bitmap_brush(void)
         0xffffffff, 0xff000000, 0xff000000, 0xff000000,
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -1831,7 +1976,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(surface, "9437f4447d98feaad41a1c4202ee90aadc718ee6", d3d11);
     ok(match, "Surface does not match.\n");
 
     /* Invalid interpolation mode. */
@@ -1844,7 +1989,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(surface, "9437f4447d98feaad41a1c4202ee90aadc718ee6", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -1873,7 +2018,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(surface, "b4b775afecdae2d26642001f4faff73663bb8b31", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1Bitmap_Release(bitmap);
@@ -1922,7 +2067,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(surface, "cf7b90ba7b139fdfbe9347e1907d635cfb4ed197", d3d11);
     ok(match, "Surface does not match.\n");
 
     if (SUCCEEDED(ID2D1BitmapBrush_QueryInterface(brush, &IID_ID2D1BitmapBrush1, (void **)&brush1)))
@@ -1978,7 +2123,7 @@ static void test_bitmap_brush(void)
     DestroyWindow(window);
 }
 
-static void test_linear_brush(void)
+static void test_linear_brush(BOOL d3d11)
 {
     D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES gradient_properties;
     ID2D1GradientStopCollection *gradient, *tmp_gradient;
@@ -2038,7 +2183,7 @@ static void test_linear_brush(void)
         {520, 390, 0xff90ae40},
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -2080,7 +2225,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(surface, &rb, d3d11);
     for (i = 0; i < ARRAY_SIZE(test1); ++i)
     {
         DWORD colour;
@@ -2090,7 +2235,7 @@ static void test_linear_brush(void)
                 "Got unexpected colour 0x%08x at position {%u, %u}.\n",
                 colour, test1[i].x, test1[i].y);
     }
-    release_resource_readback(&rb);
+    release_resource_readback(surface, &rb, d3d11);
 
     ID2D1RenderTarget_BeginDraw(rt);
 
@@ -2153,7 +2298,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(surface, &rb, d3d11);
     for (i = 0; i < ARRAY_SIZE(test2); ++i)
     {
         DWORD colour;
@@ -2163,7 +2308,7 @@ static void test_linear_brush(void)
                 "Got unexpected colour 0x%08x at position {%u, %u}.\n",
                 colour, test2[i].x, test2[i].y);
     }
-    release_resource_readback(&rb);
+    release_resource_readback(surface, &rb, d3d11);
 
     ID2D1LinearGradientBrush_Release(brush);
     refcount = ID2D1GradientStopCollection_Release(gradient);
@@ -2175,7 +2320,7 @@ static void test_linear_brush(void)
     DestroyWindow(window);
 }
 
-static void test_radial_brush(void)
+static void test_radial_brush(BOOL d3d11)
 {
     D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES gradient_properties;
     ID2D1GradientStopCollection *gradient, *tmp_gradient;
@@ -2235,7 +2380,7 @@ static void test_radial_brush(void)
         {520, 390, 0xff4059e6},
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_SetDpi(rt, 192.0f, 48.0f);
@@ -2283,7 +2428,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(surface, &rb, d3d11);
     for (i = 0; i < ARRAY_SIZE(test1); ++i)
     {
         DWORD colour;
@@ -2293,7 +2438,7 @@ static void test_radial_brush(void)
                 "Got unexpected colour 0x%08x at position {%u, %u}.\n",
                 colour, test1[i].x, test1[i].y);
     }
-    release_resource_readback(&rb);
+    release_resource_readback(surface, &rb, d3d11);
 
     ID2D1RenderTarget_BeginDraw(rt);
 
@@ -2358,7 +2503,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(surface, &rb, d3d11);
     for (i = 0; i < ARRAY_SIZE(test2); ++i)
     {
         DWORD colour;
@@ -2368,7 +2513,7 @@ static void test_radial_brush(void)
                 "Got unexpected colour 0x%08x at position {%u, %u}.\n",
                 colour, test2[i].x, test2[i].y);
     }
-    release_resource_readback(&rb);
+    release_resource_readback(surface, &rb, d3d11);
 
     ID2D1RadialGradientBrush_Release(brush);
     refcount = ID2D1GradientStopCollection_Release(gradient);
@@ -2495,7 +2640,7 @@ static void fill_geometry_sink_bezier(ID2D1GeometrySink *sink, unsigned int holl
     ID2D1GeometrySink_EndFigure(sink, D2D1_FIGURE_END_CLOSED);
 }
 
-static void test_path_geometry(void)
+static void test_path_geometry(BOOL d3d11)
 {
     ID2D1TransformedGeometry *transformed_geometry;
     D2D1_MATRIX_3X2_F matrix, tmp_matrix;
@@ -2832,7 +2977,7 @@ static void test_path_geometry(void)
         {D2D1_FIGURE_BEGIN_HOLLOW, D2D1_FIGURE_END_OPEN,   { 40.0f,  20.0f},  2, &expected_segments[172]},
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_GetFactory(rt, &factory);
@@ -3219,7 +3364,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(surface, "3aace1b22aae111cb577614fed16e4eb1650dba5", d3d11);
     ok(match, "Surface does not match.\n");
 
     /* Edge test. */
@@ -3300,7 +3445,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(surface, "bfb40a1f007694fa07dbd3b854f3f5d9c3e1d76b", d3d11);
     ok(match, "Surface does not match.\n");
     ID2D1TransformedGeometry_Release(transformed_geometry);
     ID2D1PathGeometry_Release(geometry);
@@ -3368,7 +3513,7 @@ static void test_path_geometry(void)
             "PwZQBkgCUAJOAU4BUARIBFAGRAZQCEAIUQk8CVILOAtSDTQNUg4yDlIQLhBTECwQVBEqEVQSKBJU"
             "EyYTVBQjFFYUIhRWFSAVVxUeFVgWHBZZFhoWWhcYF1sWGBZcFxYWXhcUF18WFBZhFhIWYxUSFWUV"
             "EBVnFBAUaRQOFGsTDhJvEgwSchAMEHYPCg96DQoMggEICgiLAQQIBJQBCJgBCJkBBpoBBpoBBpoB"
-            "BpsBBJwBBJwBBJwBBJwBBJ0BAp4BAp4BAp4BAp4BAp4BAp4BAp4BAgAA");
+            "BpsBBJwBBJwBBJwBBJwBBJ0BAp4BAp4BAp4BAp4BAp4BAp4BAp4BAgAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 0, 226, 160, 160, 0xff652e89, 64,
             "7xoCngECngECngECngECngECngECngECnQEEnAEEnAEEnAEEnAEEmwEGmgEGmgEGmgEGmQEImAEI"
@@ -3378,7 +3523,7 @@ static void test_path_geometry(void)
             "PwZQBkgCUAJOAU4BUARIBFAGRAZQCEAIUQk8CVILOAtSDTQNUg4yDlIQLhBTECwQVBEqEVQSKBJU"
             "EyYTVBQjFFYUIhRWFSAVVxUeFVgWHBZZFhoWWhcYF1sWGBZcFxYWXhcUF18WFBZhFhIWYxUSFWUV"
             "EBVnFBAUaRQOFGsTDhJvEgwSchAMEHYPCg96DQoMggEICgiLAQQIBJQBCJgBCJkBBpoBBpoBBpoB"
-            "BpsBBJwBBJwBBJwBBJwBBJ0BAp4BAp4BAp4BAp4BAp4BAp4BAp4BAgAA");
+            "BpsBBJwBBJwBBJwBBJwBBJ0BAp4BAp4BAp4BAp4BAp4BAp4BAp4BAgAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 0, 320, 160, 0xff652e89, 64,
             "gVQBwAIBWgHlAQFYAecBAVYB6QEBVAHrAQEjDCMB7AECHhQeAu0BAxoYGgPvAQMWHhYD8QEDFCAU"
@@ -3390,7 +3535,7 @@ static void test_path_geometry(void)
             "C/QBCzcK9QEJOAn3AQg4CfcBBzoH+QEGOgb7AQU6BfwBBDwE/QEDPAP/AQE+AZkCDpkCAhIYEgKA"
             "AgMNIA0D/wEFCSYJBf4BBgYqBgf8AQgDLgMI+wFG+gEIAzADCPkBBwYuBgf3AQYKKgoG9gEFDCgM"
             "BfUBBBAlDwTzAQQSIhIE8QEDFh4WA/ABAhkaGQLvAQIcFhwC7QECIBAgAusBASgEKAHpAQFWAecB"
-            "AVgB5QEBWgHAAgHhUgAA");
+            "AVgB5QEBWgHAAgHhUgAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 320, 160, 0xff652e89, 64,
             "/VUB5QEBWAHnAQFWAekBAVQB6wECIQ8hAe0BAh0VHQLuAQIZGhkD7wEDFh4WA/EBBBMhEwPzAQQQ"
@@ -3402,7 +3547,7 @@ static void test_path_geometry(void)
             "CvUBCTgJ9wEIOAn4AQc5B/kBBjoG+wEFOwT9AQM8BP4BAj0C/wEBPgGYAhAXAYACAhEaEQKAAgMN"
             "IA0E/gEFCSYJBf4BBgYrBQf8AQgDLwII+wE8AQn6AQgELwQI+AEHBy0HBvcBBgoqCgb2AQUNJw0F"
             "9AEEECQQBfIBBBMhEwPxAQMWHhYD8AECGRoZA+4BAh0VHQLsAQIhDiIB6wEBVAHpAQFWAecBAVgB"
-            "wAIBwlYA");
+            "wAIBwlYA", d3d11);
     ok(match, "Figure does not match.\n");
     ID2D1TransformedGeometry_Release(transformed_geometry);
     ID2D1PathGeometry_Release(geometry);
@@ -3461,14 +3606,14 @@ static void test_path_geometry(void)
             "lAEQiwEagQEjeyh2LHIwbjNsNmk4ZzplPGM+YUBfQl1DXURbRlpGWUhYSFdKVkpVS1VMVExUTFRM"
             "U05STlJOUk5STlFQUFBQUFBQTlRIXD9mMnYqdjJmP1xIVE5QUFBQUFBQUU5STlJOUk5STlNMVExU"
             "TFRMVEtWSlZKV0hYSFlGWkZbRFxDXkJfQGE+YzxlOmc4aTZrM28wcix2KHojggEaiwEQlAEImAEI"
-            "mQEGmgEGmgEGmgEGmwEEnAEEnAEEnAEEnAEEnQECngECngECngECngECngECngECngEC");
+            "mQEGmgEGmgEGmgEGmwEEnAEEnAEEnAEEnAEEnQECngECngECngECngECngECngECngEC", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 0, 226, 160, 160, 0xff652e89, 64,
             "7xoCngECngECngECngECngECngECngECnQEEnAEEnAEEnAEEnAEEmwEGmgEGmgEGmgEGmQEImAEI"
             "lAEQiwEagQEjeyh2LHIwbjNsNmk4ZzplPGM+YUBfQl1DXURbRlpGWUhYSFdKVkpVS1VMVExUTFRM"
             "U05STlJOUk5STlFQUFBQUFBQTlRIXD9mMnYqdjJmP1xIVE5QUFBQUFBQUU5STlJOUk5STlNMVExU"
             "TFRMVEtWSlZKV0hYSFlGWkZbRFxDXkJfQGE+YzxlOmc4aTZrM28wcix2KHojggEaiwEQlAEImAEI"
-            "mQEGmgEGmgEGmgEGmwEEnAEEnAEEnAEEnAEEnQECngECngECngECngECngECngECngEC");
+            "mQEGmgEGmgEGmgEGmwEEnAEEnAEEnAEEnAEEnQECngECngECngECngECngECngECngEC", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 0, 320, 160, 0xff652e89, 64,
             "4VIBwAIBWgHlAQFYAecBAVYB6QEBVAHrAQIhDiIB7QECHRUdAu4BAhkaGQPvAQMWHhYD8QEEEyET"
@@ -3477,7 +3622,7 @@ static void test_path_geometry(void)
             "U+0BU+wBVOwBVOwBVOwBVOwBVesBVesBVesBVesBVOwBVOwBVOwBVO0BU+0BU+0BUu4BUu8BUe8B"
             "UPEBT/EBTvIBTvMBTPUBS/UBSvcBSfcBSPkBRvsBRP0BQ/4BQf8BQIECP4ACQIACQf4BQv4BQ/wB"
             "RPsBCQEyAQn6AQgELwQI+AEHBy0GB/cBBgoqCgb2AQUMKA0F9AEEECUPBPMBBBIiEwPxAQMWHhYD"
-            "8AECGRoZA+4BAh0VHQLsAQIhDiIB6wEBVAHpAQFWAecBAVgB5QEBWgHAAgEA");
+            "8AECGRoZA+4BAh0VHQLsAQIhDiIB6wEBVAHpAQFWAecBAVgB5QEBWgHAAgEA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 320, 160, 0xff652e89, 64,
             "gVQBXAHjAQFaAeUBAVgB5wEBVgHpAQEpAikB6wECIBAgAu0BAhwWHALvAQIZGhkC8AEDFh4WA/EB"
@@ -3486,7 +3631,7 @@ static void test_path_geometry(void)
             "Uu0BVOwBVOwBVOwBVOwBVOwBVOwBVOwBVOwBVOwBVOwBVOwBVOwBVOwBVO0BUu4BUu4BUu8BUPAB"
             "UPABUPEBTvIBTvMBTPQBS/YBSvcBSPgBSPkBRvsBRP0BQv8BQIACQIECPoECQP8BQv4BQv0BRPwB"
             "RPsBCQEyAQn5AQgFLgUI+AEGCCwIBvcBBgoqCgb1AQUNJw4F9AEEECQQBPMBAxQgFAPxAQMWHhYD"
-            "7wEDGhgaA+0BAh4UHgLsAQEjDCMB6wEBVAHpAQFWAecBAVgB5QEBWgGiVQAA");
+            "7wEDGhgaA+0BAh4UHgLsAQEjDCMB6wEBVAHpAQFWAecBAVgB5QEBWgGiVQAA", d3d11);
     ok(match, "Figure does not match.\n");
     ID2D1TransformedGeometry_Release(transformed_geometry);
     ID2D1PathGeometry_Release(geometry);
@@ -3523,7 +3668,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(surface, "a875e68e0cb9c055927b1b50b879f90b24e38470", d3d11);
     ok(match, "Surface does not match.\n");
     ID2D1PathGeometry_Release(geometry);
 
@@ -3889,7 +4034,7 @@ static void test_rounded_rectangle_geometry(void)
     ID2D1Factory_Release(factory);
 }
 
-static void test_bitmap_formats(void)
+static void test_bitmap_formats(BOOL d3d11)
 {
     D2D1_BITMAP_PROPERTIES bitmap_desc;
     IDXGISwapChain *swapchain;
@@ -3925,7 +4070,7 @@ static void test_bitmap_formats(void)
         {DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,   0x8a},
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     bitmap_desc.dpiX = 96.0f;
@@ -3958,7 +4103,7 @@ static void test_bitmap_formats(void)
     DestroyWindow(window);
 }
 
-static void test_alpha_mode(void)
+static void test_alpha_mode(BOOL d3d11)
 {
     D2D1_RENDER_TARGET_PROPERTIES rt_desc;
     D2D1_BITMAP_PROPERTIES bitmap_desc;
@@ -3985,7 +4130,7 @@ static void test_alpha_mode(void)
         0x7f7f7f7f, 0x7f000000, 0x7f000000, 0x7f000000,
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -4012,7 +4157,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(surface, "48c41aff3a130a17ee210866b2ab7d36763934d5", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4020,7 +4165,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(surface, "6487e683730fb5a77c1911388d00b04664c5c4e4", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4028,7 +4173,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(surface, "7a35ba09e43cbaf591388ff1ef8de56157630c98", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4069,7 +4214,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(surface, "14f8ac64b70966c7c3c6281c59aaecdb17c3b16a", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_Release(rt);
@@ -4080,7 +4225,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(surface, &rt_desc, d3d11);
     ok(!!rt, "Failed to create render target.\n");
 
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -4107,7 +4252,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(surface, "b44510bf2d2e61a8d7c0ad862de49a471f1fd13f", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4115,7 +4260,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(surface, "2184f4a9198fc1de09ac85301b7a03eebadd9b81", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4123,7 +4268,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(surface, "6527ec83b4039c895b50f9b3e144fe0cf90d1889", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -4164,7 +4309,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(surface, "465f5a3190d7bde408b3206b4be939fb22f8a3d6", d3d11);
     ok(match, "Surface does not match.\n");
 
     refcount = ID2D1Bitmap_Release(bitmap);
@@ -4178,7 +4323,7 @@ static void test_alpha_mode(void)
     DestroyWindow(window);
 }
 
-static void test_shared_bitmap(void)
+static void test_shared_bitmap(BOOL d3d11)
 {
     IDXGISwapChain *swapchain1, *swapchain2;
     IWICBitmap *wic_bitmap1, *wic_bitmap2;
@@ -4198,7 +4343,7 @@ static void test_shared_bitmap(void)
     HWND window1, window2;
     HRESULT hr;
 
-    if (!init_test(&device1, &window1, &swapchain1, &surface1, &rt))
+    if (!init_test(&device1, &window1, &swapchain1, &surface1, &rt, d3d11))
         return;
     ID2D1RenderTarget_Release(rt);
 
@@ -4264,7 +4409,7 @@ static void test_shared_bitmap(void)
     /* DXGI surface render targets with different devices but the same factory. */
     IDXGISurface_Release(surface2);
     IDXGISwapChain_Release(swapchain2);
-    device2 = create_device();
+    device2 = create_device(d3d11);
     ok(!!device2, "Failed to create device.\n");
     swapchain2 = create_swapchain(device2, window2, TRUE);
     hr = IDXGISwapChain_GetBuffer(swapchain2, 0, &IID_IDXGISurface, (void **)&surface2);
@@ -4428,7 +4573,7 @@ static void test_shared_bitmap(void)
     CoUninitialize();
 }
 
-static void test_bitmap_updates(void)
+static void test_bitmap_updates(BOOL d3d11)
 {
     D2D1_BITMAP_PROPERTIES bitmap_desc;
     IDXGISwapChain *swapchain;
@@ -4452,7 +4597,7 @@ static void test_bitmap_updates(void)
         0xffffffff, 0xff000000, 0xff000000, 0xff000000,
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_SetAntialiasMode(rt, D2D1_ANTIALIAS_MODE_ALIASED);
@@ -4511,7 +4656,7 @@ 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(surface, "cb8136c91fbbdc76bb83b8c09edc1907b0a5d0a6", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1Bitmap_Release(bitmap);
@@ -4522,7 +4667,7 @@ static void test_bitmap_updates(void)
     DestroyWindow(window);
 }
 
-static void test_opacity_brush(void)
+static void test_opacity_brush(BOOL d3d11)
 {
     ID2D1BitmapBrush *bitmap_brush, *opacity_brush;
     D2D1_BITMAP_PROPERTIES bitmap_desc;
@@ -4551,7 +4696,7 @@ static void test_opacity_brush(void)
         0xffffffff, 0x40000000, 0x40000000, 0xff000000,
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_GetFactory(rt, &factory);
@@ -4638,7 +4783,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(surface, "7141c6c7b3decb91196428efb1856bcbf9872935", d3d11);
     ok(match, "Surface does not match.\n");
     ID2D1RenderTarget_BeginDraw(rt);
 
@@ -4680,7 +4825,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(surface, "c3a5802d1750efa3e9122c1a92f6064df3872732", d3d11);
     ok(match, "Surface does not match.\n");
 
     ID2D1BitmapBrush_Release(bitmap_brush);
@@ -4695,7 +4840,7 @@ static void test_opacity_brush(void)
     DestroyWindow(window);
 }
 
-static void test_create_target(void)
+static void test_create_target(BOOL d3d11)
 {
     IDXGISwapChain *swapchain;
     ID2D1Factory *factory;
@@ -4721,7 +4866,7 @@ static void test_create_target(void)
     };
     unsigned int i;
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
     ID2D1RenderTarget_Release(rt);
 
@@ -4780,7 +4925,7 @@ static void test_create_target(void)
     DestroyWindow(window);
 }
 
-static void test_draw_text_layout(void)
+static void test_draw_text_layout(BOOL d3d11)
 {
     static const struct
     {
@@ -4832,7 +4977,7 @@ static void test_draw_text_layout(void)
     D2D1_RECT_F rect;
     unsigned int i;
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
     ID2D1RenderTarget_Release(rt);
 
@@ -4964,7 +5109,7 @@ static void create_target_dibsection(HDC hdc, UINT32 width, UINT32 height)
     DeleteObject(SelectObject(hdc, hbm));
 }
 
-static void test_dc_target(void)
+static void test_dc_target(BOOL d3d11)
 {
     static const D2D1_PIXEL_FORMAT invalid_formats[] =
     {
@@ -4994,7 +5139,7 @@ static void test_dc_target(void)
     HRESULT hr;
     RECT rect;
 
-    if (!(device = create_device()))
+    if (!(device = create_device(d3d11)))
     {
         skip("Failed to create device, skipping tests.\n");
         return;
@@ -5195,7 +5340,7 @@ todo_wine
     ID2D1Factory_Release(factory);
 }
 
-static void test_hwnd_target(void)
+static void test_hwnd_target(BOOL d3d11)
 {
     D2D1_HWND_RENDER_TARGET_PROPERTIES hwnd_rt_desc;
     ID2D1GdiInteropRenderTarget *interop;
@@ -5207,7 +5352,7 @@ static void test_hwnd_target(void)
     D2D1_SIZE_U size;
     HRESULT hr;
 
-    if (!(device = create_device()))
+    if (!(device = create_device(d3d11)))
     {
         skip("Failed to create device, skipping tests.\n");
         return;
@@ -5358,7 +5503,7 @@ static void test_compatible_target_size_(unsigned int line, ID2D1RenderTarget *r
     ID2D1BitmapRenderTarget_Release(bitmap_rt);
 }
 
-static void test_bitmap_target(void)
+static void test_bitmap_target(BOOL d3d11)
 {
     D2D1_HWND_RENDER_TARGET_PROPERTIES hwnd_rt_desc;
     ID2D1GdiInteropRenderTarget *interop;
@@ -5377,7 +5522,7 @@ static void test_bitmap_target(void)
     ULONG refcount;
     HRESULT hr;
 
-    if (!(device = create_device()))
+    if (!(device = create_device(d3d11)))
     {
         skip("Failed to create device, skipping tests.\n");
         return;
@@ -5707,7 +5852,7 @@ static void test_stroke_style(void)
     ID2D1Factory_Release(factory);
 }
 
-static void test_gradient(void)
+static void test_gradient(BOOL d3d11)
 {
     ID2D1GradientStopCollection *gradient;
     D2D1_GRADIENT_STOP stops[3], stops2[3];
@@ -5721,7 +5866,7 @@ static void test_gradient(void)
     HWND window;
     HRESULT hr;
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     stops2[0].position = 0.5f;
@@ -5756,7 +5901,7 @@ static void test_gradient(void)
     DestroyWindow(window);
 }
 
-static void test_draw_geometry(void)
+static void test_draw_geometry(BOOL d3d11)
 {
     ID2D1TransformedGeometry *transformed_geometry[4];
     ID2D1RectangleGeometry *rect_geometry[2];
@@ -5780,7 +5925,7 @@ static void test_draw_geometry(void)
     HRESULT hr;
     BOOL match;
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_GetFactory(rt, &factory);
@@ -5828,35 +5973,35 @@ 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(surface,   0,   0, 160, 160, 0xff652e89, 0, "", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQUFBQUFBQUFDoYQAA");
+    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQUFBQUFBQUFDoYQAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
             "xjIUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUxjIA");
+            "jAEUjAEUjAEUjAEUxjIA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 2,
             "zjECnQETjAEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEV"
             "igEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEV"
             "igEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEV"
             "igEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEVigEV"
-            "igEVigEVigEVigEVjAETnQECzjEA");
+            "igEVigEVigEVigEVjAETnQECzjEA", d3d11);
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "5mAUjAEUjAEUjAEUjAEUhmIA");
+    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "5mAUjAEUjAEUjAEUjAEUhmIA", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "vmBkPGQ8ZDxkPGTeYQAA");
+    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "vmBkPGQ8ZDxkPGTeYQAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0,
             "5i4UjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUhjAA");
+            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUhjAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0,
             "vi5kPGQ8ZDxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -5864,19 +6009,19 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
+            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A", d3d11);
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
+            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 10,
             "hDAYgwEieyh1LnAybBcIF2gWDhZkFhIWYRUWFV4VGhVbFRwVWRUeFVcVIBVVFCQUUxQmFFEUKBRP"
@@ -5884,7 +6029,7 @@ static void test_draw_geometry(void)
             "OBQ/FDoUPhQ6FD4UOhQ+FDoUPhQ6FD0UPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FD0UOhQ+FDoUPhQ6FD4UOhQ+FDoUPxQ4FEAUOBRAFDgUQRQ2FEIUNhRDFDQU"
             "RBQ0FEUUMhRGFDIURxQwFEgUMBRJFC4USxQsFEwVKhVNFSgVTxQoFFEUJhRTFCQUVRUgFVcVHhVZ"
-            "FRwVWxUaFV4VFhVhFhIWZBYOFmgXCBdsMnAudSh7IoMBGIQw");
+            "FRwVWxUaFV4VFhVhFhIWZBYOFmgXCBdsMnAudSh7IoMBGIQw", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -5921,16 +6066,16 @@ 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(surface,   0,   0, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
+            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0,
             "3C4oaUZVUExYRlxCHCgcPxU4FT0UPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -5938,19 +6083,19 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FD0VOBU/YEJcRlhMUFVG7S8A");
+            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FD0VOBU/YEJcRlhMUFVG7S8A", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
+            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 8,
             "3C4obT5dSFRQTlRKGCgYRhYwFkMVNBVBFTYVPxU5FD4UOhQ9FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -5958,19 +6103,19 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPRQ6FD4UOhQ/FTYVQRU0FUMWMBZGWEpVTVBTSltA8C8A");
+            "PBQ8FDwUPRQ6FD4UOhQ/FTYVQRU0FUMWMBZGWEpVTVBTSltA8C8A", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
+            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 0,
             "3C4oZU5NWERgP2I9HigePBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -5978,7 +6123,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZD1iP2BEWE1O6S8A");
+            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZD1iP2BEWE1O6S8A", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -6015,16 +6160,16 @@ 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(surface,   0,   0, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
+            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 16,
             "hDAYgwEieyh1LnAybBcIF2gWDhZkFhIWYRUWFV4WGRVbFRwVWRUeFVcVIBVVFSMUUxQmFFEVJxRP"
@@ -6032,19 +6177,19 @@ static void test_draw_geometry(void)
             "OBQ/FTkUPhQ6FD4UOhQ+FDoUPhQ6FD0UPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FD0UOhQ+FDoUPhQ6FD4UOhQ+FDoUPxQ4FEAUOBRAFDgUQRQ2FEIUNhRDFDQU"
             "RBQ0FEUUMhRGFDIURxQwFEgUMBRJFC4USxQsFEwVKhVNFSgVTxQoFFEUJhRTFCQUVRUgFVcVHhVZ"
-            "FRwVWxUaFV4VFhVhFhIWZBYOFmgWChZsMnAudCp6IoMBGIQw");
+            "FRwVWxUaFV4VFhVhFhIWZBYOFmgWChZsMnAudCp6IoMBGIQw", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
+            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 16,
             "3C4obzpjQF5EWkhXFSAVVRQkFFMUJhRRFCgUTxQqFE0VKhVMFCwUSxQuFEoULhVIFDAUSBQwFUYU"
@@ -6052,19 +6197,19 @@ static void test_draw_geometry(void)
             "FD4UOhQ+FDoUPhQ6FD0VOxQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBU7FD0UOhQ+FDoUPhQ6FD4UOhQ+FDoUPhQ6FD8UOBRA"
             "FDgUQBQ4FEAUOBRBFDYUQhQ2FEIUNhRCFTQVQxQ0FEQUNBRFFDIURhQyFEYVMBVHFDAUSBUuFUkU"
-            "LhRLFCwUTBUrFE0UKhRPFCgUURQmFFMUJBRVSldIWUZdQWI78i8A");
+            "LhRLFCwUTBUrFE0UKhRPFCgUURQmFFMUJBRVSldIWUZdQWI78i8A", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA");
+    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "iGIQjgEUjAEUjgEQiGIA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA");
+    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "yGBQSGA+ZDxkPmDgYQAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
             "iDAQjgEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
             "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEUjAEU"
-            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA");
+            "jAEUjAEUjAEUjAEUjAEUjAEUjAEUjgEQiDAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 8,
             "9i80ZERWUExYRV5AHCocPRY4FjwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6072,7 +6217,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FToVPRssG0BeRFpLUFVGYzT2LwAA");
+            "PBQ8FDwUPBQ8FDwUPBQ8FToVPRssG0BeRFpLUFVGYzT2LwAA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
 
     hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
@@ -6158,16 +6303,16 @@ 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(surface,   0,   0, 160, 160, 0xff652e89, 0, "", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "");
+    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "");
+    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0, "q2MKlgEKq2MA");
+    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0, "q2MKlgEKq2MA", d3d11);
     todo_wine ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGNQUFCIYwAA");
+    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "iGNQUFCIYwAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0,
             "qyIKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEK"
@@ -6175,9 +6320,9 @@ static void test_draw_geometry(void)
             "lgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKQQpLCkEKSwqWAQqW"
             "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqW"
             "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqW"
-            "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQrLIwAA");
+            "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQrLIwAA", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "4GLAAuBi");
+    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "4GLAAuBi", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0,
             "qyIKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEK"
@@ -6185,7 +6330,7 @@ static void test_draw_geometry(void)
             "lgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKlgEKSwpBCksKQQqWAQqWAQqW"
             "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqW"
             "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqW"
-            "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQrLIwAA");
+            "AQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQqWAQrLIwAA", d3d11);
     ok(match, "Figure does not match.\n");
 
     match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0,
@@ -6195,7 +6340,7 @@ static void test_draw_geometry(void)
             "CnIKGgpxChwKcAocCm8KHgpuCh4KbQogCmwKIAprCiIKagoiCmkKJApoCiQKZwomCmYKJgplCigK"
             "ZAooCmMKKgpiCioKYQosCmAKLApfCi4KXgouCl0KMApcCjAKWwoyCloKMgpZCjQKWAo0ClcKNgpW"
             "CjYKVQo4ClQKOApTCjoKUgo6ClEKPApQCjwKTwo+Ck4KPgpNCkAKTApACksKQgpKCkIKSQpECkgK"
-            "RApHCkYKozIA");
+            "RApHCkYKozIA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0,
             "ozIKRgpHCkQKSApECkkKQgpKCkIKSwpACkwKQApNCj4KTgo+Ck8KPApQCjwKUQo6ClIKOgpTCjgK"
@@ -6204,7 +6349,7 @@ static void test_draw_geometry(void)
             "HApxChoKcgoaCnMKGAp0ChgKdQoWCnYKFgp3ChQKeAoUCnkKEgp6ChIKewoQCnwKEAp9Cg4KfgoO"
             "Cn8KDAqAAQoMCoEBCgoKggEKCgqDAQoICoQBCggKhQEKBgqGAQoGCocBCgQKiAEKBAqJAQoCCooB"
             "CgIKiwEUjAEUjQESjgESjwEQkAEQkQEOkgEOkwEMlAEMlQEKlgEKlwEImAEImQEGmgEGmwEEnAEE"
-            "nQECngECrycA");
+            "nQECngECrycA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
             "rycCngECnQEEnAEEmwEGmgEGmQEImAEIlwEKlgEKlQEMlAEMkwEOkgEOkQEQkAEQjwESjgESjQEU"
@@ -6213,7 +6358,7 @@ static void test_draw_geometry(void)
             "CnIKGgpxChwKcAocCm8KHgpuCh4KbQogCmwKIAprCiIKagoiCmkKJApoCiQKZwomCmYKJgplCigK"
             "ZAooCmMKKgpiCioKYQosCmAKLApfCi4KXgouCl0KMApcCjAKWwoyCloKMgpZCjQKWAo0ClcKNgpW"
             "CjYKVQo4ClQKOApTCjoKUgo6ClEKPApQCjwKTwo+Ck4KPgpNCkAKTApACksKQgpKCkIKSQpECkgK"
-            "RApHWkZagzEA");
+            "RApHWkZagzEA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 0,
             "gzFaRlpHCkQKSApECkkKQgpKCkIKSwpACkwKQApNCj4KTgo+Ck8KPApQCjwKUQo6ClIKOgpTCjgK"
@@ -6222,7 +6367,7 @@ static void test_draw_geometry(void)
             "HApxChoKcgoaCnMKGAp0ChgKdQoWCnYKFgp3ChQKeAoUCnkKEgp6ChIKewoQCnwKEAp9Cg4KfgoO"
             "Cn8KDAqAAQoMCoEBCgoKggEKCgqDAQoICoQBCggKhQEKBgqGAQoGCocBCgQKiAEKBAqJAQoCCooB"
             "CgIKiwEUjAEUjQESjgESjwEQkAEQkQEOkgEOkwEMlAEMlQEKlgEKlwEImAEImQEGmgEGmwEEnAEE"
-            "nQECngECrycA");
+            "nQECngECrycA", d3d11);
     ok(match, "Figure does not match.\n");
 
     set_rect(&rect, 20.0f, 80.0f, 60.0f, 240.0f);
@@ -6276,7 +6421,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
+            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 32,
             "8XYGtQIOrAIXpAIfmwIokwIwigI4gwJA+gFJ8gFR6QEzAiXhATMKJdgBMxMl0AEzGyXHATMkJb8B"
@@ -6284,7 +6429,7 @@ static void test_draw_geometry(void)
             "M5ABJVgtmQElWCWhASVYJaEBJVgloQElWCWhASVYJaEBJVgloQElWCWhASVYJaEBJVglmQEtWCWQ"
             "ATNaJogBM2IlgAEzayV4M3MlbzN8JWczhAElXjONASVWM5UBJU0zngElRTOmASU8M68BJTQztgEm"
             "KzO/ASUkM8cBJRsz0AElEzPYASUKM+EBJQIz6QFR8gFJ+gFAgwI4igIwkwIomwIfpAIXrAIOtQIG"
-            "8XYA");
+            "8XYA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 32,
             "ujEBngECnQEDnQEEmwEFmgEHmQEHmAEIlwEKlgEKlQELlAENkwENkgEOkQEQjwERjwESjQETjAEU"
@@ -6303,7 +6448,7 @@ static void test_draw_geometry(void)
             "ZgolCmcKJQpnCiQKaQoiCmoKIQtrCiAKbAofCm0KHgtuCh0KbwocCnAKGwpyChoKcgoZCnMKGAp1"
             "ChcKdQoWCncKFAp4ChQKeAoTCnoKEQp7ChALewoQCn0KDgp+Cg0LfgoNCoABCgsKgQEKCgqDAQoJ"
             "CoMBCggKhAEKBwqGAQoGCoYBCgUKhwEKBAqJAQoDCokBCgIKigEKAQqMARSMARONARKPARGPARCR"
-            "AQ6SAQ2TAQ2UAQuVAQqWAQqXAQiYAQeZAQeaAQWbAQSdAQOdAQKeAQG6MQAA");
+            "AQ6SAQ2TAQ2UAQuVAQqWAQqXAQiYAQeZAQeaAQWbAQSdAQOdAQKeAQG6MQAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 64,
             "82ICvQIEugIHuAIJtgIKtAINsgIPsAIRrQITrAIVqQIYpwIZpgIbowIeoQIgnwIhnQIkmwImmAIp"
@@ -6326,7 +6471,7 @@ static void test_draw_geometry(void)
             "ARQ1FeIBFTMV5AEUMRbmARQvFegBFS0V6gEUKxbsARQpFe8BFCcV8AEVJBXzARQjFfUBFCAW9wEU"
             "HhX5ARUcFfsBFBoV/gEUGBX/ARUWFYECFBQVhAIUEhWGAhQPFocCFQ0VigIUDBWMAhQJFY8CFAcV"
             "kAIVBRWSAhQDFZUCFAEVlgIpmAImmwIknQIhnwIgoQIeowIbpgIZpwIYqQIVrAITrQIRsAIPsgIN"
-            "tAIKtgIJuAIHugIEvQIC82IA");
+            "tAIKtgIJuAIHugIEvQIC82IA", d3d11);
     ok(match, "Figure does not match.\n");
 
     hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
@@ -6447,7 +6592,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
+            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0,
             "vi5kPGQ8ZDxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6455,7 +6600,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
+            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
             "vi5kPGQ8ZDxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6463,7 +6608,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
+            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0,
             "yC5aRlpGWjxkPGQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
@@ -6471,7 +6616,7 @@ static void test_draw_geometry(void)
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
             "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8"
             "FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwU"
-            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A");
+            "PBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8FDwUPBQ8ZDxkPGQ8ZDxk3i8A", d3d11);
     ok(match, "Figure does not match.\n");
 
     match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 64,
@@ -6481,7 +6626,7 @@ static void test_draw_geometry(void)
             "RhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRG"
             "FDIURRQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEMUNhRCFDYUQhQ2FEIU"
             "NhRCFDYUQhQ2FEEUOBRAFDgUQBQ4FEAUOBRAFDgUPxQKJgoUPhQBOAEUPmI+Yj5iPSIgIjwcLBw8"
-            "FzYXPBJAEjsPSA86C1ALOgdYBzoDYAPdKgAA");
+            "FzYXPBJAEjsPSA86C1ALOgdYBzoDYAPdKgAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 1024,
             "uxUBnwECngEDnQEEnAEFmwEGmwEGmgEHmQEImAEJlwEKlgELlQEMlQEMlAENkwEOkgEPkQEQkAER"
@@ -6492,7 +6637,7 @@ static void test_draw_geometry(void)
             "RBQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNRRDFDUUQxQ1FEMUNRRDFDUUQhQ2FEIUNhRC"
             "FDYUQhQ3FEEUNxRBFDcUQBQ4FEAUFDhAFAlDQGA/Yj5iPS0eGDwkKxU7HDUUOhY9EzkQRRI4Ck0S"
             "NgRVEZABEJEBD5IBDpMBDZQBDJUBDJUBC5YBCpcBCZgBCJkBB5oBBpsBBpsBBZwBBJ0BA54BAp8B"
-            "AbsV");
+            "AbsV", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 1024,
             "pBYBngECnQEDnAEEmwEFmgEGmQEGmQEHmAEIlwEJlgEKlQELlAEMkwEMkwENkgEOkQEPkAEQNgRV"
@@ -6503,7 +6648,7 @@ static void test_draw_geometry(void)
             "FDQURBQ0FEQUNBREFDQURBQ0FEQUNBREFDQUQxQ1FEMUNRRDFDUUQxQ1FEMUNRRDFDYUQhQ2FEIU"
             "NhRBFDcUQRQ3FEEUNxRBFDgUQDgUFEBDCRRAYD9iPmI+GB4tPRUrJDwUNRw7Ez0WOhJFEDgSTQo3"
             "EVUENhCQAQ+RAQ6SAQ2TAQyTAQyUAQuVAQqWAQmXAQiYAQeZAQaZAQaaAQWbAQScAQOdAQKeAQGk"
-            "FgAA");
+            "FgAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 64,
             "wCsDmQEHlQELkQEPSwJAEkgLNhc8HCwcPCIgIj1iPmI+Yj4UATgBFD4UCiYKFD8UOBRAFDgUQBQ4"
@@ -6512,7 +6657,7 @@ static void test_draw_geometry(void)
             "FDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEUU"
             "NBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNBRDFDYUQhQ2FEIUNhRCFDYUQhQ2"
             "FEIUNhRBFDgUQBQ4FEAUOBRAFDgUQBQ4FD8UCiYKFD4UATgBFD5iPmI+Yj0iICI8HCwcPBc2FzwS"
-            "QBI7D0gPOgtQCzoHWAc6A2AD3SoA");
+            "QBI7D0gPOgtQCzoHWAc6A2AD3SoA", d3d11);
     ok(match, "Figure does not match.\n");
 
     match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 64,
@@ -6522,7 +6667,7 @@ static void test_draw_geometry(void)
             "MhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQz"
             "FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNRRCFDYUQhQ2FEIUNhRCFDYU"
             "QhQ2FEIUNxRAFDgUQBQ4FEAUOBRAFDgUQBQ5FD4UOhQ+FDoUPhQ6FD4UOhQ+FDsUPBQ8FzYXPBws"
-            "HD4gICBEWE1OV0RiOHEm3SkA");
+            "HD4gICBEWE1OV0RiOHEm3SkA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 1024,
             "zykoczhkRVhQTlpEFx4tPRUrJDwUNRw7FDwVOxQ+FDoUPhQ5FEAUOBRAFDgUQBQ4FEAUOBRBFDcU"
@@ -6531,7 +6676,7 @@ static void test_draw_geometry(void)
             "MxRFFDMURBQ0FEQUMxRFFDMURRQzFEUUMxRFFDMURRQzFEUUMxRFFDMURRQzFEUUMxRFFDMURBQ0"
             "FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEMUNRRDFDUUQxQ1FEMUNRRDFDYU"
             "QhQ2FEIUNhRCFDYUQRQ3FEEUNxRBFDgUQBQ4FEAUOBRAFDgUQBQ5FD4UOhQ+FDsVPBQ7HDUUPCQr"
-            "FT0tHhdEWk5QWEVkOHMozykA");
+            "FT0tHhdEWk5QWEVkOHMozykA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 1024,
             "6SkobThfRVNQSFpALR4XPSQrFTscNRQ7FTwUOhQ+FDoUPhQ5FEAUOBRAFDgUQBQ4FEAUNxRBFDcU"
@@ -6540,7 +6685,7 @@ static void test_draw_geometry(void)
             "MxRFFDQURBQ0FEQUNBRFFDMURRQzFEUUMxRFFDMURRQzFEUUMxRFFDMURRQzFEUUMxRFFDQURBQ0"
             "FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ1FEMUNRRDFDUUQxQ1FEMUNRRDFDUU"
             "QhQ2FEIUNhRCFDcUQRQ3FEEUNxRBFDcUQBQ4FEAUOBRAFDgUQBQ5FD4UOhQ+FDoUPBU7FDUcOxUr"
-            "JD0XHi1AWkhQU0VfOG0o6SkA");
+            "JD0XHi1AWkhQU0VfOG0o6SkA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 64,
             "3SkmcThiRFdOTVhGHiAgRhQsHDwXNhc8FDwUOxQ+FDoUPhQ6FD4UOhQ+FDoUPhQ5FEAUOBRAFDgU"
@@ -6549,7 +6694,7 @@ static void test_draw_geometry(void)
             "MhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQyFEYUMhRGFDIURhQz"
             "FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNBREFDQURBQ0FEQUNRRCFDYUQhQ2FEIUNhRCFDYU"
             "QhQ2FEIUNxRAFDgUQBQ4FEAUOBRAFDgUQBQ5FD4UOhQ+FDoUPhQ6FD4UOhQ+FDsUPBQ8FzYXPBws"
-            "HD4gICBEWE1OV0RiOHEm3SkA");
+            "HD4gICBEWE1OV0RiOHEm3SkA", d3d11);
     ok(match, "Figure does not match.\n");
 
     hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
@@ -6628,13 +6773,13 @@ static void test_draw_geometry(void)
             "EgSGAQQSBIYBBBIEhgEEEgSGAQQRBIgBBBAEiAEEEASIAQQQBIkBBA4EigEEDgSLAQQMBIwBBAwE"
             "jQEECgSOAQQJBJABBAgEkAEFBgSSAQQGBJMBBAQElAEEBASVAQQDBJUBBAIElwEEAQSXAQiZAQeZ"
             "AQaaAQaaAQaaAQabAQWbAQWbAQWbAQWaAQeZAQeZAQeZAQiXAQQBBJYBBAMElQEEAwWRAQUGBY0B"
-            "BQwFhwEFEgSCAQUXBYABBBoFfgUYBIIBBhEFiAEUpTEA");
+            "BQwFhwEFEgSCAQUXBYABBBoFfgUYBIIBBhEFiAEUpTEA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 512,
             "yJIBArkCDa4CGKMCIZoCK5ECM4gCO4ECQ/gBS/EBUesBLAYl5QEsDiPeASwWIdkBLBwh0wEsISHO"
             "ASsgKMsBKR4vyAEnHDPIASUaNMsBIxg1mQEFMCIUN54BCygiDzijAREhIgY9qAEYGWGuAR4RXbMB"
             "JAhbuQGAAcABesYBc84Ba9YBTvQBP4MCOIoCNI4CM5ACMZICL5QCLZYCK5kCKJsCJ54CI6MCHq8C"
-            "EraSAQAA");
+            "EraSAQAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 512,
             "xWkCmwEFmAEJlQELlAENkgEOkQEPjwESjQETjAEVigELAQqJAQsCCogBCwQKhwEKBQqGAQoGCoYB"
@@ -6648,7 +6793,7 @@ static void test_draw_geometry(void)
             "DBUCfgwSBH4MEQV/DA4GgAEMDAiAAQ0KCYEBDAgLgQENBQ2BAQ0EDoIBDQEPgwEdgwEdgwEdgwEc"
             "hAEKAgQCCoUBCgYKhgEKBgqGAQoFC4YBCgUKhwEKBAqIAQoECogBCgMKiQEKAwqIAQoDCokBCgMK"
             "iQEKAgqJAQoCCooBCgIKiQEKAgqKAQoBCosBCgEKigEKAQqLARSMARSLARSMAROMARONARKOARGO"
-            "ARGPARCQAQ6RAQ2YAQTEZAAA");
+            "ARGPARCQAQ6RAQ2YAQTEZAAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 1024,
             "ytABA7gCCbICD60CFKkCF6cCGqMCHqACIZ0CJJoCJpgCKZUCFgIUkgIWBBWPAhYHFI4CFQoUjAIV"
@@ -6663,7 +6808,7 @@ static void test_draw_geometry(void)
             "qAIYKwP7ARgnBf0BGCMI/QEZHgz+ARgbD/8BGBcSgAIYEhaAAhoNGIICGggcgwIaBB+DAjyEAjyF"
             "AjqGAjmIAjiIAiECFIkCFAIIBBSKAhQNFIsCFAwUjAIUCxSNAhQKFI4CFAkUjwIUBxWQAhQGFZEC"
             "FAUVkQIUBRWRAhQFFZECFQMVkwIUAxWTAhQDFZMCFAIVlAIVARWVAiqVAimWAimWAiiYAiaZAiaZ"
-            "AiWaAiScAiKdAiGeAh+hAhyjAhmuAg3GxgEA");
+            "AiWaAiScAiKdAiGeAh+hAhyjAhmuAg3GxgEA", d3d11);
     ok(match, "Figure does not match.\n");
 
     ID2D1SolidColorBrush_Release(brush);
@@ -6676,7 +6821,7 @@ static void test_draw_geometry(void)
     DestroyWindow(window);
 }
 
-static void test_fill_geometry(void)
+static void test_fill_geometry(BOOL d3d11)
 {
     ID2D1TransformedGeometry *transformed_geometry[4];
     ID2D1RectangleGeometry *rect_geometry[2];
@@ -6699,7 +6844,7 @@ static void test_fill_geometry(void)
     HRESULT hr;
     BOOL match;
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_GetFactory(rt, &factory);
@@ -6735,28 +6880,28 @@ 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(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA", d3d11);
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 8,
             "yjIMjwEWhwEcggEgfiR6KHYscy5xMG40azZpOGc6ZTxjPmI+YUBfQl1EXERbRlpGWUhYSFdKVkpV"
             "TFRMVExTTlJOUk5STlJOUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU5STlJOUk5STlNMVExUTFVK"
-            "VkpXSFhIWUZaRltEXERdQl9AYT5iPmM8ZTpnOGk2azRuMHEucyx2KHokfiCCARyHARaPAQzKMgAA");
+            "VkpXSFhIWUZaRltEXERdQl9AYT5iPmM8ZTpnOGk2azRuMHEucyx2KHokfiCCARyHARaPAQzKMgAA", d3d11);
      ok(match, "Figure does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -6793,40 +6938,40 @@ 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(surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0,
             "szI6YURZSlROUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU5USllEYTqzMgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU5USllEYTqzMgAA", d3d11);
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 2,
             "tjI0aDxhQlxGWEpVTFNOUk5RUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFOUk5TTFVKWEZcQmA+ZzS2MgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFOUk5TTFVKWEZcQmA+ZzS2MgAA", d3d11);
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 0,
             "sDJAWkxSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJMWkCwMgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJMWkCwMgAA", d3d11);
     ok(match, "Figure does not match.\n");
 
     ID2D1RenderTarget_BeginDraw(rt);
@@ -6863,40 +7008,40 @@ 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(surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 10,
             "yjIMjwEWhwEcggEgfiR6KHYscy5xMG40azZpOGc6ZTxjPmI+YUBfQl1EXERbRlpGWUhYSFdKVkpV"
             "TFRMVExTTlJOUk5STlJOUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU5STlJOUk5STlNMVExUTFVK"
-            "VkpXSFhIWUZaRltEXERdQl9AYT5iPmM8ZTpnOGk2azRuMHEucyx2KHokfiCCARyHARaPAQzKMgAA");
+            "VkpXSFhIWUZaRltEXERdQl9AYT5iPmM8ZTpnOGk2azRuMHEucyx2KHokfiCCARyHARaPAQzKMgAA", d3d11);
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 10,
             "uTIucDJsNmk4ZzplPGM+YUBgQF9CXkJdRFxEW0ZaRllIWEhXSlZKVkpWSlVMVExUTFRMU05STlJO"
             "Uk5STlJOUk9QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFPUU5STlJOUk5STlJOU0xU"
-            "TFRMVExVSlZKVkpWSldIWEhZRlpGW0RcRF1CXkJfQGBAYT5jPGU6ZzhpNmwycC65MgAA");
+            "TFRMVExVSlZKVkpWSldIWEhZRlpGW0RcRF1CXkJfQGBAYT5jPGU6ZzhpNmwycC65MgAA", d3d11);
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 10,
             "vzIiczhhRldMUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUkxXRmA6cSS+MgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUkxXRmA6cSS+MgAA", d3d11);
     ok(match, "Figure does not match.\n");
 
     hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
@@ -6982,47 +7127,47 @@ 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(surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
 
-    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0, "gMgB");
+    match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
 
     match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 0,
             "7zMCngECnQEEnAEEmwEGmgEGmQEImAEIlwEKlgEKlQEMlAEMkwEOkgEOkQEQkAEQjwESjgESjQEU"
             "jAEUiwEWigEWiQEYiAEYhwEahgEahQEchAEcgwEeggEegQEggAEgfyJ+In0kfCR7JnomeSh4KHcq"
             "dip1LHQscy5yLnEwcDBvMm4ybTRsNGs2ajZpOGg4ZzpmOmU8ZDxjPmI+YUBgQF9CXkJdRFxEW0Za"
-            "RllIWEhXSlZKVUxUTFNOUk5RUKgy");
+            "RllIWEhXSlZKVUxUTFNOUk5RUKgy", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 0,
             "qDJQUU5STlNMVExVSlZKV0hYSFlGWkZbRFxEXUJeQl9AYEBhPmI+YzxkPGU6ZjpnOGg4aTZqNms0"
             "bDRtMm4ybzBwMHEuci5zLHQsdSp2KncoeCh5JnomeyR8JH0ifiJ/IIABIIEBHoIBHoMBHIQBHIUB"
             "GoYBGocBGIgBGIkBFooBFosBFIwBFI0BEo4BEo8BEJABEJEBDpIBDpMBDJQBDJUBCpYBCpcBCJgB"
-            "CJkBBpoBBpsBBJwBBJ0BAp4BAu8z");
+            "CJkBBpoBBpsBBJwBBJ0BAp4BAu8z", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 0,
             "7zMCngECnQEEnAEEmwEGmgEGmQEImAEIlwEKlgEKlQEMlAEMkwEOkgEOkQEQkAEQjwESjgESjQEU"
             "jAEUiwEWigEWiQEYiAEYhwEahgEahQEchAEcgwEeggEegQEggAEgfyJ+In0kfCR7JnomeSh4KHcq"
             "dip1LHQscy5yLnEwcDBvMm4ybTRsNGs2ajZpOGg4ZzpmOmU8ZDxjPmI+YUBgQF9CXkJdRFxEW0Za"
-            "RllIWEhXSlZKVUxUTFNOUk5RUKgy");
+            "RllIWEhXSlZKVUxUTFNOUk5RUKgy", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 0,
             "qDJQUU5STlNMVExVSlZKV0hYSFlGWkZbRFxEXUJeQl9AYEBhPmI+YzxkPGU6ZjpnOGg4aTZqNms0"
             "bDRtMm4ybzBwMHEuci5zLHQsdSp2KncoeCh5JnomeyR8JH0ifiJ/IIABIIEBHoIBHoMBHIQBHIUB"
             "GoYBGocBGIgBGIkBFooBFosBFIwBFI0BEo4BEo8BEJABEJEBDpIBDpMBDJQBDJUBCpYBCpcBCJgB"
-            "CJkBBpoBBpsBBJwBBJ0BAp4BAu8z");
+            "CJkBBpoBBpsBBJwBBJ0BAp4BAu8z", d3d11);
     ok(match, "Figure does not match.\n");
 
     set_rect(&rect, 20.0f, 80.0f, 60.0f, 240.0f);
@@ -7073,13 +7218,13 @@ static void test_fill_geometry(void)
     match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 32,
             "sIMBA7cCDK8CFKYCHZ4CJJYCLY4CNYUCPv0BRvQBT+wBV+MBYNsBaNIBccoBecEBgQG6AYkBsQGS"
             "AakBmgGgAaMBmAGrAY8BtAGHAbwBfsUBfcYBfcYBfcUBfsUBfcYBfcYBfcYBfcYBfcUBfr0BhgG0"
             "AY8BrAGXAaMBoAGbAagBkgGwAYsBuAGCAcEBeskBcdIBadoBYOMBWOsBT/QBR/wBPoUCNowCLpUC"
-            "Jp0CHaYCFa4CDLcCBK+DAQAA");
+            "Jp0CHaYCFa4CDLcCBK+DAQAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 32,
             "+D0BngEDnQEDnAEEmwEGmgEGmQEHmAEJlwEJlgELlAEMkwENkwEOkQEPkAEQkAERjgESjQETjQEU"
@@ -7090,7 +7235,7 @@ static void test_fill_geometry(void)
             "Yj5jPWI/YT9gQF9CXkJdRFtFW0VaR1hIV0lXSlVLVExUTVJOUVBQUE9RTlNNU0xUS1ZKVklXSFlG"
             "WkZaRVxDXUNeQV9AYEBhPmI9Yz1kO2U6ZjpnOGg3ajVrNWs0bTJuMm4xcC9xL3Eucyx0LHUqdil3"
             "KXgneSZ6JXwkfCN9In8hfyCBAR6CAR6CAR2EARuFARuFARqHARiIAReJAReKARWLARSNARONARKO"
-            "ARGQARCQAQ+RAQ6TAQ2TAQyUAQuWAQqWAQmYAQeZAQaaAQabAQScAQOdAQOeAQH4PQAA");
+            "ARGQARCQAQ+RAQ6TAQ2TAQyUAQuWAQqWAQmYAQeZAQaaAQabAQScAQOdAQOeAQH4PQAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 32,
             "sXkBvgIDvAIEugIHuAIJtgILswINsgIPrwISrQITrAIVqQIYpwIapQIbowIeoQIgngIjnAIkmwIm"
@@ -7105,7 +7250,7 @@ static void test_fill_geometry(void)
             "Aa0BkgGvAY8BsQGOAbMBjAG1AYkBuAGHAbkBhQG8AYMBvgGBAcABfsIBfcQBe8YBeMgBd8oBdM0B"
             "cs8BcNABbtMBbNUBatcBZ9kBZtsBY94BYd8BYOEBXeQBW+YBWOgBV+oBVewBUu8BUPABT/IBTPUB"
             "SvYBSPkBRvsBRP0BQf8BQIECPoMCO4YCOYcCN4oCNYwCM40CMZACL5ICLZQCKpYCKZgCJpsCJJ0C"
-            "Ip4CIKECHqMCHKQCGqcCGKkCFawCE60CEq8CD7ICDbMCDLUCCbgCB7oCBLwCA74CAbF5");
+            "Ip4CIKECHqMCHKQCGqcCGKkCFawCE60CEq8CD7ICDbMCDLUCCbgCB7oCBLwCA74CAbF5", d3d11);
     ok(match, "Figure does not match.\n");
 
     hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
@@ -7223,71 +7368,71 @@ static void test_fill_geometry(void)
     match = compare_figure(surface,   0,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA", d3d11);
     match = compare_figure(surface, 320,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480,   0, 160, 160, 0xff652e89, 0,
             "qDJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
             "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ"
-            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA");
+            "UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCoMgAA", d3d11);
     ok(match, "Figure does not match.\n");
 
     match = compare_figure(surface,   0, 160, 160, 160, 0xff652e89, 16,
             "qDICTAJQB0IHUQs4C1IRLBFSGxgbUk5STlNMVExUTFRMVExVSlZKVkpWSlZKVkpXSFhIWEhYSFhI"
             "WEhYSFhIWEhYSFlGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZa"
             "RllIWEhYSFhIWEhYSFhIWEhYSFhIV0pWSlZKVkpWSlZKVUxUTFRMVExUTFNOUk5SGxgbUhEsEVIL"
-            "OAtRB0IHUAJMAqgy");
+            "OAtRB0IHUAJMAqgy", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 160, 160, 0xff652e89, 16,
             "qDIBSwRQAkMKUQQ5EVIIKxtTDRkmVExUTFRMVEtVS1VLVkpWSlZKVklXSVdJV0lXSVhIWEhYSFhI"
             "WEhYSFhIWEhYSFhIWUdZR1lHWUdZR1lHWUdZR1lHWUdZSFhIWUdZR1lHWUdZR1lHWUdZR1lHWUdZ"
             "SFhIWEhYSFhIWEhYSFhIWEhYSFhJV0lXSVdJV0lWSlZKVkpWS1VLVUtUTFRMVExUJhkNUxsrCFIR"
-            "OQRRCkMCUARLAagy");
+            "OQRRCkMCUARLAagy", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 160, 160, 160, 0xff652e89, 16,
             "qDIESwFRCkMCUhE5BFIbKwhTJhkNVExUTFRMVUtVS1VLVUpWSlZKV0lXSVdJV0lXSVdIWEhYSFhI"
             "WEhYSFhIWEhYSFhIWEdZR1lHWUdZR1lHWUdZR1lHWUdYSFhIWEdZR1lHWUdZR1lHWUdZR1lHWUdY"
             "SFhIWEhYSFhIWEhYSFhIWEhYSFdJV0lXSVdJV0lXSlZKVkpVS1VLVUtVTFRMVExUDRkmUwgrG1IE"
-            "ORFSAkMKUQFLBKgy");
+            "ORFSAkMKUQFLBKgy", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 160, 160, 160, 0xff652e89, 16,
             "qDICTAJQB0IHUQs4C1IRLBFSGxgbUk5STlNMVExUTFRMVExVSlZKVkpWSlZKVkpXSFhIWEhYSFhI"
             "WEhYSFhIWEhYSFlGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZa"
             "RllIWEhYSFhIWEhYSFhIWEhYSFhIV0pWSlZKVkpWSlZKVUxUTFRMVExUTFNOUk5SGxgbUhEsEVIL"
-            "OAtRB0IHUAJMAqgy");
+            "OAtRB0IHUAJMAqgy", d3d11);
     ok(match, "Figure does not match.\n");
 
     match = compare_figure(surface,   0, 320, 160, 160, 0xff652e89, 16,
             "pCwYfixuOGNCWUxSUFBQT1JOUk5STlJOUk1UTFRMVExUTFRLVkpWSlZKVkpWSlZJWEhYSFhIWEhY"
             "SFhIWEhYSFhIWEdaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpG"
             "WkdYSFhIWEhYSFhIWEhYSFhIWEhYSVZKVkpWSlZKVkpWS1RMVExUTFRMVE1STlJOUk5STlJPUFBQ"
-            "UkxZQmM4bix+GKQs");
+            "UkxZQmM4bix+GKQs", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 320, 160, 160, 0xff652e89, 16,
             "liwZgQErcTllQ1xLVFBQUU9STlJNVExUTFRMVExVS1VLVUpWSlZKVkpXSVdJV0lXSVdIWEhYSFhI"
             "WEhYSFhIWEhYSFhIWEdZR1lHWUdZR1lHWUdZR1lHWUdZR1hIWEdZR1lHWUdZR1lHWUdZR1lHWUdZ"
             "R1hIWEhYSFhIWEhYSFhIWEhYSFhIV0lXSVdJV0lXSlZKVkpWSlVLVUtVTFRMVExUTFRNUk5ST1FQ"
-            "UFRLXENlOXErgQEZliwA");
+            "UFRLXENlOXErgQEZliwA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 320, 320, 160, 160, 0xff652e89, 16,
             "sSwZeytrOV9DVktRUE9RTlJOUk1UTFRMVExUS1VLVUtVS1ZKVkpWSVdJV0lXSVdJV0lYSFhIWEhY"
             "SFhIWEhYSFhIWEhYSFlHWUdZR1lHWUdZR1lHWUdZR1lIWEhYSFlHWUdZR1lHWUdZR1lHWUdZR1lI"
             "WEhYSFhIWEhYSFhIWEhYSFhIWElXSVdJV0lXSVdJVkpWSlZLVUtVS1VLVExUTFRMVE1STlJOUU9Q"
-            "UUtWQ185ayt7GbEs");
+            "UUtWQ185ayt7GbEs", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 480, 320, 160, 160, 0xff652e89, 16,
             "pCwYfixuOGNCWUxSUFBQT1JOUk5STlJOUk1UTFRMVExUTFRLVkpWSlZKVkpWSlZJWEhYSFhIWEhY"
             "SFhIWEhYSFhIWEdaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpGWkZaRlpG"
             "WkdYSFhIWEhYSFhIWEhYSFhIWEhYSVZKVkpWSlZKVkpWS1RMVExUTFRMVE1STlJOUk5STlJPUFBQ"
-            "UkxZQmM4bix+GKQs");
+            "UkxZQmM4bix+GKQs", d3d11);
     ok(match, "Figure does not match.\n");
 
     hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
@@ -7364,12 +7509,12 @@ static void test_fill_geometry(void)
             "hwEZhwEZhwEZiAEYiAEYiAEYiAEYiAEXiQEXiQEXiQEXigEWigEWigEWigEWigEWigEWigEWiwEU"
             "jAEUjAEUjAEUjQESjgESjwEQkAEQkQEOkgENlAEMlQEKlgEKlwEImAEImQEHmQEGmwEFmwEEnQED"
             "nQECngECngECnwEBnwEBnwEBnwEBnwEBnwECnQEDnQEDnQEEmwEFmgEHmQEHlwELkQERjAEXhgEd"
-            "hAEfgwEchgEXjwEMqTEA");
+            "hAEfgwEchgEXjwEMqTEA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 32,
             "h58BBrYCDq0CF6QCIJwCKJMCMIwCNoUCPf8BQ/kBSPQBTu4BTe8BTPEBSfUBRvgBQf0BPYECOYUC"
             "NIoCMI4CK+UBAS0W/AEHIwiPAgsaBZcCEAwIngIepAIaqAIWrAITsAIRsgIPtQIMtwILugIHwAIB"
-            "ypwB");
+            "ypwB", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 32,
             "wW4DnAEEmwEFmgEHmAEIlwEKlQELlAEMkwEOkQEPkAEQkAERjgESjgETjAEUjAEUiwEWigEWiQEX"
@@ -7380,7 +7525,7 @@ static void test_fill_geometry(void)
             "lwEKlwEJmAEImQEHmgEGmwEFnAEEnQEEnQEDnQEDngECngEDngECngECnwECngECnwECngECngED"
             "ngECEgGLAQMQAosBAw4EjAEDCwaMAQQJBo0BBQYIjQEHAgqNARKOARKPARCQARCQARCQAQ+RAQ6S"
             "AQ6SAQ2TAQ2SAQ2TAQ2TAQyTAQyUAQyUAQuUAQuVAQuUAQuVAQqWAQmWAQqWAQmXAQiXAQiYAQeY"
-            "AQeZAQWbAQSDZwAA");
+            "AQeZAQWbAQSDZwAA", d3d11);
     ok(match, "Figure does not match.\n");
     match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 32,
             "g90BBLkCCLYCC7ICDrACEa0CFKoCF6cCGqQCHKMCHqECIJ8CIpwCJJsCJpkCKJcCKZYCK5QCLZIC"
@@ -7391,7 +7536,7 @@ static void test_fill_geometry(void)
             "Fa0CE68CEbECD7MCDrQCDLYCCrgCCbkCB7sCBrsCBbwCBbwCBL0CBL0CBL0CBL0CA70CBL0CBL0C"
             "BLwCBSUBlgIFIQSXAgYbCJcCBxcKmQIIEQ6ZAgoMEJoCDQUTnAIknAIjnQIingIhnwIgoAIfoQIe"
             "ogIdowIcpAIbpQIapQIZpgIZpgIZpwIYpwIXqAIXqAIXqQIVqgIVqgIUqwITrQISrQIRrgIQsAIO"
-            "sQIMswILtQIIhs4B");
+            "sQIMswILtQIIhs4B", d3d11);
     ok(match, "Figure does not match.\n");
 
     hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
@@ -7463,13 +7608,13 @@ 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(surface,   0,   0, 160, 160, 0xff652e89, 0, "gMgB", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 0, "gJAD");
+    match = compare_figure(surface, 160,   0, 320, 160, 0xff652e89, 0, "gJAD", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 0, "gJAD");
+    match = compare_figure(surface,   0, 160, 160, 320, 0xff652e89, 0, "gJAD", d3d11);
     ok(match, "Figure does not match.\n");
-    match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 0, "gKAG");
+    match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 0, "gKAG", d3d11);
     ok(match, "Figure does not match.\n");
 
     ID2D1SolidColorBrush_Release(brush);
@@ -7482,7 +7627,7 @@ static void test_fill_geometry(void)
     DestroyWindow(window);
 }
 
-static void test_gdi_interop(void)
+static void test_gdi_interop(BOOL d3d11)
 {
     ID2D1GdiInteropRenderTarget *interop;
     D2D1_RENDER_TARGET_PROPERTIES desc;
@@ -7498,7 +7643,7 @@ static void test_gdi_interop(void)
     RECT rect;
     HDC dc;
 
-    if (!(device = create_device()))
+    if (!(device = create_device(d3d11)))
     {
         skip("Failed to create device, skipping tests.\n");
         return;
@@ -7616,7 +7761,7 @@ todo_wine
     IDXGIDevice_Release(device);
 }
 
-static void test_layer(void)
+static void test_layer(BOOL d3d11)
 {
     ID2D1Factory *factory, *layer_factory;
     IDXGISwapChain *swapchain;
@@ -7629,7 +7774,7 @@ static void test_layer(void)
     HWND window;
     HRESULT hr;
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_GetFactory(rt, &factory);
@@ -7664,7 +7809,7 @@ static void test_layer(void)
     DestroyWindow(window);
 }
 
-static void test_bezier_intersect(void)
+static void test_bezier_intersect(BOOL d3d11)
 {
     D2D1_POINT_2F point = {0.0f, 0.0f};
     ID2D1SolidColorBrush *brush;
@@ -7681,7 +7826,7 @@ static void test_bezier_intersect(void)
     HRESULT hr;
     BOOL match;
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     ID2D1RenderTarget_GetFactory(rt, &factory);
@@ -7750,7 +7895,7 @@ static void test_bezier_intersect(void)
             "In5/ISJ+fiIjfX0jJHx8JCV7eyUmenomJ3l5Jyh4eCgpd3cpK3V2Kix0dSstc3QsLnJzLS9xci4w"
             "cHAwMm5vMTNtbjI0bG0zNWtrNTdpajY4aGk3OmZnOTtlZjo8ZGQ8PmJjPT9hYj5BX2BAQl5eQkRc"
             "XUNGWltFR1lZR0lXWEhLVVZKTVNUTE9RUk5RT1BQUk5OUlRMTFRWSkpWWUdIWFtFRVteQkNdYEBA"
-            "YGI+PmJlOztlaDg4aGs1NWtuMjJuci4vcXUrK3V6JiZ6fiIifoMBHR2DAYsBFRWLAZUBCwuVAQAA");
+            "YGI+PmJlOztlaDg4aGs1NWtuMjJuci4vcXUrK3V6JiZ6fiIifoMBHR2DAYsBFRWLAZUBCwuVAQAA", d3d11);
     ok(match, "Figure does not match.\n");
 
     hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
@@ -7793,7 +7938,7 @@ static void test_bezier_intersect(void)
             "AaoBlwGqAZcBqwGWAasBlgGsAZUBrQGVAawBlQGtAZQBrgGUAa0BlAGuAZMBrwGTAa8BkgGwAZEB"
             "sQGRAbEBkAGyAZABsgGPAbMBjwG0AY4BtAGNAbUBjQG2AYwBtgGLAbgBigG4AYoBuQGJAboBhwG7"
             "AYcBvAGGAb0BhQG+AYQBvwGDAcABggHBAYIBwgGAAcMBf8QBfsYBfMgBe8gBesoBeMwBd80BddAB"
-            "c9EBcdQBb9YBbNkBatsBaN0BZeEBYuQBX+gBW+0BVvEBUvUBTvwBR4QCQIoCOZgCK6oCGQIA");
+            "c9EBcdQBb9YBbNkBatsBaN0BZeEBYuQBX+gBW+0BVvEBUvUBTvwBR4QCQIoCOZgCK6oCGQIA", d3d11);
     ok(match, "Figure does not match.\n");
 
     ID2D1SolidColorBrush_Release(brush);
@@ -7806,7 +7951,7 @@ static void test_bezier_intersect(void)
     DestroyWindow(window);
 }
 
-static void test_create_device(void)
+static void test_create_device(BOOL d3d11)
 {
     D2D1_CREATION_PROPERTIES properties = {0};
     IDXGIDevice *d3d_device;
@@ -7817,7 +7962,7 @@ static void test_create_device(void)
     ULONG refcount;
     HRESULT hr;
 
-    if (!(d3d_device = create_device()))
+    if (!(d3d_device = create_device(d3d11)))
     {
         skip("Failed to create device, skipping tests.\n");
         return;
@@ -8049,7 +8194,7 @@ static IDXGISurface *create_surface(IDXGIDevice *dxgi_device, DXGI_FORMAT format
     return surface;
 }
 
-static void test_bitmap_surface(void)
+static void test_bitmap_surface(BOOL d3d11)
 {
     static const struct bitmap_format_test
     {
@@ -8099,7 +8244,7 @@ static void test_bitmap_surface(void)
     IWICBitmap *wic_bitmap;
     IWICImagingFactory *wic_factory;
 
-    if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     if (FAILED(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory1, NULL, (void **)&factory)))
@@ -8297,7 +8442,7 @@ static void test_bitmap_surface(void)
     IDXGIDevice_Release(d3d_device);
 }
 
-static void test_device_context(void)
+static void test_device_context(BOOL d3d11)
 {
     D2D1_HWND_RENDER_TARGET_PROPERTIES hwnd_rt_desc;
     D2D1_RENDER_TARGET_PROPERTIES rt_desc;
@@ -8322,7 +8467,7 @@ static void test_device_context(void)
     IWICBitmap *wic_bitmap;
     IWICImagingFactory *wic_factory;
 
-    if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     if (FAILED(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory1, NULL, (void **)&factory)))
@@ -8613,7 +8758,7 @@ static void test_skew_matrix(void)
     }
 }
 
-static ID2D1DeviceContext *create_device_context(ID2D1Factory1 *factory, IDXGIDevice *dxgi_device)
+static ID2D1DeviceContext *create_device_context(ID2D1Factory1 *factory, IDXGIDevice *dxgi_device, BOOL d3d11)
 {
     ID2D1DeviceContext *device_context;
     ID2D1Device *device;
@@ -8623,13 +8768,14 @@ static ID2D1DeviceContext *create_device_context(ID2D1Factory1 *factory, IDXGIDe
     ok(SUCCEEDED(hr), "Failed to get ID2D1Device, hr %#x.\n", hr);
 
     hr = ID2D1Device_CreateDeviceContext(device, D2D1_DEVICE_CONTEXT_OPTIONS_NONE, &device_context);
-    ok(SUCCEEDED(hr), "Failed to create device context, hr %#x.\n", hr);
+    todo_wine_if(d3d11) ok(SUCCEEDED(hr), "Failed to create device context, hr %#x.\n", hr);
     ID2D1Device_Release(device);
 
+    if (FAILED(hr)) return NULL;
     return device_context;
 }
 
-static void test_command_list(void)
+static void test_command_list(BOOL d3d11)
 {
     static const DWORD bitmap_data[] =
     {
@@ -8663,7 +8809,7 @@ static void test_command_list(void)
     ULONG refcount;
     HRESULT hr;
 
-    if (!(d3d_device = create_device()))
+    if (!(d3d_device = create_device(d3d11)))
     {
         skip("Failed to create device, skipping tests.\n");
         return;
@@ -8676,7 +8822,13 @@ static void test_command_list(void)
         return;
     }
 
-    device_context = create_device_context(factory, d3d_device);
+    device_context = create_device_context(factory, d3d_device, d3d11);
+    if (!device_context && d3d11)
+    {
+        todo_wine win_skip("Skipping D3D11 tests.\n");
+        IDXGIDevice_Release(d3d_device);
+        return;
+    }
     ok(device_context != NULL, "Failed to create device context.\n");
 
     hr = ID2D1DeviceContext_CreateCommandList(device_context, &command_list);
@@ -8862,7 +9014,7 @@ todo_wine
     ID2D1CommandList_Release(command_list);
 
     /* List created with different context. */
-    device_context2 = create_device_context(factory, d3d_device);
+    device_context2 = create_device_context(factory, d3d_device, d3d11);
     ok(device_context2 != NULL, "Failed to create device context.\n");
 
     hr = ID2D1DeviceContext_CreateCommandList(device_context, &command_list);
@@ -8999,7 +9151,7 @@ static void test_max_bitmap_size(void)
     ID2D1Factory_Release(factory);
 }
 
-static void test_dpi(void)
+static void test_dpi(BOOL d3d11)
 {
     D2D1_BITMAP_PROPERTIES1 bitmap_desc;
     ID2D1DeviceContext *device_context;
@@ -9034,7 +9186,7 @@ static void test_dpi(void)
     static const float dc_dpi_x = 120.0f, dc_dpi_y = 144.0f;
     unsigned int i;
 
-    if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&d3d_device, &window, &swapchain, &surface, &rt, d3d11))
         return;
     ID2D1RenderTarget_Release(rt);
 
@@ -9045,7 +9197,7 @@ static void test_dpi(void)
         return;
     }
 
-    device_context = create_device_context(factory, d3d_device);
+    device_context = create_device_context(factory, d3d_device, d3d11);
     ok(!!device_context, "Failed to create device context.\n");
 
     ID2D1DeviceContext_GetDpi(device_context, &dpi_x, &dpi_y);
@@ -9218,7 +9370,7 @@ static void test_dpi(void)
     DestroyWindow(window);
 }
 
-static void test_wic_bitmap_format(void)
+static void test_wic_bitmap_format(BOOL d3d11)
 {
     IWICImagingFactory *wic_factory;
     IDXGISwapChain *swapchain;
@@ -9244,7 +9396,7 @@ static void test_wic_bitmap_format(void)
         {&GUID_WICPixelFormat32bppBGR,   {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}},
     };
 
-    if (!init_test(&device, &window, &swapchain, &surface, &rt))
+    if (!init_test(&device, &window, &swapchain, &surface, &rt, d3d11))
         return;
 
     CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
@@ -9373,42 +9525,42 @@ START_TEST(d2d1)
             use_mt = FALSE;
     }
 
-    queue_test(test_clip);
-    queue_test(test_state_block);
-    queue_test(test_color_brush);
-    queue_test(test_bitmap_brush);
-    queue_test(test_linear_brush);
-    queue_test(test_radial_brush);
-    queue_test(test_path_geometry);
+    queue_d3d1x_test(test_clip);
+    queue_d3d1x_test(test_state_block);
+    queue_d3d1x_test(test_color_brush);
+    queue_d3d1x_test(test_bitmap_brush);
+    queue_d3d1x_test(test_linear_brush);
+    queue_d3d1x_test(test_radial_brush);
+    queue_d3d1x_test(test_path_geometry);
     queue_test(test_rectangle_geometry);
     queue_test(test_rounded_rectangle_geometry);
-    queue_test(test_bitmap_formats);
-    queue_test(test_alpha_mode);
-    queue_test(test_shared_bitmap);
-    queue_test(test_bitmap_updates);
-    queue_test(test_opacity_brush);
-    queue_test(test_create_target);
-    queue_test(test_draw_text_layout);
-    queue_test(test_dc_target);
-    queue_test(test_hwnd_target);
-    queue_test(test_bitmap_target);
+    queue_d3d1x_test(test_bitmap_formats);
+    queue_d3d1x_test(test_alpha_mode);
+    queue_d3d1x_test(test_shared_bitmap);
+    queue_d3d1x_test(test_bitmap_updates);
+    queue_d3d1x_test(test_opacity_brush);
+    queue_d3d1x_test(test_create_target);
+    queue_d3d1x_test(test_draw_text_layout);
+    queue_d3d1x_test(test_dc_target);
+    queue_d3d1x_test(test_hwnd_target);
+    queue_d3d1x_test(test_bitmap_target);
     queue_test(test_desktop_dpi);
     queue_test(test_stroke_style);
-    queue_test(test_gradient);
-    queue_test(test_draw_geometry);
-    queue_test(test_fill_geometry);
-    queue_test(test_gdi_interop);
-    queue_test(test_layer);
-    queue_test(test_bezier_intersect);
-    queue_test(test_create_device);
-    queue_test(test_bitmap_surface);
-    queue_test(test_device_context);
+    queue_d3d1x_test(test_gradient);
+    queue_d3d1x_test(test_draw_geometry);
+    queue_d3d1x_test(test_fill_geometry);
+    queue_d3d1x_test(test_gdi_interop);
+    queue_d3d1x_test(test_layer);
+    queue_d3d1x_test(test_bezier_intersect);
+    queue_d3d1x_test(test_create_device);
+    queue_d3d1x_test(test_bitmap_surface);
+    queue_d3d1x_test(test_device_context);
     queue_test(test_invert_matrix);
     queue_test(test_skew_matrix);
-    queue_test(test_command_list);
+    queue_d3d1x_test(test_command_list);
     queue_test(test_max_bitmap_size);
-    queue_test(test_dpi);
-    queue_test(test_wic_bitmap_format);
+    queue_d3d1x_test(test_dpi);
+    queue_d3d1x_test(test_wic_bitmap_format);
     queue_test(test_math);
 
     run_queued_tests();
-- 
2.29.2




More information about the wine-devel mailing list