H. Verbeet : wined3d: Move setting a palette up a couple of lines in BltOverride().
Alexandre Julliard
julliard at winehq.org
Mon Jun 30 08:26:57 CDT 2008
Module: wine
Branch: master
Commit: 8d6dc9daa75b6eda0e82d33be2fa01b80a04f570
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8d6dc9daa75b6eda0e82d33be2fa01b80a04f570
Author: H. Verbeet <hverbeet at gmail.com>
Date: Sun Jun 29 22:49:22 2008 +0200
wined3d: Move setting a palette up a couple of lines in BltOverride().
This prevents a few failures in the ddraw tests when using FBOs due to
using P8 surfaces without a palette set.
---
dlls/wined3d/surface.c | 25 +++++++++++++++----------
1 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 4b91d1f..48e13fe 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -3276,6 +3276,17 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT *
SourceRectangle.top = 0;
SourceRectangle.bottom = Src->currentDesc.Height;
}
+
+ /* When blitting from an offscreen surface to a rendertarget, the source
+ * surface is not required to have a palette. Our rendering / conversion
+ * code further down the road retrieves the palette from the surface, so
+ * it must have a palette set. */
+ if((Src->resource.format == WINED3DFMT_P8) && (Src->palette == NULL)) {
+ paletteOverride = TRUE;
+ TRACE("Source surface (%p) lacks palette, overriding palette with palette %p of destination surface (%p)\n", Src, This->palette, This);
+ Src->palette = This->palette;
+ }
+
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO && GL_SUPPORT(EXT_FRAMEBUFFER_BLIT) &&
(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) == 0) {
TRACE("Using stretch_rect_fbo\n");
@@ -3284,6 +3295,10 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT *
*/
stretch_rect_fbo((IWineD3DDevice *)myDevice, SrcSurface, (WINED3DRECT *) &SourceRectangle,
(IWineD3DSurface *)This, &rect, Filter, FALSE);
+
+ /* Clear the palette as the surface didn't have a palette attached, it would confuse GetPalette and other calls */
+ if(paletteOverride)
+ Src->palette = NULL;
return WINED3D_OK;
}
@@ -3313,16 +3328,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT *
Src->CKeyFlags &= ~WINEDDSD_CKSRCBLT;
}
- /* When blitting from an offscreen surface to a rendertarget, the source
- * surface is not required to have a palette. Our rendering / conversion
- * code further down the road retrieves the palette from the surface, so
- * it must have a palette set. */
- if((Src->resource.format == WINED3DFMT_P8) && (Src->palette == NULL)) {
- paletteOverride = TRUE;
- TRACE("Source surface (%p) lacks palette, overriding palette with palette %p of destination surface (%p)\n", Src, This->palette, This);
- Src->palette = This->palette;
- }
-
/* Now load the surface */
IWineD3DSurface_PreLoad((IWineD3DSurface *) Src);
More information about the wine-cvs
mailing list