#include "ddrawtest.h" HWND CreateBasicWindow (VOID); BOOL Test_CreateDDraw (INT* passed, INT* failed) { LPDIRECTDRAW7 DirectDraw; IDirectDraw* DirectDraw2; /*** FIXME: Test first parameter using EnumDisplayDrivers ***/ DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL); TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, (IUnknown*)0xdeadbeef) == CLASS_E_NOAGGREGATION); TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw4, NULL) == DDERR_INVALIDPARAMS); TEST (DirectDrawCreateEx(NULL, NULL, IID_IDirectDraw7, NULL) == DDERR_INVALIDPARAMS); DirectDraw = NULL; TEST (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) == DD_OK); if(DirectDraw) { TEST (DirectDraw->Initialize(NULL) == DDERR_ALREADYINITIALIZED); TEST (DirectDraw->Release() == 0); } DirectDraw2 = NULL; TEST (DirectDrawCreate(NULL ,&DirectDraw2, NULL) == DD_OK); if(DirectDraw2) { TEST (DirectDraw2->QueryInterface(IID_IDirectDraw7, (PVOID*)&DirectDraw) == 0); TEST (DirectDraw2->AddRef() == 2); TEST (DirectDraw->AddRef() == 2); TEST (DirectDraw->Release() == 1); TEST (DirectDraw->Release() == 0); TEST (DirectDraw2->Release() == 1); TEST (DirectDraw2->Release() == 0); } return TRUE; } BOOL Test_SetCooperativeLevel (INT* passed, INT* failed) { HWND hwnd; LPDIRECTDRAW7 DirectDraw; /* Preparations */ if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) { printf("ERROR: Failed to set up ddraw\n"); return FALSE; } if(!( hwnd = CreateBasicWindow() )) { printf("ERROR: Failed to create window\n"); DirectDraw->Release(); return FALSE; } /* The Test */ TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_FULLSCREEN) == DDERR_INVALIDPARAMS ); TEST ( DirectDraw->SetCooperativeLevel (hwnd, 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->Compact() == DD_OK ); TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWMODEX) == DD_OK); TEST ( DirectDraw->SetCooperativeLevel (NULL, DDSCL_NORMAL) == DD_OK ); TEST ( DirectDraw->SetCooperativeLevel (hwnd, DDSCL_NORMAL) == DD_OK ); TEST ( DirectDraw->Compact() == DDERR_NOEXCLUSIVEMODE ); TEST ( DirectDraw->TestCooperativeLevel() == DD_OK ); // I do not get what this API does it always seems to return DD_OK DirectDraw->Release(); return TRUE; } BOOL Test_GetAvailableVidMem (INT* passed, INT* failed) { LPDIRECTDRAW7 DirectDraw; /* Preparations */ if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) { printf("ERROR: Failed to set up ddraw\n"); return FALSE; } /* Here we go */ DWORD Total, Free; DDSCAPS2 Caps = { 0 }; TEST (DirectDraw->GetAvailableVidMem(&Caps, NULL, NULL) == DDERR_INVALIDPARAMS); TEST (DirectDraw->GetAvailableVidMem(NULL, &Total, &Free) == DDERR_INVALIDPARAMS); TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); /* testing caps */ memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_RESERVED1; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_ALPHA; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_BACKBUFFER; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_COMPLEX; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_FLIP; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_FRONTBUFFER; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_OFFSCREENPLAIN; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_OVERLAY; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_PALETTE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_PRIMARYSURFACE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_RESERVED3; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_SYSTEMMEMORY; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_TEXTURE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_3DDEVICE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_VIDEOMEMORY; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_VISIBLE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_WRITEONLY; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_ZBUFFER; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_OWNDC; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDPARAMS ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_LIVEVIDEO; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_HWCODEC; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_MODEX; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_MIPMAP; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_RESERVED2; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_ALLOCONLOAD; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_VIDEOPORT; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK ); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_LOCALVIDMEM; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps = DDSCAPS_NONLOCALVIDMEM; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = 0x01; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDCAPS); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_RESERVED4; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_HINTDYNAMIC; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_HINTSTATIC; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_RESERVED1; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_RESERVED2; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_OPAQUE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_HINTANTIALIASING; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_CUBEMAP; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_CUBEMAP_POSITIVEX; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_CUBEMAP_NEGATIVEX; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_CUBEMAP_POSITIVEY; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_CUBEMAP_NEGATIVEY; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_CUBEMAP_POSITIVEZ; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_CUBEMAP_NEGATIVEZ; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_MIPMAPSUBLEVEL; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_D3DTEXTUREMANAGE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_DONOTPERSIST; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_STEREOSURFACELEFT; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_VOLUME; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_NOTUSERLOCKABLE; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_POINTS; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_RTPATCHES; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_NPATCHES; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_RESERVED3; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_DISCARDBACKBUFFER; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_ENABLEALPHACHANNEL; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_EXTENDEDFORMATPRIMARY; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps2 = DDSCAPS2_ADDITIONALPRIMARY; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps3 = ~(DDSCAPS3_MULTISAMPLE_QUALITY_MASK | DDSCAPS3_MULTISAMPLE_MASK | DDSCAPS3_RESERVED1 | DDSCAPS3_RESERVED2 | DDSCAPS3_LIGHTWEIGHTMIPMAP | DDSCAPS3_AUTOGENMIPMAP | DDSCAPS3_DMAP); TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDCAPS); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps3 = (DDSCAPS3_MULTISAMPLE_QUALITY_MASK | DDSCAPS3_MULTISAMPLE_MASK | DDSCAPS3_RESERVED1 | DDSCAPS3_RESERVED2 | DDSCAPS3_LIGHTWEIGHTMIPMAP | DDSCAPS3_AUTOGENMIPMAP | DDSCAPS3_DMAP); TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DD_OK); memset(&Caps,0,sizeof(DDSCAPS2)); Caps.dwCaps4 = 1; TEST (DirectDraw->GetAvailableVidMem(&Caps, &Total, &Free) == DDERR_INVALIDCAPS ); DirectDraw->Release(); return TRUE; } BOOL Test_GetFourCCCodes (INT* passed, INT* failed) { LPDIRECTDRAW7 DirectDraw; /* Preparations */ if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) { printf("ERROR: Failed to set up ddraw\n"); return FALSE; } /* Here we go */ DWORD dwNumCodes, *lpCodes; TEST (DirectDraw->GetFourCCCodes(NULL, (PDWORD)0xdeadbeef) == DDERR_INVALIDPARAMS); TEST (DirectDraw->GetFourCCCodes(&dwNumCodes, NULL) == DD_OK && dwNumCodes); lpCodes = (PDWORD)HeapAlloc(GetProcessHeap(), 0, sizeof(DWORD)*dwNumCodes); *lpCodes = 0; TEST ( DirectDraw->GetFourCCCodes(NULL, lpCodes) == DDERR_INVALIDPARAMS ); TEST (DirectDraw->GetFourCCCodes(&dwNumCodes, lpCodes) == DD_OK && *lpCodes ); DirectDraw->Release(); return TRUE; } BOOL Test_GetDeviceIdentifier (INT* passed, INT* failed) { LPDIRECTDRAW7 DirectDraw; DDDEVICEIDENTIFIER2 pDDDI; //OLECHAR GuidStr[100]; /* Preparations */ if (DirectDrawCreateEx(NULL, (VOID**)&DirectDraw, IID_IDirectDraw7, NULL) != DD_OK) { printf("ERROR: Failed to set up ddraw\n"); return FALSE; } TEST ( DirectDraw->GetDeviceIdentifier(NULL, 0) == DDERR_INVALIDPARAMS ); TEST ( DirectDraw->GetDeviceIdentifier(NULL, ~DDGDI_GETHOSTIDENTIFIER) == DDERR_INVALIDPARAMS ); TEST ( DirectDraw->GetDeviceIdentifier(NULL, DDGDI_GETHOSTIDENTIFIER) == DDERR_INVALIDPARAMS ); memset(&pDDDI,0,sizeof(DDDEVICEIDENTIFIER2)); TEST ( DirectDraw->GetDeviceIdentifier(&pDDDI, 0) == DD_OK ); /* StringFromGUID2(pDDDI.guidDeviceIdentifier, GuidStr, 100); printf("1. \n"); printf("szDriver : %s\n",pDDDI.szDriver); printf("szDescription : %s\n",pDDDI.szDescription); printf("liDriverVersion : 0x%08x . 0x%08x\n", pDDDI.liDriverVersion.HighPart, pDDDI.liDriverVersion.LowPart); printf("dwVendorId : 0x%08x\n",pDDDI.dwVendorId); printf("dwDeviceId : 0x%08x\n",pDDDI.dwDeviceId); printf("dwSubSysId : 0x%08x\n",pDDDI.dwSubSysId); printf("dwRevision : 0x%08x\n",pDDDI.dwRevision); printf("guidDeviceIdentifier : %ls\n",GuidStr); printf("dwWHQLLevel : 0x%08x\n",pDDDI.dwWHQLLevel); */ memset(&pDDDI,0,sizeof(DDDEVICEIDENTIFIER2)); TEST ( DirectDraw->GetDeviceIdentifier(&pDDDI, DDGDI_GETHOSTIDENTIFIER) == DD_OK ); memset(&pDDDI,0,sizeof(DDDEVICEIDENTIFIER2)); TEST ( DirectDraw->GetDeviceIdentifier(&pDDDI, ~DDGDI_GETHOSTIDENTIFIER) == DDERR_INVALIDPARAMS ); DirectDraw->Release(); return TRUE; }