Henri Verbeet : wined3d: Allow loading multisampled surfaces into sysmem.

Alexandre Julliard julliard at winehq.org
Thu Oct 20 14:25:07 CDT 2011


Module: wine
Branch: master
Commit: 82f067f5cdf00b8b9cf61cf775900ac99a3f0877
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=82f067f5cdf00b8b9cf61cf775900ac99a3f0877

Author: Henri Verbeet <hverbeet at 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 */,




More information about the wine-cvs mailing list