Henri Verbeet : dxgi/tests: Don't reuse the device.

Alexandre Julliard julliard at winehq.org
Mon Feb 10 13:06:56 CST 2014


Module: wine
Branch: master
Commit: 4d7bd4ce4a02d59bf79f3b9af3f37edecfb95bfc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4d7bd4ce4a02d59bf79f3b9af3f37edecfb95bfc

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Feb 10 10:37:55 2014 +0100

dxgi/tests: Don't reuse the device.

---

 dlls/dxgi/tests/device.c |   98 ++++++++++++++++++++++++++++++++++------------
 1 file changed, 74 insertions(+), 24 deletions(-)

diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c
index e8d2827..b907a23 100644
--- a/dlls/dxgi/tests/device.c
+++ b/dlls/dxgi/tests/device.c
@@ -44,11 +44,19 @@ success:
     return dxgi_device;
 }
 
-static void test_device_interfaces(IDXGIDevice *device)
+static void test_device_interfaces(void)
 {
+    IDXGIDevice *device;
+    ULONG refcount;
     IUnknown *obj;
     HRESULT hr;
 
+    if (!(device = create_device()))
+    {
+        skip("Failed to create device, skipping tests.\n");
+        return;
+    }
+
     if (SUCCEEDED(hr = IDXGIDevice_QueryInterface(device, &IID_IUnknown, (void **)&obj)))
         IUnknown_Release(obj);
     ok(SUCCEEDED(hr), "IDXGIDevice does not implement IUnknown\n");
@@ -64,16 +72,27 @@ static void test_device_interfaces(IDXGIDevice *device)
     if (SUCCEEDED(hr = IDXGIDevice_QueryInterface(device, &IID_ID3D10Device, (void **)&obj)))
         IUnknown_Release(obj);
     ok(SUCCEEDED(hr), "IDXGIDevice does not implement ID3D10Device\n");
+
+    refcount = IDXGIDevice_Release(device);
+    ok(!refcount, "Device has %u references left.\n", refcount);
 }
 
-static void test_adapter_desc(IDXGIDevice *device)
+static void test_adapter_desc(void)
 {
     DXGI_ADAPTER_DESC1 desc1;
     IDXGIAdapter1 *adapter1;
     DXGI_ADAPTER_DESC desc;
     IDXGIAdapter *adapter;
+    IDXGIDevice *device;
+    ULONG refcount;
     HRESULT hr;
 
+    if (!(device = create_device()))
+    {
+        skip("Failed to create device, skipping tests.\n");
+        return;
+    }
+
     hr = IDXGIDevice_GetAdapter(device, &adapter);
     ok(SUCCEEDED(hr), "GetAdapter failed, hr %#x.\n", hr);
 
@@ -123,15 +142,25 @@ static void test_adapter_desc(IDXGIDevice *device)
 
 done:
     IDXGIAdapter_Release(adapter);
+    refcount = IDXGIDevice_Release(device);
+    ok(!refcount, "Device has %u references left.\n", refcount);
 }
 
-static void test_create_surface(IDXGIDevice *device)
+static void test_create_surface(void)
 {
     ID3D10Texture2D *texture;
     IDXGISurface *surface;
     DXGI_SURFACE_DESC desc;
+    IDXGIDevice *device;
+    ULONG refcount;
     HRESULT hr;
 
+    if (!(device = create_device()))
+    {
+        skip("Failed to create device, skipping tests.\n");
+        return;
+    }
+
     desc.Width = 512;
     desc.Height = 512;
     desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
@@ -146,18 +175,28 @@ static void test_create_surface(IDXGIDevice *device)
     if (SUCCEEDED(hr)) ID3D10Texture2D_Release(texture);
 
     IDXGISurface_Release(surface);
+    refcount = IDXGIDevice_Release(device);
+    ok(!refcount, "Device has %u references left.\n", refcount);
 }
 
-static void test_parents(IDXGIDevice *device)
+static void test_parents(void)
 {
     DXGI_SURFACE_DESC surface_desc;
     IDXGISurface *surface;
     IDXGIFactory *factory;
     IDXGIAdapter *adapter;
+    IDXGIDevice *device;
     IDXGIOutput *output;
     IUnknown *parent;
+    ULONG refcount;
     HRESULT hr;
 
+    if (!(device = create_device()))
+    {
+        skip("Failed to create device, skipping tests.\n");
+        return;
+    }
+
     surface_desc.Width = 512;
     surface_desc.Height = 512;
     surface_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
@@ -206,16 +245,26 @@ static void test_parents(IDXGIDevice *device)
     IUnknown_Release(parent);
 
     IDXGIAdapter_Release(adapter);
+    refcount = IDXGIDevice_Release(device);
+    ok(!refcount, "Device has %u references left.\n", refcount);
 }
 
-static void test_output(IDXGIDevice *device)
+static void test_output(void)
 {
     IDXGIAdapter *adapter;
+    IDXGIDevice *device;
     HRESULT hr;
     IDXGIOutput *output;
+    ULONG refcount;
     UINT mode_count, mode_count_comp, i;
     DXGI_MODE_DESC *modes;
 
+    if (!(device = create_device()))
+    {
+        skip("Failed to create device, skipping tests.\n");
+        return;
+    }
+
     hr = IDXGIDevice_GetAdapter(device, &adapter);
     ok(SUCCEEDED(hr), "GetAdapter failed, hr %#x.\n", hr);
 
@@ -224,6 +273,7 @@ static void test_output(IDXGIDevice *device)
     {
         skip("Adapter doesn't have any outputs, skipping tests.\n");
         IDXGIAdapter_Release(adapter);
+        IDXGIDevice_Release(device);
         return;
     }
     ok(SUCCEEDED(hr), "EnumOutputs failed, hr %#x.\n", hr);
@@ -240,6 +290,7 @@ static void test_output(IDXGIDevice *device)
         skip("GetDisplayModeList() not supported, skipping tests.\n");
         IDXGIOutput_Release(output);
         IDXGIAdapter_Release(adapter);
+        IDXGIDevice_Release(device);
         return;
     }
     mode_count_comp = mode_count;
@@ -301,6 +352,8 @@ static void test_output(IDXGIDevice *device)
     HeapFree(GetProcessHeap(), 0, modes);
     IDXGIOutput_Release(output);
     IDXGIAdapter_Release(adapter);
+    refcount = IDXGIDevice_Release(device);
+    ok(!refcount, "Device has %u references left.\n", refcount);
 }
 
 struct refresh_rates
@@ -311,11 +364,13 @@ struct refresh_rates
     BOOL denominator_should_pass;
 };
 
-static void test_createswapchain(IDXGIDevice *device)
+static void test_createswapchain(void)
 {
     IUnknown *obj;
     IDXGIAdapter *adapter;
     IDXGIFactory *factory;
+    IDXGIDevice *device;
+    ULONG refcount;
     IDXGISwapChain *swapchain;
     DXGI_SWAP_CHAIN_DESC creation_desc, result_desc;
     HRESULT hr;
@@ -331,6 +386,11 @@ static void test_createswapchain(IDXGIDevice *device)
         { 0,  0,  TRUE, FALSE},
     };
 
+    if (!(device = create_device()))
+    {
+        skip("Failed to create device, skipping tests.\n");
+        return;
+    }
 
     wc.lpfnWndProc = DefWindowProcA;
     wc.lpszClassName = "dxgi_test_wc";
@@ -435,26 +495,16 @@ static void test_createswapchain(IDXGIDevice *device)
     IDXGIFactory_Release(factory);
     IDXGIAdapter_Release(adapter);
     IUnknown_Release(obj);
+    refcount = IDXGIDevice_Release(device);
+    ok(!refcount, "Device has %u references left.\n", refcount);
 }
 
 START_TEST(device)
 {
-    IDXGIDevice *device;
-    ULONG refcount;
-
-    if (!(device = create_device()))
-    {
-        skip("Failed to create device, skipping tests\n");
-        return;
-    }
-
-    test_adapter_desc(device);
-    test_device_interfaces(device);
-    test_create_surface(device);
-    test_parents(device);
-    test_output(device);
-    test_createswapchain(device);
-
-    refcount = IDXGIDevice_Release(device);
-    ok(!refcount, "Device has %u references left\n", refcount);
+    test_adapter_desc();
+    test_device_interfaces();
+    test_create_surface();
+    test_parents();
+    test_output();
+    test_createswapchain();
 }




More information about the wine-cvs mailing list