Commit 8d6dc9da authored by H. Verbeet's avatar H. Verbeet Committed by Alexandre Julliard

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.
parent 469e791f
...@@ -3276,6 +3276,17 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT * ...@@ -3276,6 +3276,17 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT *
SourceRectangle.top = 0; SourceRectangle.top = 0;
SourceRectangle.bottom = Src->currentDesc.Height; 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) && if (wined3d_settings.offscreen_rendering_mode == ORM_FBO && GL_SUPPORT(EXT_FRAMEBUFFER_BLIT) &&
(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) == 0) { (Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) == 0) {
TRACE("Using stretch_rect_fbo\n"); TRACE("Using stretch_rect_fbo\n");
...@@ -3284,6 +3295,10 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT * ...@@ -3284,6 +3295,10 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT *
*/ */
stretch_rect_fbo((IWineD3DDevice *)myDevice, SrcSurface, (WINED3DRECT *) &SourceRectangle, stretch_rect_fbo((IWineD3DDevice *)myDevice, SrcSurface, (WINED3DRECT *) &SourceRectangle,
(IWineD3DSurface *)This, &rect, Filter, FALSE); (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; return WINED3D_OK;
} }
...@@ -3313,16 +3328,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT * ...@@ -3313,16 +3328,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT *
Src->CKeyFlags &= ~WINEDDSD_CKSRCBLT; 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 */ /* Now load the surface */
IWineD3DSurface_PreLoad((IWineD3DSurface *) Src); IWineD3DSurface_PreLoad((IWineD3DSurface *) Src);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment