From 57f86bb38bb63e73421918269ec9ed71e6678070 Mon Sep 17 00:00:00 2001 From: Maarten Bosma Date: Sun, 13 May 2007 12:09:44 +0000 Subject: [PATCH] Add debugging macro to get error code and test for display modes (commented out because it checks every single display mode and thus takes fairly long). svn path=/trunk/; revision=26750 --- rostests/dxtest/ddraw/debug.cpp | 111 +++++++++++++++++++ rostests/dxtest/ddraw/testlist.cpp | 5 +- rostests/dxtest/ddraw/tests/CreateDDraw.cpp | 6 +- rostests/dxtest/ddraw/tests/DisplayModes.cpp | 55 +++++++++ 4 files changed, 173 insertions(+), 4 deletions(-) create mode 100644 rostests/dxtest/ddraw/debug.cpp create mode 100644 rostests/dxtest/ddraw/tests/DisplayModes.cpp diff --git a/rostests/dxtest/ddraw/debug.cpp b/rostests/dxtest/ddraw/debug.cpp new file mode 100644 index 00000000000..423cd91c9f3 --- /dev/null +++ b/rostests/dxtest/ddraw/debug.cpp @@ -0,0 +1,111 @@ + +#define GetCode(X) printf("%s\n", DDErrorString(X)); + +PCHAR DDErrorString (HRESULT hResult) +{ + switch (hResult) + { + case DD_OK: return "DD_OK"; + case DDERR_ALREADYINITIALIZED: return "DDERR_ALREADYINITIALIZED"; + case DDERR_CANNOTATTACHSURFACE: return "DDERR_CANNOTATTACHSURFACE"; + case DDERR_CANNOTDETACHSURFACE: return "DDERR_CANNOTDETACHSURFACE"; + case DDERR_CURRENTLYNOTAVAIL: return "DDERR_CURRENTLYNOTAVAIL"; + case DDERR_EXCEPTION: return "DDERR_EXCEPTION"; + case DDERR_GENERIC: return "DDERR_GENERIC"; + case DDERR_HEIGHTALIGN: return "DDERR_HEIGHTALIGN"; + case DDERR_INCOMPATIBLEPRIMARY: return "DDERR_INCOMPATIBLEPRIMARY"; + case DDERR_INVALIDCAPS: return "DDERR_INVALIDCAPS"; + case DDERR_INVALIDCLIPLIST: return "DDERR_INVALIDCLIPLIST"; + case DDERR_INVALIDMODE: return "DDERR_INVALIDMODE"; + case DDERR_INVALIDOBJECT: return "DDERR_INVALIDOBJECT"; + case DDERR_INVALIDPARAMS: return "DDERR_INVALIDPARAMS"; + case DDERR_INVALIDPIXELFORMAT: return "DDERR_INVALIDPIXELFORMAT"; + case DDERR_INVALIDRECT: return "DDERR_INVALIDRECT"; + case DDERR_LOCKEDSURFACES: return "DDERR_LOCKEDSURFACES"; + case DDERR_NO3D: return "DDERR_NO3D"; + case DDERR_NOALPHAHW: return "DDERR_NOALPHAHW"; + case DDERR_NOCLIPLIST: return "DDERR_NOCLIPLIST"; + case DDERR_NOCOLORCONVHW: return "DDERR_NOCOLORCONVHW"; + case DDERR_NOCOOPERATIVELEVELSET: return "DDERR_NOCOOPERATIVELEVELSET"; + case DDERR_NOCOLORKEY: return "DDERR_NOCOLORKEY"; + case DDERR_NOCOLORKEYHW: return "DDERR_NOCOLORKEYHW"; + case DDERR_NODIRECTDRAWSUPPORT: return "DDERR_NODIRECTDRAWSUPPORT"; + case DDERR_NOEXCLUSIVEMODE: return "DDERR_NOEXCLUSIVEMODE"; + case DDERR_NOFLIPHW: return "DDERR_NOFLIPHW"; + case DDERR_NOGDI: return "DDERR_NOGDI"; + case DDERR_NOMIRRORHW: return "DDERR_NOMIRRORHW"; + case DDERR_NOTFOUND: return "DDERR_NOTFOUND"; + case DDERR_NOOVERLAYHW: return "DDERR_NOOVERLAYHW"; + case DDERR_NORASTEROPHW: return "DDERR_NORASTEROPHW"; + case DDERR_NOROTATIONHW: return "DDERR_NOROTATIONHW"; + case DDERR_NOSTRETCHHW: return "DDERR_NOSTRETCHHW"; + case DDERR_NOT4BITCOLOR: return "DDERR_NOT4BITCOLOR"; + case DDERR_NOT4BITCOLORINDEX: return "DDERR_NOT4BITCOLORINDEX"; + case DDERR_NOT8BITCOLOR: return "DDERR_NOT8BITCOLOR"; + case DDERR_NOTEXTUREHW: return "DDERR_NOTEXTUREHW"; + case DDERR_NOVSYNCHW: return "DDERR_NOVSYNCHW"; + case DDERR_NOZBUFFERHW: return "DDERR_NOZBUFFERHW"; + case DDERR_NOZOVERLAYHW: return "DDERR_NOZOVERLAYHW"; + case DDERR_OUTOFCAPS: return "DDERR_OUTOFCAPS"; + case DDERR_OUTOFMEMORY: return "DDERR_OUTOFMEMORY"; + case DDERR_OUTOFVIDEOMEMORY: return "DDERR_OUTOFVIDEOMEMORY"; + case DDERR_OVERLAYCANTCLIP: return "DDERR_OVERLAYCANTCLIP"; + case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: return "DDERR_OVERLAYCOLORKEYONLYONEACTIVE"; + case DDERR_PALETTEBUSY: return "DDERR_PALETTEBUSY"; + case DDERR_COLORKEYNOTSET: return "DDERR_COLORKEYNOTSET"; + case DDERR_SURFACEALREADYATTACHED: return "DDERR_SURFACEALREADYATTACHED"; + case DDERR_SURFACEALREADYDEPENDENT: return "DDERR_SURFACEALREADYDEPENDENT"; + case DDERR_SURFACEBUSY: return "DDERR_SURFACEBUSY"; + case DDERR_CANTLOCKSURFACE: return "DDERR_CANTLOCKSURFACE"; + case DDERR_SURFACEISOBSCURED: return "DDERR_SURFACEISOBSCURED"; + case DDERR_SURFACELOST: return "DDERR_SURFACELOST"; + case DDERR_SURFACENOTATTACHED: return "DDERR_SURFACENOTATTACHED"; + case DDERR_TOOBIGHEIGHT: return "DDERR_TOOBIGHEIGHT"; + case DDERR_TOOBIGSIZE: return "DDERR_TOOBIGSIZE"; + case DDERR_TOOBIGWIDTH: return "DDERR_TOOBIGWIDTH"; + case DDERR_UNSUPPORTED: return "DDERR_UNSUPPORTED"; + case DDERR_UNSUPPORTEDFORMAT: return "DDERR_UNSUPPORTEDFORMAT"; + case DDERR_UNSUPPORTEDMASK: return "DDERR_UNSUPPORTEDMASK"; + case DDERR_VERTICALBLANKINPROGRESS: return "DDERR_VERTICALBLANKINPROGRESS"; + case DDERR_WASSTILLDRAWING: return "DDERR_WASSTILLDRAWING"; + case DDERR_XALIGN: return "DDERR_XALIGN"; + case DDERR_INVALIDDIRECTDRAWGUID: return "DDERR_INVALIDDIRECTDRAWGUID"; + case DDERR_DIRECTDRAWALREADYCREATED: return "DDERR_DIRECTDRAWALREADYCREATED"; + case DDERR_NODIRECTDRAWHW: return "DDERR_NODIRECTDRAWHW"; + case DDERR_PRIMARYSURFACEALREADYEXISTS: return "DDERR_PRIMARYSURFACEALREADYEXISTS"; + case DDERR_NOEMULATION: return "DDERR_NOEMULATION"; + case DDERR_REGIONTOOSMALL: return "DDERR_REGIONTOOSMALL"; + case DDERR_CLIPPERISUSINGHWND: return "DDERR_CLIPPERISUSINGHWND"; + case DDERR_NOCLIPPERATTACHED: return "DDERR_NOCLIPPERATTACHED"; + case DDERR_NOHWND: return "DDERR_NOHWND"; + case DDERR_HWNDSUBCLASSED: return "DDERR_HWNDSUBCLASSED"; + case DDERR_HWNDALREADYSET: return "DDERR_HWNDALREADYSET"; + case DDERR_NOPALETTEATTACHED: return "DDERR_NOPALETTEATTACHED"; + case DDERR_NOPALETTEHW: return "DDERR_NOPALETTEHW"; + case DDERR_BLTFASTCANTCLIP: return "DDERR_BLTFASTCANTCLIP"; + case DDERR_NOBLTHW: return "DDERR_NOBLTHW"; + case DDERR_NODDROPSHW: return "DDERR_NODDROPSHW"; + case DDERR_OVERLAYNOTVISIBLE: return "DDERR_OVERLAYNOTVISIBLE"; + case DDERR_NOOVERLAYDEST: return "DDERR_NOOVERLAYDEST"; + case DDERR_INVALIDPOSITION: return "DDERR_INVALIDPOSITION"; + case DDERR_NOTAOVERLAYSURFACE: return "DDERR_NOTAOVERLAYSURFACE"; + case DDERR_EXCLUSIVEMODEALREADYSET: return "DDERR_EXCLUSIVEMODEALREADYSET"; + case DDERR_NOTFLIPPABLE: return "DDERR_NOTFLIPPABLE"; + case DDERR_CANTDUPLICATE: return "DDERR_CANTDUPLICATE"; + case DDERR_NOTLOCKED: return "DDERR_NOTLOCKED"; + case DDERR_CANTCREATEDC: return "DDERR_CANTCREATEDC"; + case DDERR_NODC: return "DDERR_NODC"; + case DDERR_WRONGMODE: return "DDERR_WRONGMODE"; + case DDERR_IMPLICITLYCREATED: return "DDERR_IMPLICITLYCREATED"; + case DDERR_NOTPALETTIZED: return "DDERR_NOTPALETTIZED"; + case DDERR_UNSUPPORTEDMODE: return "DDERR_UNSUPPORTEDMODE"; + case DDERR_NOMIPMAPHW: return "DDERR_NOMIPMAPHW"; + case DDERR_INVALIDSURFACETYPE: return "DDERR_INVALIDSURFACETYPE"; + case DDERR_DCALREADYCREATED: return "DDERR_DCALREADYCREATED"; + case DDERR_CANTPAGELOCK: return "DDERR_CANTPAGELOCK"; + case DDERR_CANTPAGEUNLOCK: return "DDERR_CANTPAGEUNLOCK"; + case DDERR_NOTPAGELOCKED: return "DDERR_NOTPAGELOCKED"; + case DDERR_NOTINITIALIZED: return "DDERR_NOTINITIALIZED"; + } + return "Unknown Error"; +} diff --git a/rostests/dxtest/ddraw/testlist.cpp b/rostests/dxtest/ddraw/testlist.cpp index ce872c25978..1f091f723e3 100644 --- a/rostests/dxtest/ddraw/testlist.cpp +++ b/rostests/dxtest/ddraw/testlist.cpp @@ -2,15 +2,18 @@ #define _DDRAWTESTLIST_H #include "ddrawtest.h" +#include "debug.cpp" /* include the tests */ #include "tests/CreateDDraw.cpp" +#include "tests/DisplayModes.cpp" /* The List of tests */ TEST TestList[] = { { "DirectDrawCreate(Ex)", Test_CreateDDraw }, - { "IDirectDraw::SetCooperativeLevel", Test_SetCooperativeLevel } + { "IDirectDraw::SetCooperativeLevel", Test_SetCooperativeLevel }, + // { "IDirectDraw::EnumDisplayModes/SetDisplayMode", Test_DisplayModes } // uncomment this test if you have enough time and patience }; /* The function that gives us the number of tests */ diff --git a/rostests/dxtest/ddraw/tests/CreateDDraw.cpp b/rostests/dxtest/ddraw/tests/CreateDDraw.cpp index 381b6a7de32..cc17c3c0a1c 100644 --- a/rostests/dxtest/ddraw/tests/CreateDDraw.cpp +++ b/rostests/dxtest/ddraw/tests/CreateDDraw.cpp @@ -7,7 +7,7 @@ BOOL Test_CreateDDraw (INT* passed, INT* failed) LPDIRECTDRAW7 DirectDraw; IDirectDraw* DirectDraw2; - /*** FIXME: Test first parameter ***/ + /*** FIXME: Test first parameter using EnumDisplayDrivers ***/ TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, (IUnknown*)0xdeadbeef) == CLASS_E_NOAGGREGATION); TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw4, NULL) == DDERR_INVALIDPARAMS); @@ -36,16 +36,16 @@ BOOL Test_SetCooperativeLevel (INT* passed, INT* failed) DirectDraw->Release(); return FALSE; } - + /* The Test */ TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_FULLSCREEN) == DDERR_INVALIDPARAMS ); TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE) == DDERR_INVALIDPARAMS ); + TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN) == DDERR_INVALIDPARAMS); TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL | DDSCL_ALLOWMODEX) == DDERR_INVALIDPARAMS ); TEST ( DirectDraw->SetCooperativeLevel ((HWND)0xdeadbeef, DDSCL_NORMAL) == DDERR_INVALIDPARAMS); TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE) == DD_OK); TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWMODEX) == DD_OK); - TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL | DDSCL_FULLSCREEN) == DD_OK); TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_NORMAL) == DD_OK ); TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL) == DD_OK ); diff --git a/rostests/dxtest/ddraw/tests/DisplayModes.cpp b/rostests/dxtest/ddraw/tests/DisplayModes.cpp new file mode 100644 index 00000000000..4592e8efc44 --- /dev/null +++ b/rostests/dxtest/ddraw/tests/DisplayModes.cpp @@ -0,0 +1,55 @@ +typedef struct +{ + INT* passed; + INT* failed; + LPDIRECTDRAW7 DirectDraw; +} ENUMCONTEXT; + +HRESULT CALLBACK DummyEnumDisplayModes( LPDDSURFACEDESC2 pDDSD, ENUMCONTEXT* Context ) +{ + return DDENUMRET_OK; +} + +HRESULT CALLBACK EnumDisplayModes( LPDDSURFACEDESC2 pDDSD, ENUMCONTEXT* Context ) +{ + INT* passed = Context->passed; + INT* failed = Context->failed; + TEST ( Context->DirectDraw->SetDisplayMode (pDDSD->dwWidth, pDDSD->dwHeight, pDDSD->ddpfPixelFormat.dwRGBBitCount, pDDSD->dwRefreshRate, 0) == DD_OK); + return DDENUMRET_OK; +} + +BOOL Test_DisplayModes (INT* passed, INT* failed) +{ + /*** FIXME: Also test with surface as parameter; try busy/locked surface as well ***/ + LPDIRECTDRAW7 DirectDraw; + + /* Preparations */ + if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) + { + printf("ERROR: Failed to set up ddraw\n"); + return FALSE; + } + + ENUMCONTEXT Context = {passed, failed, DirectDraw}; + + /* The Test */ + + // First try with some generic display modes + TEST ( DirectDraw->SetDisplayMode (1586, 895, 0, 0, 0) == DDERR_UNSUPPORTED ); + TEST ( DirectDraw->SetDisplayMode (0, 0, 0, 0, 0x123) == DDERR_INVALIDPARAMS ); + + TEST ( DirectDraw->SetDisplayMode (0, 0, 0, 0, 0) == DD_OK ); + TEST ( DirectDraw->SetDisplayMode (800, 600, 0, 0, 0) == DD_OK ); + TEST ( DirectDraw->SetDisplayMode (0, 0, 16, 0, 0) == DD_OK ); + + // Now try getting vaild modes from driver + TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES, NULL, (PVOID)&Context, NULL) == DDERR_INVALIDPARAMS); + TEST (DirectDraw->EnumDisplayModes(0, NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK ); + TEST (DirectDraw->EnumDisplayModes(DDEDM_REFRESHRATES, NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK ); + TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES, NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)DummyEnumDisplayModes) == DD_OK ); + TEST (DirectDraw->EnumDisplayModes(DDEDM_STANDARDVGAMODES|DDEDM_REFRESHRATES, NULL, (PVOID)&Context, (LPDDENUMMODESCALLBACK2)EnumDisplayModes) == DD_OK); + + DirectDraw->Release(); + + return TRUE; +}