mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-14 18:25:40 +00:00
wined3d: Only swap system memory resources of front and back buffer if they have the same size.
This commit is contained in:
parent
cf1e01eb0c
commit
43fda1f4f0
|
@ -321,52 +321,57 @@ static HRESULT WINAPI IWineD3DSwapChainImpl_Present(IWineD3DSwapChain *iface, CO
|
||||||
BOOL frontuptodate = front->Flags & SFLAG_INSYSMEM;
|
BOOL frontuptodate = front->Flags & SFLAG_INSYSMEM;
|
||||||
BOOL backuptodate = back->Flags & SFLAG_INSYSMEM;
|
BOOL backuptodate = back->Flags & SFLAG_INSYSMEM;
|
||||||
|
|
||||||
/* Flip the DC */
|
if(front->resource.size == back->resource.size) {
|
||||||
{
|
/* Flip the DC */
|
||||||
HDC tmp;
|
{
|
||||||
tmp = front->hDC;
|
HDC tmp;
|
||||||
front->hDC = back->hDC;
|
tmp = front->hDC;
|
||||||
back->hDC = tmp;
|
front->hDC = back->hDC;
|
||||||
|
back->hDC = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flip the DIBsection */
|
||||||
|
{
|
||||||
|
HBITMAP tmp;
|
||||||
|
BOOL hasDib = front->Flags & SFLAG_DIBSECTION;
|
||||||
|
tmp = front->dib.DIBsection;
|
||||||
|
front->dib.DIBsection = back->dib.DIBsection;
|
||||||
|
back->dib.DIBsection = tmp;
|
||||||
|
|
||||||
|
if(back->Flags & SFLAG_DIBSECTION) front->Flags |= SFLAG_DIBSECTION;
|
||||||
|
else front->Flags &= ~SFLAG_DIBSECTION;
|
||||||
|
if(hasDib) back->Flags |= SFLAG_DIBSECTION;
|
||||||
|
else back->Flags &= ~SFLAG_DIBSECTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flip the surface data */
|
||||||
|
{
|
||||||
|
void* tmp;
|
||||||
|
|
||||||
|
tmp = front->dib.bitmap_data;
|
||||||
|
front->dib.bitmap_data = back->dib.bitmap_data;
|
||||||
|
back->dib.bitmap_data = tmp;
|
||||||
|
|
||||||
|
tmp = front->resource.allocatedMemory;
|
||||||
|
front->resource.allocatedMemory = back->resource.allocatedMemory;
|
||||||
|
back->resource.allocatedMemory = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* client_memory should not be different, but just in case */
|
||||||
|
{
|
||||||
|
BOOL tmp;
|
||||||
|
tmp = front->dib.client_memory;
|
||||||
|
front->dib.client_memory = back->dib.client_memory;
|
||||||
|
back->dib.client_memory = tmp;
|
||||||
|
}
|
||||||
|
if(frontuptodate) back->Flags |= SFLAG_INSYSMEM;
|
||||||
|
else back->Flags &= ~SFLAG_INSYSMEM;
|
||||||
|
if(backuptodate) front->Flags |= SFLAG_INSYSMEM;
|
||||||
|
else front->Flags &= ~SFLAG_INSYSMEM;
|
||||||
|
} else {
|
||||||
|
back->Flags &= ~SFLAG_INSYSMEM;
|
||||||
|
front->Flags &= ~SFLAG_INSYSMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flip the DIBsection */
|
|
||||||
{
|
|
||||||
HBITMAP tmp;
|
|
||||||
BOOL hasDib = front->Flags & SFLAG_DIBSECTION;
|
|
||||||
tmp = front->dib.DIBsection;
|
|
||||||
front->dib.DIBsection = back->dib.DIBsection;
|
|
||||||
back->dib.DIBsection = tmp;
|
|
||||||
|
|
||||||
if(back->Flags & SFLAG_DIBSECTION) front->Flags |= SFLAG_DIBSECTION;
|
|
||||||
else front->Flags &= ~SFLAG_DIBSECTION;
|
|
||||||
if(hasDib) back->Flags |= SFLAG_DIBSECTION;
|
|
||||||
else back->Flags &= ~SFLAG_DIBSECTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Flip the surface data */
|
|
||||||
{
|
|
||||||
void* tmp;
|
|
||||||
|
|
||||||
tmp = front->dib.bitmap_data;
|
|
||||||
front->dib.bitmap_data = back->dib.bitmap_data;
|
|
||||||
back->dib.bitmap_data = tmp;
|
|
||||||
|
|
||||||
tmp = front->resource.allocatedMemory;
|
|
||||||
front->resource.allocatedMemory = back->resource.allocatedMemory;
|
|
||||||
back->resource.allocatedMemory = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* client_memory should not be different, but just in case */
|
|
||||||
{
|
|
||||||
BOOL tmp;
|
|
||||||
tmp = front->dib.client_memory;
|
|
||||||
front->dib.client_memory = back->dib.client_memory;
|
|
||||||
back->dib.client_memory = tmp;
|
|
||||||
}
|
|
||||||
if(frontuptodate) back->Flags |= SFLAG_INSYSMEM;
|
|
||||||
else back->Flags &= ~SFLAG_INSYSMEM;
|
|
||||||
if(backuptodate) front->Flags |= SFLAG_INSYSMEM;
|
|
||||||
else front->Flags &= ~SFLAG_INSYSMEM;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("returning\n");
|
TRACE("returning\n");
|
||||||
|
|
Loading…
Reference in a new issue