ddraw/tests: Rewrite FindDevice().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
453e47d910
commit
8a66164f89
|
@ -1612,143 +1612,6 @@ static void VertexBufferLockRest(void)
|
||||||
IDirect3DVertexBuffer7_Release(buffer);
|
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)
|
static void BackBuffer3DCreateSurfaceTest(void)
|
||||||
{
|
{
|
||||||
DDSURFACEDESC ddsd;
|
DDSURFACEDESC ddsd;
|
||||||
|
@ -2390,7 +2253,6 @@ START_TEST(d3d)
|
||||||
Direct3D1Test();
|
Direct3D1Test();
|
||||||
TextureLoadTest();
|
TextureLoadTest();
|
||||||
ViewportTest();
|
ViewportTest();
|
||||||
FindDevice();
|
|
||||||
BackBuffer3DCreateSurfaceTest();
|
BackBuffer3DCreateSurfaceTest();
|
||||||
BackBuffer3DAttachmentTest();
|
BackBuffer3DAttachmentTest();
|
||||||
test_get_caps1();
|
test_get_caps1();
|
||||||
|
|
|
@ -11713,6 +11713,111 @@ static void test_viewport(void)
|
||||||
DestroyWindow(window);
|
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)
|
START_TEST(ddraw1)
|
||||||
{
|
{
|
||||||
DDDEVICEIDENTIFIER identifier;
|
DDDEVICEIDENTIFIER identifier;
|
||||||
|
@ -11817,4 +11922,5 @@ START_TEST(ddraw1)
|
||||||
test_enum_surfaces();
|
test_enum_surfaces();
|
||||||
test_execute_data();
|
test_execute_data();
|
||||||
test_viewport();
|
test_viewport();
|
||||||
|
test_find_device();
|
||||||
}
|
}
|
||||||
|
|
|
@ -12995,6 +12995,111 @@ static void test_viewport(void)
|
||||||
DestroyWindow(window);
|
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)
|
START_TEST(ddraw2)
|
||||||
{
|
{
|
||||||
DDDEVICEIDENTIFIER identifier;
|
DDDEVICEIDENTIFIER identifier;
|
||||||
|
@ -13107,4 +13212,5 @@ START_TEST(ddraw2)
|
||||||
test_clear();
|
test_clear();
|
||||||
test_enum_surfaces();
|
test_enum_surfaces();
|
||||||
test_viewport();
|
test_viewport();
|
||||||
|
test_find_device();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15089,6 +15089,109 @@ static void test_viewport(void)
|
||||||
DestroyWindow(window);
|
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)
|
START_TEST(ddraw4)
|
||||||
{
|
{
|
||||||
DDDEVICEIDENTIFIER identifier;
|
DDDEVICEIDENTIFIER identifier;
|
||||||
|
@ -15215,4 +15318,5 @@ START_TEST(ddraw4)
|
||||||
test_clear();
|
test_clear();
|
||||||
test_enum_surfaces();
|
test_enum_surfaces();
|
||||||
test_viewport();
|
test_viewport();
|
||||||
|
test_find_device();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue