wined3d: Go to the fallbacks for cross-swapchain blits.

This commit is contained in:
Henri Verbeet 2011-08-02 21:42:16 +02:00 committed by Alexandre Julliard
parent 111e8fe77c
commit c12627562b
1 changed files with 22 additions and 0 deletions

View File

@ -1285,6 +1285,7 @@ static HRESULT surface_blt(struct wined3d_surface *dst_surface, const RECT *dst_
struct wined3d_surface *src_surface, const RECT *src_rect, DWORD flags,
const WINEDDBLTFX *fx, WINED3DTEXTUREFILTERTYPE filter)
{
const struct wined3d_swapchain *src_swapchain, *dst_swapchain;
struct wined3d_device *device = dst_surface->resource.device;
DWORD src_ds_flags, dst_ds_flags;
static const DWORD simple_blit = WINEDDBLT_ASYNC
@ -1310,6 +1311,27 @@ static HRESULT surface_blt(struct wined3d_surface *dst_surface, const RECT *dst_
goto fallback;
}
if (src_surface && src_surface->container.type == WINED3D_CONTAINER_SWAPCHAIN)
src_swapchain = src_surface->container.u.swapchain;
else
src_swapchain = NULL;
if (dst_surface->container.type == WINED3D_CONTAINER_SWAPCHAIN)
dst_swapchain = dst_surface->container.u.swapchain;
else
dst_swapchain = NULL;
/* This isn't strictly needed. FBO blits for example could deal with
* cross-swapchain blits by first downloading the source to a texture
* before switching to the destination context. We just have this here to
* not have to deal with the issue, since cross-swapchain blits should be
* rare. */
if (src_swapchain && dst_swapchain && src_swapchain != dst_swapchain)
{
FIXME("Using fallback for cross-swapchain blit.\n");
goto fallback;
}
dst_ds_flags = dst_surface->resource.format->flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL);
if (src_surface)
src_ds_flags = src_surface->resource.format->flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL);