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