Henri Verbeet : wined3d: Get rid of SFLAG_LOCKED.

Alexandre Julliard julliard at winehq.org
Mon May 21 15:31:10 CDT 2012


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon May 21 20:48:34 2012 +0200

wined3d: Get rid of SFLAG_LOCKED.

---

 dlls/wined3d/surface.c         |   22 +++++++++++-----------
 dlls/wined3d/swapchain.c       |    2 +-
 dlls/wined3d/wined3d_private.h |    7 ++-----
 3 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 148c014..da31801 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -581,7 +581,7 @@ static void surface_prepare_system_memory(struct wined3d_surface *surface)
 
 static void surface_evict_sysmem(struct wined3d_surface *surface)
 {
-    if (surface->flags & SFLAG_DONOTFREE)
+    if (surface->resource.map_count || (surface->flags & SFLAG_DONOTFREE))
         return;
 
     HeapFree(GetProcessHeap(), 0, surface->resource.heapMemory);
@@ -1441,7 +1441,7 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC
                 fx->ddckSrcColorkey.color_space_high_value);
     }
 
-    if ((dst_surface->flags & SFLAG_LOCKED) || (src_surface && (src_surface->flags & SFLAG_LOCKED)))
+    if (dst_surface->resource.map_count || (src_surface && src_surface->resource.map_count))
     {
         WARN("Surface is busy, returning WINEDDERR_SURFACEBUSY.\n");
         return WINEDDERR_SURFACEBUSY;
@@ -2257,7 +2257,7 @@ static void surface_upload_data(struct wined3d_surface *surface, const struct wi
             surface, gl_info, debug_d3dformat(format->id), wine_dbgstr_rect(src_rect), src_pitch,
             wine_dbgstr_point(dst_point), srgb, data->buffer_object, data->addr);
 
-    if (surface->flags & SFLAG_LOCKED)
+    if (surface->resource.map_count)
     {
         WARN("Uploading a surface that is currently mapped, setting SFLAG_PIN_SYSMEM.\n");
         surface->flags |= SFLAG_PIN_SYSMEM;
@@ -3081,9 +3081,9 @@ HRESULT CDECL wined3d_surface_set_mem(struct wined3d_surface *surface, void *mem
 {
     TRACE("surface %p, mem %p.\n", surface, mem);
 
-    if (surface->flags & (SFLAG_LOCKED | SFLAG_DCINUSE))
+    if (surface->resource.map_count || (surface->flags & SFLAG_DCINUSE))
     {
-        WARN("Surface is locked or the DC is in use.\n");
+        WARN("Surface is mapped or the DC is in use.\n");
         return WINED3DERR_INVALIDCALL;
     }
 
@@ -3673,12 +3673,12 @@ HRESULT CDECL wined3d_surface_unmap(struct wined3d_surface *surface)
 {
     TRACE("surface %p.\n", surface);
 
-    if (!(surface->flags & SFLAG_LOCKED))
+    if (!surface->resource.map_count)
     {
         WARN("Trying to unmap unmapped surface.\n");
         return WINEDDERR_NOTLOCKED;
     }
-    surface->flags &= ~SFLAG_LOCKED;
+    --surface->resource.map_count;
 
     surface->surface_ops->surface_unmap(surface);
 
@@ -3693,7 +3693,7 @@ HRESULT CDECL wined3d_surface_map(struct wined3d_surface *surface,
     TRACE("surface %p, map_desc %p, rect %s, flags %#x.\n",
             surface, map_desc, wine_dbgstr_rect(rect), flags);
 
-    if (surface->flags & SFLAG_LOCKED)
+    if (surface->resource.map_count)
     {
         WARN("Surface is already mapped.\n");
         return WINED3DERR_INVALIDCALL;
@@ -3717,7 +3717,7 @@ HRESULT CDECL wined3d_surface_map(struct wined3d_surface *surface,
         }
     }
 
-    surface->flags |= SFLAG_LOCKED;
+    ++surface->resource.map_count;
 
     if (!(surface->flags & SFLAG_LOCKABLE))
         WARN("Trying to lock unlockable surface.\n");
@@ -3797,7 +3797,7 @@ HRESULT CDECL wined3d_surface_getdc(struct wined3d_surface *surface, HDC *dc)
         return WINEDDERR_DCALREADYCREATED;
 
     /* Can't GetDC if the surface is locked. */
-    if (surface->flags & SFLAG_LOCKED)
+    if (surface->resource.map_count)
         return WINED3DERR_INVALIDCALL;
 
     /* Create a DIB section if there isn't a dc yet. */
@@ -5486,7 +5486,7 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(struct wined3d_surface *dst_surfa
             fb_copy_to_texture_hwstretch(dst_surface, src_surface, src_rect, dst_rect, filter);
         }
 
-        if (!(dst_surface->flags & SFLAG_DONOTFREE))
+        if (!dst_surface->resource.map_count && !(dst_surface->flags & SFLAG_DONOTFREE))
         {
             HeapFree(GetProcessHeap(), 0, dst_surface->resource.heapMemory);
             dst_surface->resource.allocatedMemory = NULL;
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index a98ac9f..14796d2 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -714,7 +714,7 @@ void x11_copy_to_screen(const struct wined3d_swapchain *swapchain, const RECT *r
     if (!(front->resource.usage & WINED3DUSAGE_RENDERTARGET))
         return;
 
-    if (front->flags & SFLAG_LOCKED)
+    if (front->resource.map_count)
         ERR("Trying to blit a mapped surface.\n");
 
     TRACE("Copying surface %p to screen.\n", front);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 6dad53d..0525471 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2140,7 +2140,7 @@ void flip_surface(struct wined3d_surface *front, struct wined3d_surface *back) D
 #define SFLAG_NORMCOORD         0x00000008 /* Set if GL texture coordinates are normalized (non-texture rectangle). */
 #define SFLAG_LOCKABLE          0x00000010 /* Surface can be locked. */
 #define SFLAG_DYNLOCK           0x00000020 /* Surface is often locked by the application. */
-#define SFLAG_LOCKED            0x00000040 /* Surface is currently locked. */
+#define SFLAG_PIN_SYSMEM        0x00000040 /* Keep the surface in sysmem, at the same address. */
 #define SFLAG_DCINUSE           0x00000080 /* Set between GetDC and ReleaseDC calls. */
 #define SFLAG_LOST              0x00000100 /* Surface lost flag for ddraw. */
 #define SFLAG_GLCKEY            0x00000200 /* The GL texture was created with a color key. */
@@ -2157,20 +2157,17 @@ void flip_surface(struct wined3d_surface *front, struct wined3d_surface *back) D
 #define SFLAG_INDRAWABLE        0x00100000 /* The GL drawable is current. */
 #define SFLAG_INRB_MULTISAMPLE  0x00200000 /* The multisample renderbuffer is current. */
 #define SFLAG_INRB_RESOLVED     0x00400000 /* The resolved renderbuffer is current. */
-#define SFLAG_PIN_SYSMEM        0x02000000 /* Keep the surface in sysmem, at the same address. */
-#define SFLAG_DISCARDED         0x04000000 /* Surface was discarded, allocating new location is enough. */
+#define SFLAG_DISCARDED         0x00800000 /* Surface was discarded, allocating new location is enough. */
 
 /* In some conditions the surface memory must not be freed:
  * SFLAG_CONVERTED: Converting the data back would take too long
  * SFLAG_DIBSECTION: The dib code manages the memory
- * SFLAG_LOCKED: The app requires access to the surface data
  * SFLAG_DYNLOCK: Avoid freeing the data for performance
  * SFLAG_PBO: PBOs don't use 'normal' memory. It is either allocated by the driver or must be NULL.
  * SFLAG_CLIENT: OpenGL uses our memory as backup
  */
 #define SFLAG_DONOTFREE     (SFLAG_CONVERTED        | \
                              SFLAG_DYNLOCK          | \
-                             SFLAG_LOCKED           | \
                              SFLAG_CLIENT           | \
                              SFLAG_DIBSECTION       | \
                              SFLAG_USERPTR          | \




More information about the wine-cvs mailing list