ddrawex: Add a test for the permanent DC function.
This commit is contained in:
parent
58480f1663
commit
a69c86d3f5
|
@ -206,7 +206,11 @@ static HRESULT WINAPI IDirect3DSurface8Impl_UnlockRect(LPDIRECT3DSURFACE8 iface)
|
||||||
EnterCriticalSection(&d3d8_cs);
|
EnterCriticalSection(&d3d8_cs);
|
||||||
hr = IWineD3DSurface_UnlockRect(This->wineD3DSurface);
|
hr = IWineD3DSurface_UnlockRect(This->wineD3DSurface);
|
||||||
LeaveCriticalSection(&d3d8_cs);
|
LeaveCriticalSection(&d3d8_cs);
|
||||||
return hr;
|
switch(hr)
|
||||||
|
{
|
||||||
|
case WINEDDERR_NOTLOCKED: return D3DERR_INVALIDCALL;
|
||||||
|
default: return hr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const IDirect3DSurface8Vtbl Direct3DSurface8_Vtbl =
|
const IDirect3DSurface8Vtbl Direct3DSurface8_Vtbl =
|
||||||
|
|
|
@ -241,7 +241,11 @@ static HRESULT WINAPI IDirect3DSurface9Impl_UnlockRect(LPDIRECT3DSURFACE9 iface)
|
||||||
EnterCriticalSection(&d3d9_cs);
|
EnterCriticalSection(&d3d9_cs);
|
||||||
hr = IWineD3DSurface_UnlockRect(This->wineD3DSurface);
|
hr = IWineD3DSurface_UnlockRect(This->wineD3DSurface);
|
||||||
LeaveCriticalSection(&d3d9_cs);
|
LeaveCriticalSection(&d3d9_cs);
|
||||||
return hr;
|
switch(hr)
|
||||||
|
{
|
||||||
|
case WINEDDERR_NOTLOCKED: return D3DERR_INVALIDCALL;
|
||||||
|
default: return hr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirect3DSurface9Impl_GetDC(LPDIRECT3DSURFACE9 iface, HDC* phdc) {
|
static HRESULT WINAPI IDirect3DSurface9Impl_GetDC(LPDIRECT3DSURFACE9 iface, HDC* phdc) {
|
||||||
|
|
|
@ -60,7 +60,7 @@ static void dctest_surf(IDirectDrawSurface *surf, int ddsdver) {
|
||||||
ok(dc2 == (HDC) 0x1234, "The failed GetDC call changed the dc: %p\n", dc2);
|
ok(dc2 == (HDC) 0x1234, "The failed GetDC call changed the dc: %p\n", dc2);
|
||||||
|
|
||||||
hr = IDirectDrawSurface_Lock(surf, NULL, ddsdver == 1 ? &ddsd : ((DDSURFACEDESC *) &ddsd2), 0, NULL);
|
hr = IDirectDrawSurface_Lock(surf, NULL, ddsdver == 1 ? &ddsd : ((DDSURFACEDESC *) &ddsd2), 0, NULL);
|
||||||
ok(hr == DDERR_SURFACEBUSY, "IDirectDrawSurface_Lock returned 0x%08x, expected DDERR_ALREADYLOCKED\n", hr);
|
ok(hr == DDERR_SURFACEBUSY, "IDirectDrawSurface_Lock returned 0x%08x, expected DDERR_SURFACEBUSY\n", hr);
|
||||||
|
|
||||||
hr = IDirectDrawSurface_ReleaseDC(surf, dc);
|
hr = IDirectDrawSurface_ReleaseDC(surf, dc);
|
||||||
ok(hr == DD_OK, "IDirectDrawSurface_ReleaseDC failed: 0x%08x\n", hr);
|
ok(hr == DD_OK, "IDirectDrawSurface_ReleaseDC failed: 0x%08x\n", hr);
|
||||||
|
@ -170,6 +170,65 @@ static void CapsTest(void)
|
||||||
IDirectDraw_Release(dd1);
|
IDirectDraw_Release(dd1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dctest_sysvidmem(IDirectDrawSurface *surf, int ddsdver) {
|
||||||
|
HRESULT hr;
|
||||||
|
HDC dc, dc2 = (HDC) 0x1234;
|
||||||
|
DDSURFACEDESC ddsd;
|
||||||
|
DDSURFACEDESC2 ddsd2;
|
||||||
|
|
||||||
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
|
memset(&ddsd2, 0, sizeof(ddsd2));
|
||||||
|
ddsd2.dwSize = sizeof(ddsd2);
|
||||||
|
|
||||||
|
hr = IDirectDrawSurface_GetDC(surf, &dc);
|
||||||
|
ok(hr == DD_OK, "IDirectDrawSurface_GetDC failed: 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IDirectDrawSurface_GetDC(surf, &dc2);
|
||||||
|
ok(hr == DD_OK, "IDirectDrawSurface_GetDC failed: 0x%08x\n", hr);
|
||||||
|
ok(dc == dc2, "Got two different DCs\n");
|
||||||
|
|
||||||
|
hr = IDirectDrawSurface_Lock(surf, NULL, ddsdver == 1 ? &ddsd : ((DDSURFACEDESC *) &ddsd2), 0, NULL);
|
||||||
|
ok(hr == DD_OK, "IDirectDrawSurface_Lock returned 0x%08x, expected DD_OK\n", hr);
|
||||||
|
|
||||||
|
hr = IDirectDrawSurface_Lock(surf, NULL, ddsdver == 1 ? &ddsd : ((DDSURFACEDESC *) &ddsd2), 0, NULL);
|
||||||
|
ok(hr == DDERR_SURFACEBUSY, "IDirectDrawSurface_Lock returned 0x%08x, expected DDERR_SURFACEBUSY\n", hr);
|
||||||
|
|
||||||
|
hr = IDirectDrawSurface_Unlock(surf, NULL);
|
||||||
|
ok(hr == DD_OK, "IDirectDrawSurface_Unlock returned 0x%08x, expected DD_OK\n", hr);
|
||||||
|
hr = IDirectDrawSurface_Unlock(surf, NULL);
|
||||||
|
ok(hr == DDERR_NOTLOCKED, "IDirectDrawSurface_Unlock returned 0x%08x, expected DDERR_NOTLOCKED\n", hr);
|
||||||
|
|
||||||
|
hr = IDirectDrawSurface_ReleaseDC(surf, dc);
|
||||||
|
ok(hr == DD_OK, "IDirectDrawSurface_ReleaseDC failed: 0x%08x\n", hr);
|
||||||
|
hr = IDirectDrawSurface_ReleaseDC(surf, dc);
|
||||||
|
ok(hr == DD_OK, "IDirectDrawSurface_ReleaseDC failed: 0x%08x\n", hr);
|
||||||
|
/* That works any number of times... */
|
||||||
|
hr = IDirectDrawSurface_ReleaseDC(surf, dc);
|
||||||
|
ok(hr == DD_OK, "IDirectDrawSurface_ReleaseDC failed: 0x%08x\n", hr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SysVidMemTest(void)
|
||||||
|
{
|
||||||
|
DDSURFACEDESC ddsd;
|
||||||
|
DDSURFACEDESC2 ddsd2;
|
||||||
|
|
||||||
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
|
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
||||||
|
ddsd.dwWidth = 64;
|
||||||
|
ddsd.dwHeight = 64;
|
||||||
|
ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOMEMORY;
|
||||||
|
memset(&ddsd2, 0, sizeof(ddsd2));
|
||||||
|
ddsd2.dwSize = sizeof(ddsd2);
|
||||||
|
ddsd2.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
||||||
|
ddsd2.dwWidth = 64;
|
||||||
|
ddsd2.dwHeight = 64;
|
||||||
|
ddsd2.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY | DDSCAPS_VIDEOMEMORY;
|
||||||
|
|
||||||
|
GetDCTest_main(&ddsd, &ddsd2, dctest_sysvidmem);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(surface)
|
START_TEST(surface)
|
||||||
{
|
{
|
||||||
IClassFactory *classfactory = NULL;
|
IClassFactory *classfactory = NULL;
|
||||||
|
@ -193,6 +252,7 @@ START_TEST(surface)
|
||||||
|
|
||||||
GetDCTest();
|
GetDCTest();
|
||||||
CapsTest();
|
CapsTest();
|
||||||
|
SysVidMemTest();
|
||||||
|
|
||||||
if(factory) {
|
if(factory) {
|
||||||
ref = IDirectDrawFactory_Release(factory);
|
ref = IDirectDrawFactory_Release(factory);
|
||||||
|
|
|
@ -1320,7 +1320,7 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_UnlockRect(IWineD3DSurface *iface) {
|
||||||
|
|
||||||
if (!(This->Flags & SFLAG_LOCKED)) {
|
if (!(This->Flags & SFLAG_LOCKED)) {
|
||||||
WARN("trying to Unlock an unlocked surf@%p\n", This);
|
WARN("trying to Unlock an unlocked surf@%p\n", This);
|
||||||
return WINED3DERR_INVALIDCALL;
|
return WINEDDERR_NOTLOCKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (This->Flags & SFLAG_PBO) {
|
if (This->Flags & SFLAG_PBO) {
|
||||||
|
|
|
@ -168,7 +168,7 @@ IWineGDISurfaceImpl_UnlockRect(IWineD3DSurface *iface)
|
||||||
if (!(This->Flags & SFLAG_LOCKED))
|
if (!(This->Flags & SFLAG_LOCKED))
|
||||||
{
|
{
|
||||||
WARN("trying to Unlock an unlocked surf@%p\n", This);
|
WARN("trying to Unlock an unlocked surf@%p\n", This);
|
||||||
return WINED3DERR_INVALIDCALL;
|
return WINEDDERR_NOTLOCKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Can be useful for debugging */
|
/* Can be useful for debugging */
|
||||||
|
|
|
@ -74,6 +74,7 @@ cpp_quote("#define WINED3DERR_INVALIDCALL MAKE_WINED3DHRESU
|
||||||
cpp_quote("#define WINED3DERR_DRIVERINVALIDCALL MAKE_WINED3DHRESULT(2157)")
|
cpp_quote("#define WINED3DERR_DRIVERINVALIDCALL MAKE_WINED3DHRESULT(2157)")
|
||||||
cpp_quote("#define WINED3DERR_WASSTILLDRAWING MAKE_WINED3DHRESULT(540)")
|
cpp_quote("#define WINED3DERR_WASSTILLDRAWING MAKE_WINED3DHRESULT(540)")
|
||||||
cpp_quote("#define WINEDDERR_NOTAOVERLAYSURFACE MAKE_WINED3DHRESULT(580)")
|
cpp_quote("#define WINEDDERR_NOTAOVERLAYSURFACE MAKE_WINED3DHRESULT(580)")
|
||||||
|
cpp_quote("#define WINEDDERR_NOTLOCKED MAKE_WINED3DHRESULT(584)")
|
||||||
cpp_quote("#define WINEDDERR_NODC MAKE_WINED3DHRESULT(586)")
|
cpp_quote("#define WINEDDERR_NODC MAKE_WINED3DHRESULT(586)")
|
||||||
cpp_quote("#define WINEDDERR_DCALREADYCREATED MAKE_WINED3DHRESULT(620)")
|
cpp_quote("#define WINEDDERR_DCALREADYCREATED MAKE_WINED3DHRESULT(620)")
|
||||||
cpp_quote("#define WINEDDERR_NOTFLIPPABLE MAKE_WINED3DHRESULT(582)")
|
cpp_quote("#define WINEDDERR_NOTFLIPPABLE MAKE_WINED3DHRESULT(582)")
|
||||||
|
|
Loading…
Reference in New Issue