diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index dff1ae2..2f5554f 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -523,10 +523,15 @@ void surface_add_dirty_rect(IWineD3DSurface *iface, const RECT *dirty_rect) } } -static inline BOOL surface_can_stretch_rect(IWineD3DSurfaceImpl *surface) +static inline BOOL surface_can_stretch_rect(IWineD3DSurfaceImpl *src, IWineD3DSurfaceImpl *dst) { - return (surface->resource.format_desc->Flags & WINED3DFMT_FLAG_FBO_ATTACHABLE) - || (surface->resource.usage & WINED3DUSAGE_RENDERTARGET); + return ((src->resource.format_desc->Flags & WINED3DFMT_FLAG_FBO_ATTACHABLE) + || (src->resource.usage & WINED3DUSAGE_RENDERTARGET)) + && ((dst->resource.format_desc->Flags & WINED3DFMT_FLAG_FBO_ATTACHABLE) + || (dst->resource.usage & WINED3DUSAGE_RENDERTARGET)) + && (src->resource.format_desc->format == dst->resource.format_desc->format + || (is_identity_fixup(src->resource.format_desc->color_fixup) + && is_identity_fixup(dst->resource.format_desc->color_fixup))); } static ULONG WINAPI IWineD3DSurfaceImpl_Release(IWineD3DSurface *iface) @@ -3415,7 +3420,7 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const * backends. */ if (wined3d_settings.offscreen_rendering_mode == ORM_FBO && GL_SUPPORT(EXT_FRAMEBUFFER_BLIT) - && surface_can_stretch_rect(Src) && surface_can_stretch_rect(This)) + && surface_can_stretch_rect(Src, This)) { stretch_rect_fbo((IWineD3DDevice *)myDevice, SrcSurface, &srect, (IWineD3DSurface *)This, &rect, Filter, upsideDown); @@ -3480,7 +3485,7 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const if (wined3d_settings.offscreen_rendering_mode == ORM_FBO && GL_SUPPORT(EXT_FRAMEBUFFER_BLIT) && !(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) - && surface_can_stretch_rect(Src) && surface_can_stretch_rect(This)) + && surface_can_stretch_rect(Src, This)) { TRACE("Using stretch_rect_fbo\n"); /* The source is always a texture, but never the currently active render target, and the texture