wined3d: Make sure SFLAG_LOCKED is set at the start of LockRect as various functions called from LockRect depend on it (e.g. LoadTexture if called from LoadLocation).
This commit is contained in:
parent
d4e37265f8
commit
b238e39ec8
|
@ -799,6 +799,12 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED
|
|||
WARN("Surface is already locked, returning D3DERR_INVALIDCALL\n");
|
||||
return WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
This->Flags |= SFLAG_LOCKED;
|
||||
|
||||
if (!(This->Flags & SFLAG_LOCKABLE))
|
||||
{
|
||||
TRACE("Warning: trying to lock unlockable surf@%p\n", This);
|
||||
}
|
||||
|
||||
if (Flags & WINED3DLOCK_DISCARD) {
|
||||
/* Set SFLAG_INSYSMEM, so we'll never try to download the data from the texture. */
|
||||
|
|
|
@ -1573,22 +1573,6 @@ HRESULT WINAPI IWineD3DBaseSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED3DL
|
|||
{
|
||||
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
|
||||
|
||||
/* Already locked? */
|
||||
if(This->Flags & SFLAG_LOCKED)
|
||||
{
|
||||
ERR("(%p) Surface already locked\n", This);
|
||||
/* What should I return here? */
|
||||
return WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
if (!(This->Flags & SFLAG_LOCKABLE))
|
||||
{
|
||||
/* This is some GL specific thing, see the OpenGL version of
|
||||
* this method, but check for the flag and write a trace
|
||||
*/
|
||||
TRACE("Warning: trying to lock unlockable surf@%p\n", This);
|
||||
}
|
||||
|
||||
TRACE("(%p) : rect@%p flags(%08x), output lockedRect@%p, memory@%p\n",
|
||||
This, pRect, Flags, pLockedRect, This->resource.allocatedMemory);
|
||||
|
||||
|
@ -1642,6 +1626,5 @@ HRESULT WINAPI IWineD3DBaseSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED3DL
|
|||
/* No dirtifying is needed for this surface implementation */
|
||||
TRACE("returning memory@%p, pitch(%d)\n", pLockedRect->pBits, pLockedRect->Pitch);
|
||||
|
||||
This->Flags |= SFLAG_LOCKED;
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
|
|
@ -205,6 +205,15 @@ IWineGDISurfaceImpl_LockRect(IWineD3DSurface *iface,
|
|||
{
|
||||
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
|
||||
|
||||
/* Already locked? */
|
||||
if(This->Flags & SFLAG_LOCKED)
|
||||
{
|
||||
ERR("(%p) Surface already locked\n", This);
|
||||
/* What should I return here? */
|
||||
return WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
This->Flags |= SFLAG_LOCKED;
|
||||
|
||||
if(!This->resource.allocatedMemory) {
|
||||
/* This happens on gdi surfaces if the application set a user pointer and resets it.
|
||||
* Recreate the DIB section
|
||||
|
|
Loading…
Reference in New Issue