diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 1ee7b6f061..d3cbc527bc 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -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. */ diff --git a/dlls/wined3d/surface_base.c b/dlls/wined3d/surface_base.c index 6b9c631edb..11a3d0b088 100644 --- a/dlls/wined3d/surface_base.c +++ b/dlls/wined3d/surface_base.c @@ -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; } diff --git a/dlls/wined3d/surface_gdi.c b/dlls/wined3d/surface_gdi.c index a5ca3db6ff..03852f86c1 100644 --- a/dlls/wined3d/surface_gdi.c +++ b/dlls/wined3d/surface_gdi.c @@ -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