[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