Module: wine Branch: master Commit: 82f067f5cdf00b8b9cf61cf775900ac99a3f0877 URL: http://source.winehq.org/git/wine.git/?a=commit;h=82f067f5cdf00b8b9cf61cf775...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Oct 19 22:03:10 2011 +0200
wined3d: Allow loading multisampled surfaces into sysmem.
---
dlls/wined3d/surface.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 1f1dc8f..54cacbd 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -5789,6 +5789,9 @@ static void surface_load_sysmem(struct wined3d_surface *surface, { surface_prepare_system_memory(surface);
+ if (surface->flags & (SFLAG_INRB_MULTISAMPLE | SFLAG_INRB_RESOLVED)) + surface_load_location(surface, SFLAG_INTEXTURE, NULL); + /* Download the surface to system memory. */ if (surface->flags & (SFLAG_INTEXTURE | SFLAG_INSRGBTEX)) { @@ -5945,6 +5948,22 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface, return WINED3D_OK; }
+ if (surface->flags & (SFLAG_INRB_MULTISAMPLE | SFLAG_INRB_RESOLVED) + && (surface->resource.format->flags & attach_flags) == attach_flags + && fbo_blit_supported(gl_info, WINED3D_BLIT_OP_COLOR_BLIT, + NULL, surface->resource.usage, surface->resource.pool, surface->resource.format, + NULL, surface->resource.usage, surface->resource.pool, surface->resource.format)) + { + DWORD src_location = surface->flags & SFLAG_INRB_RESOLVED ? SFLAG_INRB_RESOLVED : SFLAG_INRB_MULTISAMPLE; + DWORD dst_location = srgb ? SFLAG_INSRGBTEX : SFLAG_INTEXTURE; + RECT rect = {0, 0, surface->resource.width, surface->resource.height}; + + surface_blt_fbo(device, WINED3DTEXF_POINT, surface, src_location, + &rect, surface, dst_location, &rect); + + return WINED3D_OK; + } + /* Upload from system memory */
d3dfmt_get_conv(surface, TRUE /* We need color keying */,