wined3d: Use surface_modify_location() to manipulate location flags in IWineD3DSurfaceImpl_Unmap().

Directly setting SFLAG_INFRAWABLE breaks for offscreen render targets, where
the drawable and texture are the same thing. Before commit
d3fd7b247b the explicit load of the texture
location with the default RTL_READTEX render target lock mode would have
prevented the flags from becomming inconsistent.
This commit is contained in:
Henri Verbeet 2011-01-04 17:42:00 +01:00 committed by Alexandre Julliard
parent 1898f22ca5
commit e5d1a0c72d
1 changed files with 8 additions and 12 deletions

View File

@ -1884,19 +1884,15 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_Unmap(IWineD3DSurface *iface)
surface_load_location(This, SFLAG_INDRAWABLE, fullsurface ? NULL : &This->dirtyRect); surface_load_location(This, SFLAG_INDRAWABLE, fullsurface ? NULL : &This->dirtyRect);
if (!fullsurface) /* Partial rectangle tracking is not commonly implemented, it is only
{ * done for render targets. INSYSMEM was set before to tell
/* Partial rectangle tracking is not commonly implemented, it is
* only done for render targets. Overwrite the flags to bring
* them back into a sane state. INSYSMEM was set before to tell
* surface_load_location() where to read the rectangle from. * surface_load_location() where to read the rectangle from.
* Indrawable is set because all modifications from the partial * Indrawable is set because all modifications from the partial
* sysmem copy are written back to the drawable, thus the surface * sysmem copy are written back to the drawable, thus the surface is
* is merged again in the drawable. The sysmem copy is not fully * merged again in the drawable. The sysmem copy is not fully up to
* up to date because only a subrectangle was read in Map(). */ * date because only a subrectangle was read in Map(). */
This->flags &= ~SFLAG_INSYSMEM; if (!fullsurface)
This->flags |= SFLAG_INDRAWABLE; surface_modify_location(This, SFLAG_INDRAWABLE, TRUE);
}
This->dirtyRect.left = This->currentDesc.Width; This->dirtyRect.left = This->currentDesc.Width;
This->dirtyRect.top = This->currentDesc.Height; This->dirtyRect.top = This->currentDesc.Height;