ddraw: GetSurfaceDesc returns the surface memory while the surface is locked.
This commit is contained in:
parent
e7b68eec34
commit
a5c484cbf3
|
@ -585,7 +585,6 @@ IDirectDrawSurfaceImpl_Lock(IDirectDrawSurface7 *iface,
|
||||||
DDSD->dwSize = sizeof(DDSURFACEDESC2);
|
DDSD->dwSize = sizeof(DDSURFACEDESC2);
|
||||||
}
|
}
|
||||||
|
|
||||||
DD_STRUCT_COPY_BYSIZE(DDSD,&(This->surface_desc));
|
|
||||||
hr = IWineD3DSurface_LockRect(This->WineD3DSurface,
|
hr = IWineD3DSurface_LockRect(This->WineD3DSurface,
|
||||||
&LockedRect,
|
&LockedRect,
|
||||||
Rect,
|
Rect,
|
||||||
|
@ -596,7 +595,8 @@ IDirectDrawSurfaceImpl_Lock(IDirectDrawSurface7 *iface,
|
||||||
* does not set the LPSURFACE flag on locked surfaces !?!.
|
* does not set the LPSURFACE flag on locked surfaces !?!.
|
||||||
* DDSD->dwFlags |= DDSD_LPSURFACE;
|
* DDSD->dwFlags |= DDSD_LPSURFACE;
|
||||||
*/
|
*/
|
||||||
DDSD->lpSurface = LockedRect.pBits;
|
This->surface_desc.lpSurface = LockedRect.pBits;
|
||||||
|
DD_STRUCT_COPY_BYSIZE(DDSD,&(This->surface_desc));
|
||||||
|
|
||||||
TRACE("locked surface returning description :\n");
|
TRACE("locked surface returning description :\n");
|
||||||
if (TRACE_ON(ddraw)) DDRAW_dump_surface_desc(DDSD);
|
if (TRACE_ON(ddraw)) DDRAW_dump_surface_desc(DDSD);
|
||||||
|
@ -622,9 +622,15 @@ IDirectDrawSurfaceImpl_Unlock(IDirectDrawSurface7 *iface,
|
||||||
RECT *pRect)
|
RECT *pRect)
|
||||||
{
|
{
|
||||||
ICOM_THIS_FROM(IDirectDrawSurfaceImpl, IDirectDrawSurface7, iface);
|
ICOM_THIS_FROM(IDirectDrawSurfaceImpl, IDirectDrawSurface7, iface);
|
||||||
|
HRESULT hr;
|
||||||
TRACE("(%p)->(%p)\n", This, pRect);
|
TRACE("(%p)->(%p)\n", This, pRect);
|
||||||
|
|
||||||
return IWineD3DSurface_UnlockRect(This->WineD3DSurface);
|
hr = IWineD3DSurface_UnlockRect(This->WineD3DSurface);
|
||||||
|
if(SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
This->surface_desc.lpSurface = NULL;
|
||||||
|
}
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
|
@ -174,8 +174,7 @@ static void SrcColorKey32BlitTest(void)
|
||||||
{
|
{
|
||||||
LPDIRECTDRAWSURFACE lpSrc;
|
LPDIRECTDRAWSURFACE lpSrc;
|
||||||
LPDIRECTDRAWSURFACE lpDst;
|
LPDIRECTDRAWSURFACE lpDst;
|
||||||
DDSURFACEDESC ddsd;
|
DDSURFACEDESC ddsd, ddsd2, ddsd3;
|
||||||
DDSURFACEDESC ddsd2;
|
|
||||||
DDCOLORKEY DDColorKey;
|
DDCOLORKEY DDColorKey;
|
||||||
LPDWORD lpData;
|
LPDWORD lpData;
|
||||||
HRESULT rc;
|
HRESULT rc;
|
||||||
|
@ -211,9 +210,24 @@ static void SrcColorKey32BlitTest(void)
|
||||||
lpData[1] = 0xCCCCCCCC;
|
lpData[1] = 0xCCCCCCCC;
|
||||||
lpData[2] = 0xCCCCCCCC;
|
lpData[2] = 0xCCCCCCCC;
|
||||||
lpData[3] = 0xCCCCCCCC;
|
lpData[3] = 0xCCCCCCCC;
|
||||||
|
|
||||||
|
memset(&ddsd3, 0, sizeof(ddsd3));
|
||||||
|
ddsd3.dwSize = sizeof(ddsd3);
|
||||||
|
U4(ddsd3).ddpfPixelFormat.dwSize = sizeof(U4(ddsd3).ddpfPixelFormat);
|
||||||
|
rc = IDirectDrawSurface_GetSurfaceDesc(lpDst, &ddsd3);
|
||||||
|
ok(rc == DD_OK, "IDirectDrawSurface_GetSurfaceDesc between a lock/unlock pair returned %08x\n", rc);
|
||||||
|
ok(ddsd3.lpSurface == ddsd3.lpSurface, "lpSurface from GetSurfaceDesc(%p) differs from the one returned by Lock(%p)\n", ddsd3.lpSurface, ddsd2.lpSurface);
|
||||||
|
|
||||||
rc = IDirectDrawSurface_Unlock(lpDst, NULL);
|
rc = IDirectDrawSurface_Unlock(lpDst, NULL);
|
||||||
ok(rc==DD_OK,"Unlock returned: %x\n",rc);
|
ok(rc==DD_OK,"Unlock returned: %x\n",rc);
|
||||||
|
|
||||||
|
memset(&ddsd3, 0, sizeof(ddsd3));
|
||||||
|
ddsd3.dwSize = sizeof(ddsd3);
|
||||||
|
U4(ddsd3).ddpfPixelFormat.dwSize = sizeof(U4(ddsd3).ddpfPixelFormat);
|
||||||
|
rc = IDirectDrawSurface_GetSurfaceDesc(lpDst, &ddsd3);
|
||||||
|
ok(rc == DD_OK, "IDirectDrawSurface_GetSurfaceDesc between a lock/unlock pair returned %08x\n", rc);
|
||||||
|
ok(ddsd3.lpSurface == NULL, "lpSurface from GetSurfaceDesc(%p) is not NULL after unlock\n", ddsd3.lpSurface);
|
||||||
|
|
||||||
rc = IDirectDrawSurface_Lock(lpSrc, NULL, &ddsd2, DDLOCK_WAIT, NULL);
|
rc = IDirectDrawSurface_Lock(lpSrc, NULL, &ddsd2, DDLOCK_WAIT, NULL);
|
||||||
ok(rc==DD_OK,"Lock returned: %x\n",rc);
|
ok(rc==DD_OK,"Lock returned: %x\n",rc);
|
||||||
ok((ddsd2.dwFlags & DDSD_LPSURFACE) == 0, "Surface desc has LPSURFACE Flags set\n");
|
ok((ddsd2.dwFlags & DDSD_LPSURFACE) == 0, "Surface desc has LPSURFACE Flags set\n");
|
||||||
|
|
Loading…
Reference in New Issue