[PATCH 6/6] wined3d: Merge wined3d_surface_unmap() and wined3d_volume_unmap().

Henri Verbeet hverbeet at codeweavers.com
Wed Mar 9 09:21:58 CST 2016


From: Stefan Dösinger <stefan at codeweavers.com>

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/d3d8/volume.c             |  2 ++
 dlls/d3d9/volume.c             |  2 ++
 dlls/wined3d/surface.c         | 51 ------------------------------
 dlls/wined3d/texture.c         | 70 +++++++++++++++++++++++++++++++++---------
 dlls/wined3d/volume.c          | 30 ------------------
 dlls/wined3d/wined3d_private.h |  2 --
 6 files changed, 59 insertions(+), 98 deletions(-)

diff --git a/dlls/d3d8/volume.c b/dlls/d3d8/volume.c
index f3a30a8..dd75fff 100644
--- a/dlls/d3d8/volume.c
+++ b/dlls/d3d8/volume.c
@@ -168,6 +168,8 @@ static HRESULT WINAPI d3d8_volume_UnlockBox(IDirect3DVolume8 *iface)
     hr = wined3d_resource_unmap(wined3d_texture_get_resource(volume->wined3d_texture), volume->sub_resource_idx);
     wined3d_mutex_unlock();
 
+    if (hr == WINEDDERR_NOTLOCKED)
+        return D3DERR_INVALIDCALL;
     return hr;
 }
 
diff --git a/dlls/d3d9/volume.c b/dlls/d3d9/volume.c
index d92f555..c032a01 100644
--- a/dlls/d3d9/volume.c
+++ b/dlls/d3d9/volume.c
@@ -168,6 +168,8 @@ static HRESULT WINAPI d3d9_volume_UnlockBox(IDirect3DVolume9 *iface)
     hr = wined3d_resource_unmap(wined3d_texture_get_resource(volume->wined3d_texture), volume->sub_resource_idx);
     wined3d_mutex_unlock();
 
+    if (hr == WINEDDERR_NOTLOCKED)
+        return D3DERR_INVALIDCALL;
     return hr;
 }
 
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index f15d62a..1169c00 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -2078,57 +2078,6 @@ do { \
     return WINED3D_OK;
 }
 
-HRESULT wined3d_surface_unmap(struct wined3d_surface *surface)
-{
-    struct wined3d_device *device = surface->resource.device;
-    struct wined3d_texture *texture = surface->container;
-    const struct wined3d_gl_info *gl_info;
-    struct wined3d_context *context;
-
-    TRACE("surface %p.\n", surface);
-
-    if (!surface->resource.map_count)
-    {
-        WARN("Trying to unmap unmapped surface.\n");
-        return WINEDDERR_NOTLOCKED;
-    }
-    --surface->resource.map_count;
-
-    switch (surface->resource.map_binding)
-    {
-        case WINED3D_LOCATION_SYSMEM:
-        case WINED3D_LOCATION_USER_MEMORY:
-        case WINED3D_LOCATION_DIB:
-            break;
-
-        case WINED3D_LOCATION_BUFFER:
-            context = context_acquire(device, NULL);
-            gl_info = context->gl_info;
-
-            GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER,
-                    texture->sub_resources[surface_get_sub_resource_idx(surface)].buffer_object));
-            GL_EXTCALL(glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER));
-            GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0));
-            checkGLcall("glUnmapBuffer");
-            context_release(context);
-            break;
-
-        default:
-            ERR("Unexpected map binding %s.\n", wined3d_debug_location(surface->resource.map_binding));
-            break;
-    }
-
-    if (!(surface->locations & (WINED3D_LOCATION_DRAWABLE | WINED3D_LOCATION_TEXTURE_RGB)))
-    {
-        if (texture->swapchain && texture->swapchain->front_buffer == texture)
-            texture->swapchain->swapchain_ops->swapchain_frontbuffer_updated(texture->swapchain);
-        else if (texture->resource.format_flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))
-            FIXME("Depth / stencil buffer locking is not implemented.\n");
-    }
-
-    return WINED3D_OK;
-}
-
 HRESULT wined3d_surface_map(struct wined3d_surface *surface, struct wined3d_map_desc *map_desc,
         const struct wined3d_box *box, DWORD flags)
 {
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index d0f1f91..9963c75 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -1028,14 +1028,64 @@ static HRESULT texture2d_resource_sub_resource_map(struct wined3d_resource *reso
     return wined3d_surface_map(surface_from_resource(sub_resource), map_desc, box, flags);
 }
 
-static HRESULT texture2d_resource_sub_resource_unmap(struct wined3d_resource *resource, unsigned int sub_resource_idx)
+static HRESULT texture_resource_sub_resource_unmap(struct wined3d_resource *resource, unsigned int sub_resource_idx)
 {
+    const struct wined3d_gl_info *gl_info;
     struct wined3d_resource *sub_resource;
+    struct wined3d_texture *texture;
+    struct wined3d_context *context;
 
-    if (!(sub_resource = wined3d_texture_get_sub_resource(wined3d_texture_from_resource(resource), sub_resource_idx)))
+    TRACE("resource %p, sub_resource_idx %u.\n", resource, sub_resource_idx);
+
+    texture = wined3d_texture_from_resource(resource);
+    if (!(sub_resource = wined3d_texture_get_sub_resource(texture, sub_resource_idx)))
         return E_INVALIDARG;
 
-    return wined3d_surface_unmap(surface_from_resource(sub_resource));
+    if (!sub_resource->map_count)
+    {
+        WARN("Trying to unmap unmapped sub-resource.\n");
+        return WINEDDERR_NOTLOCKED;
+    }
+
+    switch (sub_resource->map_binding)
+    {
+        case WINED3D_LOCATION_SYSMEM:
+        case WINED3D_LOCATION_USER_MEMORY:
+        case WINED3D_LOCATION_DIB:
+            break;
+
+        case WINED3D_LOCATION_BUFFER:
+            context = context_acquire(resource->device, NULL);
+            gl_info = context->gl_info;
+
+            GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER,
+                    texture->sub_resources[sub_resource_idx].buffer_object));
+            GL_EXTCALL(glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER));
+            GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0));
+            checkGLcall("glUnmapBuffer");
+            context_release(context);
+            break;
+
+        default:
+            ERR("Unexpected map binding %s.\n", wined3d_debug_location(sub_resource->map_binding));
+            break;
+    }
+
+    if (texture->swapchain && texture->swapchain->front_buffer == texture)
+    {
+        struct wined3d_surface *surface = texture->sub_resources[sub_resource_idx].u.surface;
+
+        if (!(surface->locations & (WINED3D_LOCATION_DRAWABLE | WINED3D_LOCATION_TEXTURE_RGB)))
+            texture->swapchain->swapchain_ops->swapchain_frontbuffer_updated(texture->swapchain);
+    }
+    else if (resource->format_flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))
+    {
+        FIXME("Depth / stencil buffer locking is not implemented.\n");
+    }
+
+    --sub_resource->map_count;
+
+    return WINED3D_OK;
 }
 
 static const struct wined3d_resource_ops texture2d_resource_ops =
@@ -1044,7 +1094,7 @@ static const struct wined3d_resource_ops texture2d_resource_ops =
     texture_resource_decref,
     wined3d_texture_unload,
     texture2d_resource_sub_resource_map,
-    texture2d_resource_sub_resource_unmap,
+    texture_resource_sub_resource_unmap,
 };
 
 static HRESULT texture_init(struct wined3d_texture *texture, const struct wined3d_resource_desc *desc,
@@ -1358,23 +1408,13 @@ static HRESULT texture3d_resource_sub_resource_map(struct wined3d_resource *reso
     return wined3d_volume_map(volume_from_resource(sub_resource), map_desc, box, flags);
 }
 
-static HRESULT texture3d_resource_sub_resource_unmap(struct wined3d_resource *resource, unsigned int sub_resource_idx)
-{
-    struct wined3d_resource *sub_resource;
-
-    if (!(sub_resource = wined3d_texture_get_sub_resource(wined3d_texture_from_resource(resource), sub_resource_idx)))
-        return E_INVALIDARG;
-
-    return wined3d_volume_unmap(volume_from_resource(sub_resource));
-}
-
 static const struct wined3d_resource_ops texture3d_resource_ops =
 {
     texture_resource_incref,
     texture_resource_decref,
     wined3d_texture_unload,
     texture3d_resource_sub_resource_map,
-    texture3d_resource_sub_resource_unmap,
+    texture_resource_sub_resource_unmap,
 };
 
 static HRESULT volumetexture_init(struct wined3d_texture *texture, const struct wined3d_resource_desc *desc,
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index 6eb7622..7bde024 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -579,36 +579,6 @@ HRESULT wined3d_volume_map(struct wined3d_volume *volume,
     return WINED3D_OK;
 }
 
-HRESULT wined3d_volume_unmap(struct wined3d_volume *volume)
-{
-    TRACE("volume %p.\n", volume);
-
-    if (!volume->resource.map_count)
-    {
-        WARN("Trying to unlock an unlocked volume %p.\n", volume);
-        return WINED3DERR_INVALIDCALL;
-    }
-
-    if (volume->resource.map_binding == WINED3D_LOCATION_BUFFER)
-    {
-        struct wined3d_device *device = volume->resource.device;
-        struct wined3d_context *context = context_acquire(device, NULL);
-        const struct wined3d_gl_info *gl_info = context->gl_info;
-
-        GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER,
-                volume->container->sub_resources[volume->texture_level].buffer_object));
-        GL_EXTCALL(glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER));
-        GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0));
-        checkGLcall("Unmap PBO");
-
-        context_release(context);
-    }
-
-    volume->resource.map_count--;
-
-    return WINED3D_OK;
-}
-
 static ULONG volume_resource_incref(struct wined3d_resource *resource)
 {
     struct wined3d_volume *volume = volume_from_resource(resource);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index ecd37a0..8d64854 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2491,7 +2491,6 @@ void wined3d_volume_load(struct wined3d_volume *volume, struct wined3d_context *
 HRESULT wined3d_volume_map(struct wined3d_volume *volume,
         struct wined3d_map_desc *map_desc, const struct wined3d_box *box, DWORD flags) DECLSPEC_HIDDEN;
 void wined3d_volume_validate_location(struct wined3d_volume *volume, DWORD location) DECLSPEC_HIDDEN;
-HRESULT wined3d_volume_unmap(struct wined3d_volume *volume) DECLSPEC_HIDDEN;
 void wined3d_volume_upload_data(struct wined3d_volume *volume, const struct wined3d_context *context,
         const struct wined3d_const_bo_address *data) DECLSPEC_HIDDEN;
 
@@ -2618,7 +2617,6 @@ void surface_set_compatible_renderbuffer(struct wined3d_surface *surface,
 void surface_set_dirty(struct wined3d_surface *surface) DECLSPEC_HIDDEN;
 void surface_set_texture_target(struct wined3d_surface *surface, GLenum target, GLint level) DECLSPEC_HIDDEN;
 void surface_translate_drawable_coords(const struct wined3d_surface *surface, HWND window, RECT *rect) DECLSPEC_HIDDEN;
-HRESULT wined3d_surface_unmap(struct wined3d_surface *surface) DECLSPEC_HIDDEN;
 HRESULT wined3d_surface_update_desc(struct wined3d_surface *surface,
         const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
 HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const POINT *dst_point,
-- 
2.1.4




More information about the wine-patches mailing list