From e6c0dc5cd59fb18b62b36b988fd24f9bcc23a6bb Mon Sep 17 00:00:00 2001 From: David Hedberg Date: Wed, 5 Sep 2007 16:58:33 +0200 Subject: ddraw/tests: Check deviceGUID of enumerated devices. --- dlls/ddraw/tests/d3d.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 46 insertions(+), 0 deletions(-) diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c index 054df51..c9d2af4 100644 --- a/dlls/ddraw/tests/d3d.c +++ b/dlls/ddraw/tests/d3d.c @@ -33,6 +33,14 @@ static LPDIRECT3DVERTEXBUFFER7 lpVBufSrc = NULL; static LPDIRECT3DVERTEXBUFFER7 lpVBufDest1 = NULL; static LPDIRECT3DVERTEXBUFFER7 lpVBufDest2 = NULL; +typedef struct { + int total; + int rgb; + int hal; + int tnlhal; + int unk; +} D3D7ETest; + /* To compare bad floating point numbers. Not the ideal way to do it, * but it should be enough for here */ #define comparefloat(a, b) ( (((a) - (b)) < 0.0001) && (((a) - (b)) > -0.0001) ) @@ -789,6 +797,43 @@ static HRESULT WINAPI enumDevicesCallback(GUID *Guid,LPSTR DeviceDescription,LPS return DDENUMRET_OK; } +static HRESULT WINAPI enumDevicesCallbackTest7(LPSTR DeviceDescription, LPSTR DeviceName, LPD3DDEVICEDESC7 lpdd7, D3D7ETest *d3d7et) +{ + if(!memcmp(&lpdd7->deviceGUID, &IID_IDirect3DRGBDevice, sizeof(IID_IDirect3DRGBDevice))) + d3d7et->rgb++; + else if(!memcmp(&lpdd7->deviceGUID, &IID_IDirect3DHALDevice, sizeof(IID_IDirect3DHALDevice))) + d3d7et->hal++; + else if(!memcmp(&lpdd7->deviceGUID, &IID_IDirect3DTnLHalDevice, sizeof(IID_IDirect3DTnLHalDevice))) + d3d7et->tnlhal++; + else + d3d7et->unk++; + + d3d7et->total++; + + return DDENUMRET_OK; +} + + +/* Check the deviceGUID of devices enumerated by + IDirect3D7_EnumDevices. */ +static void D3D7EnumTest(void) +{ + D3D7ETest d3d7et; + + if (!lpD3D) { + skip("Direct3D7 interface.\n"); + return; + } + + memset(&d3d7et, 0, sizeof(d3d7et)); + IDirect3D7_EnumDevices(lpD3D, (LPD3DENUMDEVICESCALLBACK7) enumDevicesCallbackTest7, &d3d7et); + + /* A couple of games (Delta Force LW and TFD) rely on this behaviour */ + ok(d3d7et.tnlhal < d3d7et.total, "TnLHal device enumerated as only device.\n"); + + return; +} + static void CapsTest(void) { IDirect3D3 *d3d3; @@ -1221,6 +1266,7 @@ START_TEST(d3d) StateTest(); SceneTest(); LimitTest(); + D3D7EnumTest(); CapsTest(); ReleaseDirect3D(); Direct3D1Test(); -- 1.5.3