Alexandre Julliard wrote:
It doesn't work here:
../../../tools/runtest -q -P wine -M d3d9.dll -T ../../.. -p d3d9_test.exe.so visual.c && touch visual.ok visual.c:7572: Tests skipped: Card has unconditional pow2 support, skipping conditional NP2 tests visual.c:9686: Test failed: Input 0x00000000: Got color 0x00000000 for pixel 1/1, expected 0x00008700, format D3DFMT_UYVY visual.c:9690: Test failed: Input 0x00000000: Got color 0x00000000 for pixel 2/1, expected 0x00008700, format D3DFMT_UYVY visual.c:9686: Test failed: Input 0xff000000: Got color 0x00000000 for pixel 1/1, expected 0x00008700, format D3DFMT_UYVY visual.c:9690: Test failed: Input 0xff000000: Got color 0x00000000 for pixel 2/1, expected 0x004bff1c, format D3DFMT_UYVY visual.c:9686: Test failed: Input 0x00ff0000: Got color 0x00000000 for pixel 1/1, expected 0x00b30000, format D3DFMT_UYVY visual.c:9690: Test failed: Input 0x00ff0000: Got color 0x00ffffff for pixel 2/1, expected 0x00b30000, format D3DFMT_UYVY visual.c:9686: Test failed: Input 0x0000ff00: Got color 0x00000000 for pixel 1/1, expected 0x004bff1c, format D3DFMT_UYVY [...many more...] make: *** [visual.ok] Error 72
Does the attached patch make it any better?
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