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:
parent
1898f22ca5
commit
e5d1a0c72d
|
@ -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);
|
||||||
|
|
||||||
|
/* Partial rectangle tracking is not commonly implemented, it is only
|
||||||
|
* done for render targets. INSYSMEM was set before to tell
|
||||||
|
* surface_load_location() where to read the rectangle from.
|
||||||
|
* Indrawable is set because all modifications from the partial
|
||||||
|
* sysmem copy are written back to the drawable, thus the surface is
|
||||||
|
* merged again in the drawable. The sysmem copy is not fully up to
|
||||||
|
* date because only a subrectangle was read in Map(). */
|
||||||
if (!fullsurface)
|
if (!fullsurface)
|
||||||
{
|
surface_modify_location(This, SFLAG_INDRAWABLE, TRUE);
|
||||||
/* 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.
|
|
||||||
* Indrawable is set because all modifications from the partial
|
|
||||||
* sysmem copy are written back to the drawable, thus the surface
|
|
||||||
* is merged again in the drawable. The sysmem copy is not fully
|
|
||||||
* up to date because only a subrectangle was read in Map(). */
|
|
||||||
This->flags &= ~SFLAG_INSYSMEM;
|
|
||||||
This->flags |= SFLAG_INDRAWABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
This->dirtyRect.left = This->currentDesc.Width;
|
This->dirtyRect.left = This->currentDesc.Width;
|
||||||
This->dirtyRect.top = This->currentDesc.Height;
|
This->dirtyRect.top = This->currentDesc.Height;
|
||||||
|
|
Loading…
Reference in New Issue