[PATCH 1/4] ddraw/tests: Rewrite FindDevice().

Henri Verbeet hverbeet at codeweavers.com
Tue Sep 11 09:09:25 CDT 2018


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/ddraw/tests/d3d.c    | 138 ----------------------------------------------
 dlls/ddraw/tests/ddraw1.c | 106 +++++++++++++++++++++++++++++++++++
 dlls/ddraw/tests/ddraw2.c | 106 +++++++++++++++++++++++++++++++++++
 dlls/ddraw/tests/ddraw4.c | 104 ++++++++++++++++++++++++++++++++++
 4 files changed, 316 insertions(+), 138 deletions(-)

diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c
index ec0f8d715ca..64f68fde560 100644
--- a/dlls/ddraw/tests/d3d.c
+++ b/dlls/ddraw/tests/d3d.c
@@ -1612,143 +1612,6 @@ static void VertexBufferLockRest(void)
     IDirect3DVertexBuffer7_Release(buffer);
 }
 
-static void FindDevice(void)
-{
-    static const struct
-    {
-        const GUID *guid;
-        BOOL todo;
-    } deviceGUIDs[] =
-    {
-        {&IID_IDirect3DRampDevice, TRUE},
-        {&IID_IDirect3DRGBDevice,  FALSE},
-    };
-
-    static const GUID *nonexistent_deviceGUIDs[] = {&IID_IDirect3DMMXDevice,
-                                                    &IID_IDirect3DRefDevice,
-                                                    &IID_IDirect3DTnLHalDevice,
-                                                    &IID_IDirect3DNullDevice};
-
-    D3DFINDDEVICESEARCH search = {0};
-    D3DFINDDEVICERESULT result = {0};
-    IDirect3DDevice *d3dhal;
-    HRESULT hr;
-    int i;
-
-    /* Test invalid parameters. */
-    hr = IDirect3D_FindDevice(Direct3D1, NULL, NULL);
-    ok(hr == DDERR_INVALIDPARAMS,
-       "Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
-
-    hr = IDirect3D_FindDevice(Direct3D1, NULL, &result);
-    ok(hr == DDERR_INVALIDPARAMS,
-       "Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
-
-    hr = IDirect3D_FindDevice(Direct3D1, &search, NULL);
-    ok(hr == DDERR_INVALIDPARAMS,
-       "Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
-
-    search.dwSize = 0;
-    result.dwSize = 0;
-
-    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
-    ok(hr == DDERR_INVALIDPARAMS,
-       "Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
-
-    search.dwSize = sizeof(search) + 1;
-    result.dwSize = sizeof(result) + 1;
-
-    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
-    ok(hr == DDERR_INVALIDPARAMS,
-       "Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
-
-    /* Specifying no flags is permitted. */
-    search.dwSize = sizeof(search);
-    search.dwFlags = 0;
-    result.dwSize = sizeof(result);
-
-    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
-    ok(hr == D3D_OK,
-       "Expected IDirect3D1::FindDevice to return D3D_OK, got 0x%08x\n", hr);
-
-    /* Try an arbitrary non-device GUID. */
-    search.dwSize = sizeof(search);
-    search.dwFlags = D3DFDS_GUID;
-    search.guid = IID_IDirect3D;
-    result.dwSize = sizeof(result);
-
-    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
-    ok(hr == DDERR_NOTFOUND,
-       "Expected IDirect3D1::FindDevice to return DDERR_NOTFOUND, got 0x%08x\n", hr);
-
-    /* These GUIDs appear to be never present. */
-    for (i = 0; i < sizeof(nonexistent_deviceGUIDs)/sizeof(nonexistent_deviceGUIDs[0]); i++)
-    {
-        search.dwSize = sizeof(search);
-        search.dwFlags = D3DFDS_GUID;
-        search.guid = *nonexistent_deviceGUIDs[i];
-        result.dwSize = sizeof(result);
-
-        hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
-        ok(hr == DDERR_NOTFOUND,
-           "[%d] Expected IDirect3D1::FindDevice to return DDERR_NOTFOUND, got 0x%08x\n", i, hr);
-    }
-
-    /* The HAL device can only be enumerated if hardware acceleration is present. */
-    search.dwSize = sizeof(search);
-    search.dwFlags = D3DFDS_GUID;
-    search.guid = IID_IDirect3DHALDevice;
-    result.dwSize = sizeof(result);
-
-    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
-    trace("IDirect3D::FindDevice returned 0x%08x for the HAL device GUID\n", hr);
-    if (SUCCEEDED(hr))
-    {
-        hr = IDirectDrawSurface_QueryInterface(Surface1, &IID_IDirect3DHALDevice, (void **)&d3dhal);
-        /* Currently Wine only supports the creation of one Direct3D device
-         * for a given DirectDraw instance. */
-        ok(SUCCEEDED(hr) || broken(hr == DDERR_INVALIDPIXELFORMAT) /* XP/Win2003 Wow64 on VMware */,
-           "Expected IDirectDrawSurface::QueryInterface to succeed, got 0x%08x\n", hr);
-
-        if (SUCCEEDED(hr))
-            IDirect3DDevice_Release(d3dhal);
-    }
-    else
-    {
-        hr = IDirectDrawSurface_QueryInterface(Surface1, &IID_IDirect3DHALDevice, (void **)&d3dhal);
-        ok(FAILED(hr), "Expected IDirectDrawSurface::QueryInterface to fail, got 0x%08x\n", hr);
-
-        if (SUCCEEDED(hr))
-            IDirect3DDevice_Release(d3dhal);
-    }
-
-    /* These GUIDs appear to be always present. */
-    for (i = 0; i < sizeof(deviceGUIDs)/sizeof(deviceGUIDs[0]); i++)
-    {
-        search.dwSize = sizeof(search);
-        search.dwFlags = D3DFDS_GUID;
-        search.guid = *deviceGUIDs[i].guid;
-        result.dwSize = sizeof(result);
-
-        hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
-
-        todo_wine_if (deviceGUIDs[i].todo)
-            ok(hr == D3D_OK,
-               "[%d] Expected IDirect3D1::FindDevice to return D3D_OK, got 0x%08x\n", i, hr);
-    }
-
-    /* Curiously the color model criteria seem to be ignored. */
-    search.dwSize = sizeof(search);
-    search.dwFlags = D3DFDS_COLORMODEL;
-    search.dcmColorModel = 0xdeadbeef;
-    result.dwSize = sizeof(result);
-
-    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
-    todo_wine
-    ok(hr == D3D_OK,
-       "Expected IDirect3D1::FindDevice to return D3D_OK, got 0x%08x\n", hr);
-}
-
 static void BackBuffer3DCreateSurfaceTest(void)
 {
     DDSURFACEDESC ddsd;
@@ -2390,7 +2253,6 @@ START_TEST(d3d)
         Direct3D1Test();
         TextureLoadTest();
         ViewportTest();
-        FindDevice();
         BackBuffer3DCreateSurfaceTest();
         BackBuffer3DAttachmentTest();
         test_get_caps1();
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index d4fe1f294af..641847aa38d 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -11713,6 +11713,111 @@ static void test_viewport(void)
     DestroyWindow(window);
 }
 
+static void test_find_device(void)
+{
+    D3DFINDDEVICESEARCH search = {0};
+    D3DFINDDEVICERESULT result = {0};
+    IDirect3DDevice *device;
+    IDirectDraw *ddraw;
+    IDirect3D *d3d;
+    unsigned int i;
+    HWND window;
+    HRESULT hr;
+
+    static const struct
+    {
+        const GUID *guid;
+        HRESULT hr;
+        BOOL todo;
+    }
+    tests[] =
+    {
+        {&IID_IDirect3D,             DDERR_NOTFOUND},
+        {&IID_IDirect3DRampDevice,   D3D_OK, TRUE},
+        {&IID_IDirect3DRGBDevice,    D3D_OK},
+        {&IID_IDirect3DMMXDevice,    DDERR_NOTFOUND},
+        {&IID_IDirect3DRefDevice,    DDERR_NOTFOUND},
+        {&IID_IDirect3DTnLHalDevice, DDERR_NOTFOUND},
+        {&IID_IDirect3DNullDevice,   DDERR_NOTFOUND},
+    };
+
+    ddraw = create_ddraw();
+    ok(!!ddraw, "Failed to create a ddraw object.\n");
+
+    if (FAILED(IDirectDraw_QueryInterface(ddraw, &IID_IDirect3D, (void **)&d3d)))
+    {
+        skip("D3D interface is not available, skipping test.\n");
+        IDirectDraw_Release(ddraw);
+        return;
+    }
+
+    result.dwSize = sizeof(result);
+    search.dwSize = sizeof(search);
+    hr = IDirect3D_FindDevice(d3d, NULL, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D_FindDevice(d3d, NULL, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D_FindDevice(d3d, &search, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D_FindDevice(d3d, &search, &result);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+    ok(result.dwSize == sizeof(result), "Got unexpected result size %u.\n", result.dwSize);
+
+    memset(&search, 0, sizeof(search));
+    memset(&result, 0, sizeof(result));
+    hr = IDirect3D_FindDevice(d3d, &search, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+
+    search.dwSize = sizeof(search) + 1;
+    result.dwSize = sizeof(result) + 1;
+    hr = IDirect3D_FindDevice(d3d, &search, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+
+    for (i = 0; i < ARRAY_SIZE(tests); ++i)
+    {
+        memset(&search, 0, sizeof(search));
+        search.dwSize = sizeof(search);
+        search.dwFlags = D3DFDS_GUID;
+        search.guid = *tests[i].guid;
+
+        memset(&result, 0, sizeof(result));
+        result.dwSize = sizeof(result);
+
+        hr = IDirect3D_FindDevice(d3d, &search, &result);
+        todo_wine_if(tests[i].todo)
+            ok(hr == tests[i].hr, "Test %u: Got unexpected hr %#x.\n", i, hr);
+        ok(result.dwSize == sizeof(result), "Test %u: Got unexpected result size %u.\n", i, result.dwSize);
+    }
+
+    /* The HAL device can only be enumerated if hardware acceleration is present. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = D3DFDS_GUID;
+    search.guid = IID_IDirect3DHALDevice;
+    result.dwSize = sizeof(result);
+    hr = IDirect3D_FindDevice(d3d, &search, &result);
+
+    window = create_window();
+    device = create_device(ddraw, window, DDSCL_NORMAL);
+    if (hr == D3D_OK)
+        ok(!!device, "Failed to create a 3D device.\n");
+    else
+        ok(!device, "Succeeded to create a 3D device.\n");
+    if (device)
+        IDirect3DDevice_Release(device);
+    DestroyWindow(window);
+
+    /* Curiously the colour model criteria seem to be ignored. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = D3DFDS_COLORMODEL;
+    search.dcmColorModel = 0xdeadbeef;
+    result.dwSize = sizeof(result);
+    hr = IDirect3D_FindDevice(d3d, &search, &result);
+    todo_wine ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    IDirect3D_Release(d3d);
+    IDirectDraw_Release(ddraw);
+}
+
 START_TEST(ddraw1)
 {
     DDDEVICEIDENTIFIER identifier;
@@ -11817,4 +11922,5 @@ START_TEST(ddraw1)
     test_enum_surfaces();
     test_execute_data();
     test_viewport();
+    test_find_device();
 }
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index 941d46bf42c..02f430afa1a 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -12995,6 +12995,111 @@ static void test_viewport(void)
     DestroyWindow(window);
 }
 
+static void test_find_device(void)
+{
+    D3DFINDDEVICESEARCH search = {0};
+    D3DFINDDEVICERESULT result = {0};
+    IDirect3DDevice2 *device;
+    IDirectDraw2 *ddraw;
+    IDirect3D2 *d3d;
+    unsigned int i;
+    HWND window;
+    HRESULT hr;
+
+    static const struct
+    {
+        const GUID *guid;
+        HRESULT hr;
+        BOOL todo;
+    }
+    tests[] =
+    {
+        {&IID_IDirect3D,             DDERR_NOTFOUND},
+        {&IID_IDirect3DRampDevice,   D3D_OK, TRUE},
+        {&IID_IDirect3DRGBDevice,    D3D_OK},
+        {&IID_IDirect3DMMXDevice,    D3D_OK, TRUE},
+        {&IID_IDirect3DRefDevice,    DDERR_NOTFOUND},
+        {&IID_IDirect3DTnLHalDevice, DDERR_NOTFOUND},
+        {&IID_IDirect3DNullDevice,   DDERR_NOTFOUND},
+    };
+
+    ddraw = create_ddraw();
+    ok(!!ddraw, "Failed to create a ddraw object.\n");
+
+    if (FAILED(IDirectDraw2_QueryInterface(ddraw, &IID_IDirect3D2, (void **)&d3d)))
+    {
+        skip("D3D interface is not available, skipping test.\n");
+        IDirectDraw2_Release(ddraw);
+        return;
+    }
+
+    result.dwSize = sizeof(result);
+    search.dwSize = sizeof(search);
+    hr = IDirect3D2_FindDevice(d3d, NULL, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D2_FindDevice(d3d, NULL, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D2_FindDevice(d3d, &search, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D2_FindDevice(d3d, &search, &result);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+    ok(result.dwSize == sizeof(result), "Got unexpected result size %u.\n", result.dwSize);
+
+    memset(&search, 0, sizeof(search));
+    memset(&result, 0, sizeof(result));
+    hr = IDirect3D2_FindDevice(d3d, &search, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+
+    search.dwSize = sizeof(search) + 1;
+    result.dwSize = sizeof(result) + 1;
+    hr = IDirect3D2_FindDevice(d3d, &search, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+
+    for (i = 0; i < ARRAY_SIZE(tests); ++i)
+    {
+        memset(&search, 0, sizeof(search));
+        search.dwSize = sizeof(search);
+        search.dwFlags = D3DFDS_GUID;
+        search.guid = *tests[i].guid;
+
+        memset(&result, 0, sizeof(result));
+        result.dwSize = sizeof(result);
+
+        hr = IDirect3D2_FindDevice(d3d, &search, &result);
+        todo_wine_if(tests[i].todo)
+            ok(hr == tests[i].hr, "Test %u: Got unexpected hr %#x.\n", i, hr);
+        ok(result.dwSize == sizeof(result), "Test %u: Got unexpected result size %u.\n", i, result.dwSize);
+    }
+
+    /* The HAL device can only be enumerated if hardware acceleration is present. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = D3DFDS_GUID;
+    search.guid = IID_IDirect3DHALDevice;
+    result.dwSize = sizeof(result);
+    hr = IDirect3D2_FindDevice(d3d, &search, &result);
+
+    window = create_window();
+    device = create_device(ddraw, window, DDSCL_NORMAL);
+    if (hr == D3D_OK)
+        ok(!!device, "Failed to create a 3D device.\n");
+    else
+        ok(!device, "Succeeded to create a 3D device.\n");
+    if (device)
+        IDirect3DDevice2_Release(device);
+    DestroyWindow(window);
+
+    /* Curiously the colour model criteria seem to be ignored. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = D3DFDS_COLORMODEL;
+    search.dcmColorModel = 0xdeadbeef;
+    result.dwSize = sizeof(result);
+    hr = IDirect3D2_FindDevice(d3d, &search, &result);
+    todo_wine ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    IDirect3D2_Release(d3d);
+    IDirectDraw2_Release(ddraw);
+}
+
 START_TEST(ddraw2)
 {
     DDDEVICEIDENTIFIER identifier;
@@ -13107,4 +13212,5 @@ START_TEST(ddraw2)
     test_clear();
     test_enum_surfaces();
     test_viewport();
+    test_find_device();
 }
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index e81472d4f2b..942d0253c46 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -15089,6 +15089,109 @@ static void test_viewport(void)
     DestroyWindow(window);
 }
 
+static void test_find_device(void)
+{
+    D3DFINDDEVICESEARCH search = {0};
+    D3DFINDDEVICERESULT result = {0};
+    IDirect3DDevice3 *device;
+    IDirectDraw4 *ddraw;
+    IDirect3D3 *d3d;
+    unsigned int i;
+    HWND window;
+    HRESULT hr;
+
+    static const struct
+    {
+        const GUID *guid;
+        HRESULT hr;
+    }
+    tests[] =
+    {
+        {&IID_IDirect3D,             DDERR_NOTFOUND},
+        {&IID_IDirect3DRampDevice,   DDERR_NOTFOUND},
+        {&IID_IDirect3DRGBDevice,    D3D_OK},
+        {&IID_IDirect3DMMXDevice,    DDERR_NOTFOUND},
+        {&IID_IDirect3DRefDevice,    DDERR_NOTFOUND},
+        {&IID_IDirect3DTnLHalDevice, DDERR_NOTFOUND},
+        {&IID_IDirect3DNullDevice,   DDERR_NOTFOUND},
+    };
+
+    ddraw = create_ddraw();
+    ok(!!ddraw, "Failed to create a ddraw object.\n");
+
+    if (FAILED(IDirectDraw4_QueryInterface(ddraw, &IID_IDirect3D3, (void **)&d3d)))
+    {
+        skip("D3D interface is not available, skipping test.\n");
+        IDirectDraw4_Release(ddraw);
+        return;
+    }
+
+    result.dwSize = sizeof(result);
+    search.dwSize = sizeof(search);
+    hr = IDirect3D3_FindDevice(d3d, NULL, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D3_FindDevice(d3d, NULL, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D3_FindDevice(d3d, &search, NULL);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+    hr = IDirect3D3_FindDevice(d3d, &search, &result);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+    ok(result.dwSize == sizeof(result), "Got unexpected result size %u.\n", result.dwSize);
+
+    memset(&search, 0, sizeof(search));
+    memset(&result, 0, sizeof(result));
+    hr = IDirect3D3_FindDevice(d3d, &search, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+
+    search.dwSize = sizeof(search) + 1;
+    result.dwSize = sizeof(result) + 1;
+    hr = IDirect3D3_FindDevice(d3d, &search, &result);
+    ok(hr == DDERR_INVALIDPARAMS, "Got unexpected hr %#x.\n", hr);
+
+    for (i = 0; i < ARRAY_SIZE(tests); ++i)
+    {
+        memset(&search, 0, sizeof(search));
+        search.dwSize = sizeof(search);
+        search.dwFlags = D3DFDS_GUID;
+        search.guid = *tests[i].guid;
+
+        memset(&result, 0, sizeof(result));
+        result.dwSize = sizeof(result);
+
+        hr = IDirect3D3_FindDevice(d3d, &search, &result);
+        ok(hr == tests[i].hr, "Test %u: Got unexpected hr %#x.\n", i, hr);
+        ok(result.dwSize == sizeof(result), "Test %u: Got unexpected result size %u.\n", i, result.dwSize);
+    }
+
+    /* The HAL device can only be enumerated if hardware acceleration is present. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = D3DFDS_GUID;
+    search.guid = IID_IDirect3DHALDevice;
+    result.dwSize = sizeof(result);
+    hr = IDirect3D3_FindDevice(d3d, &search, &result);
+
+    window = create_window();
+    device = create_device(window, DDSCL_NORMAL);
+    if (hr == D3D_OK)
+        ok(!!device, "Failed to create a 3D device.\n");
+    else
+        ok(!device, "Succeeded to create a 3D device.\n");
+    if (device)
+        IDirect3DDevice3_Release(device);
+    DestroyWindow(window);
+
+    /* Curiously the colour model criteria seem to be ignored. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = D3DFDS_COLORMODEL;
+    search.dcmColorModel = 0xdeadbeef;
+    result.dwSize = sizeof(result);
+    hr = IDirect3D3_FindDevice(d3d, &search, &result);
+    todo_wine ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    IDirect3D3_Release(d3d);
+    IDirectDraw4_Release(ddraw);
+}
+
 START_TEST(ddraw4)
 {
     DDDEVICEIDENTIFIER identifier;
@@ -15215,4 +15318,5 @@ START_TEST(ddraw4)
     test_clear();
     test_enum_surfaces();
     test_viewport();
+    test_find_device();
 }
-- 
2.11.0




More information about the wine-devel mailing list