[PATCH 1/5] wined3d: Pass a wined3d_context_gl structure to context_unmap_bo_address().

Henri Verbeet hverbeet at codeweavers.com
Wed Jun 12 06:29:31 CDT 2019


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/context.c         |  9 ++++-----
 dlls/wined3d/surface.c         | 12 ++++++------
 dlls/wined3d/texture.c         | 14 +++++++++++---
 dlls/wined3d/wined3d_private.h |  4 ++--
 4 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index be24baf3187..76b5858c0b6 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -2618,16 +2618,15 @@ void *wined3d_context_gl_map_bo_address(struct wined3d_context_gl *context_gl,
     return memory;
 }
 
-void context_unmap_bo_address(struct wined3d_context *context,
+void wined3d_context_gl_unmap_bo_address(struct wined3d_context_gl *context_gl,
         const struct wined3d_bo_address *data, GLenum binding)
 {
-    struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
     const struct wined3d_gl_info *gl_info;
 
     if (!data->buffer_object)
         return;
 
-    gl_info = context->gl_info;
+    gl_info = context_gl->c.gl_info;
     wined3d_context_gl_bind_bo(context_gl, binding, data->buffer_object);
     GL_EXTCALL(glUnmapBuffer(binding));
     wined3d_context_gl_bind_bo(context_gl, binding, 0);
@@ -2660,8 +2659,8 @@ void wined3d_context_gl_copy_bo_address(struct wined3d_context_gl *context_gl,
 
             memcpy(dst_ptr, src_ptr, size);
 
-            context_unmap_bo_address(&context_gl->c, dst, dst_binding);
-            context_unmap_bo_address(&context_gl->c, src, src_binding);
+            wined3d_context_gl_unmap_bo_address(context_gl, dst, dst_binding);
+            wined3d_context_gl_unmap_bo_address(context_gl, src, src_binding);
         }
     }
     else if (!dst->buffer_object && src->buffer_object)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 5e28c46b114..0b6104d475b 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -684,8 +684,8 @@ static struct wined3d_texture *surface_convert_format(struct wined3d_texture *sr
         conv->convert(src, dst, src_row_pitch, dst_row_pitch, desc.width, desc.height);
 
         wined3d_texture_invalidate_location(dst_texture, 0, ~map_binding);
-        context_unmap_bo_address(context, &dst_data, GL_PIXEL_UNPACK_BUFFER);
-        context_unmap_bo_address(context, &src_data, GL_PIXEL_UNPACK_BUFFER);
+        wined3d_context_gl_unmap_bo_address(context_gl, &dst_data, GL_PIXEL_UNPACK_BUFFER);
+        wined3d_context_gl_unmap_bo_address(context_gl, &src_data, GL_PIXEL_UNPACK_BUFFER);
     }
     else
     {
@@ -1660,7 +1660,7 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
                 width, height, &texture->async.gl_color_key);
         src_row_pitch = dst_row_pitch;
         src_slice_pitch = dst_slice_pitch;
-        context_unmap_bo_address(context, &data, GL_PIXEL_UNPACK_BUFFER);
+        wined3d_context_gl_unmap_bo_address(context_gl, &data, GL_PIXEL_UNPACK_BUFFER);
 
         data.buffer_object = 0;
         data.addr = dst_mem;
@@ -2932,9 +2932,9 @@ error:
         FIXME("    Unsupported flags %#x.\n", flags);
 
 release:
-    context_unmap_bo_address(context, &dst_data, GL_PIXEL_UNPACK_BUFFER);
+    wined3d_context_gl_unmap_bo_address(context_gl, &dst_data, GL_PIXEL_UNPACK_BUFFER);
     if (!same_sub_resource)
-        context_unmap_bo_address(context, &src_data, GL_PIXEL_UNPACK_BUFFER);
+        wined3d_context_gl_unmap_bo_address(context_gl, &src_data, GL_PIXEL_UNPACK_BUFFER);
     if (SUCCEEDED(hr) && dst_texture->swapchain && dst_texture->swapchain->front_buffer == dst_texture)
     {
         SetRect(&dst_texture->swapchain->front_buffer_update,
@@ -3054,7 +3054,7 @@ static void surface_cpu_blt_colour_fill(struct wined3d_rendertarget_view *view,
         memcpy(row, map.data, w * bpp);
     }
 
-    context_unmap_bo_address(context, &data, GL_PIXEL_UNPACK_BUFFER);
+    wined3d_context_gl_unmap_bo_address(context_gl, &data, GL_PIXEL_UNPACK_BUFFER);
     if (context)
         context_release(context);
 }
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 2a8bff458e3..5e84a82138a 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -774,6 +774,7 @@ static void wined3d_texture_create_dc(void *object)
 static void wined3d_texture_destroy_dc(void *object)
 {
     const struct wined3d_texture_idx *idx = object;
+    struct wined3d_context_gl *context_gl = NULL;
     D3DKMT_DESTROYDCFROMMEMORY destroy_desc;
     struct wined3d_context *context = NULL;
     struct wined3d_texture *texture;
@@ -804,10 +805,13 @@ static void wined3d_texture_destroy_dc(void *object)
     dc_info->bitmap = NULL;
 
     if (device->d3d_initialized)
+    {
         context = context_acquire(device, NULL, 0);
+        context_gl = wined3d_context_gl(context);
+    }
 
     wined3d_texture_get_memory(texture, sub_resource_idx, &data, texture->resource.map_binding);
-    context_unmap_bo_address(context, &data, GL_PIXEL_UNPACK_BUFFER);
+    wined3d_context_gl_unmap_bo_address(context_gl, &data, GL_PIXEL_UNPACK_BUFFER);
 
     if (context)
         context_release(context);
@@ -2008,7 +2012,7 @@ void wined3d_texture_upload_data(struct wined3d_texture *texture, unsigned int s
         else
             format->upload(src_mem, converted_mem, src_row_pitch, src_slice_pitch,
                     dst_row_pitch, dst_slice_pitch, update_w, update_h, update_d);
-        context_unmap_bo_address(context, &bo, GL_PIXEL_UNPACK_BUFFER);
+        wined3d_context_gl_unmap_bo_address(context_gl, &bo, GL_PIXEL_UNPACK_BUFFER);
 
         bo.buffer_object = 0;
         bo.addr = converted_mem;
@@ -2715,6 +2719,7 @@ static HRESULT texture_resource_sub_resource_unmap(struct wined3d_resource *reso
 {
     struct wined3d_texture_sub_resource *sub_resource;
     struct wined3d_device *device = resource->device;
+    struct wined3d_context_gl *context_gl = NULL;
     struct wined3d_context *context = NULL;
     struct wined3d_texture *texture;
     struct wined3d_bo_address data;
@@ -2734,10 +2739,13 @@ static HRESULT texture_resource_sub_resource_unmap(struct wined3d_resource *reso
     }
 
     if (device->d3d_initialized)
+    {
         context = context_acquire(device, NULL, 0);
+        context_gl = wined3d_context_gl(context);
+    }
 
     wined3d_texture_get_memory(texture, sub_resource_idx, &data, texture->resource.map_binding);
-    context_unmap_bo_address(context, &data, GL_PIXEL_UNPACK_BUFFER);
+    wined3d_context_gl_unmap_bo_address(context_gl, &data, GL_PIXEL_UNPACK_BUFFER);
 
     if (context)
         context_release(context);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 4f0b91adaf1..04f160e9815 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2112,6 +2112,8 @@ void wined3d_context_gl_set_draw_buffer(struct wined3d_context_gl *context_gl, G
 void wined3d_context_gl_texture_update(struct wined3d_context_gl *context_gl,
         const struct wined3d_texture_gl *texture_gl) DECLSPEC_HIDDEN;
 void wined3d_context_gl_unload_tex_coords(const struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN;
+void wined3d_context_gl_unmap_bo_address(struct wined3d_context_gl *context_gl,
+        const struct wined3d_bo_address *data, GLenum binding) DECLSPEC_HIDDEN;
 void wined3d_context_gl_update_stream_sources(struct wined3d_context_gl *context_gl,
         const struct wined3d_state *state) DECLSPEC_HIDDEN;
 
@@ -2269,8 +2271,6 @@ void context_state_drawbuf(struct wined3d_context *context,
         const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
 void context_state_fb(struct wined3d_context *context,
         const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
-void context_unmap_bo_address(struct wined3d_context *context,
-        const struct wined3d_bo_address *data, GLenum binding) DECLSPEC_HIDDEN;
 
 /*****************************************************************************
  * Internal representation of a light
-- 
2.11.0




More information about the wine-devel mailing list