[PATCH 2/5] wined3d: Pass a wined3d_context_gl structure to wined3d_texture_prepare_texture().

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


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/cs.c              |  5 ++--
 dlls/wined3d/surface.c         | 11 +++++----
 dlls/wined3d/texture.c         | 54 +++++++++++++++++++++++-------------------
 dlls/wined3d/view.c            |  2 +-
 dlls/wined3d/wined3d_private.h |  4 ++--
 5 files changed, 41 insertions(+), 35 deletions(-)

diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 05d39038843..8413d0f3c05 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -2228,7 +2228,8 @@ static void wined3d_cs_exec_blt_sub_resource(struct wined3d_cs *cs, const void *
                 && update_h == wined3d_texture_get_level_height(dst_texture, level)
                 && update_d == wined3d_texture_get_level_depth(dst_texture, level))
         {
-            wined3d_texture_prepare_texture(dst_texture, context, FALSE);
+            wined3d_texture_prepare_location(dst_texture, op->dst_sub_resource_idx,
+                    context, WINED3D_LOCATION_TEXTURE_RGB);
         }
         else if (!wined3d_texture_load_location(dst_texture, op->dst_sub_resource_idx,
                 context, WINED3D_LOCATION_TEXTURE_RGB))
@@ -2337,7 +2338,7 @@ static void wined3d_cs_exec_update_sub_resource(struct wined3d_cs *cs, const voi
     /* Only load the sub-resource for partial updates. */
     if (!box->left && !box->top && !box->front
             && box->right == width && box->bottom == height && box->back == depth)
-        wined3d_texture_prepare_texture(texture, context, FALSE);
+        wined3d_texture_prepare_location(texture, op->sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
     else
         wined3d_texture_load_location(texture, op->sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
 
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 0b6104d475b..291ae845254 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -693,7 +693,7 @@ static struct wined3d_texture *surface_convert_format(struct wined3d_texture *sr
 
         TRACE("Using upload conversion.\n");
 
-        wined3d_texture_prepare_texture(dst_texture, context, FALSE);
+        wined3d_texture_prepare_location(dst_texture, 0, context, WINED3D_LOCATION_TEXTURE_RGB);
         wined3d_texture_gl_bind_and_dirtify(wined3d_texture_gl(dst_texture), wined3d_context_gl(context), FALSE);
         wined3d_texture_upload_data(dst_texture, 0, context, src_format, &src_box,
                 wined3d_const_bo_address(&src_data), src_row_pitch, src_slice_pitch, 0, 0, 0, FALSE);
@@ -868,7 +868,7 @@ void texture2d_load_fb_texture(struct wined3d_texture_gl *texture_gl,
     gl_info = context->gl_info;
     device_invalidate_state(device, STATE_FRAMEBUFFER);
 
-    wined3d_texture_prepare_texture(&texture_gl->t, context, srgb);
+    wined3d_texture_gl_prepare_texture(texture_gl, context_gl, srgb);
     wined3d_texture_gl_bind_and_dirtify(texture_gl, context_gl, srgb);
 
     TRACE("Reading back offscreen render target %p, %u.\n", texture_gl, sub_resource_idx);
@@ -1529,6 +1529,7 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
         struct wined3d_context *context, BOOL srgb)
 {
     unsigned int width, height, level, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch;
+    struct wined3d_texture_gl *texture_gl = wined3d_texture_gl(texture);
     struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
     const struct wined3d_gl_info *gl_info = context->gl_info;
     struct wined3d_device *device = texture->resource.device;
@@ -1547,7 +1548,7 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
             && wined3d_resource_is_offscreen(&texture->resource)
             && (sub_resource->locations & WINED3D_LOCATION_DRAWABLE))
     {
-        texture2d_load_fb_texture(wined3d_texture_gl(texture), sub_resource_idx, srgb, context);
+        texture2d_load_fb_texture(texture_gl, sub_resource_idx, srgb, context);
 
         return TRUE;
     }
@@ -1621,8 +1622,8 @@ BOOL texture2d_load_texture(struct wined3d_texture *texture, unsigned int sub_re
         wined3d_texture_load_location(texture, sub_resource_idx, context, WINED3D_LOCATION_SYSMEM);
     }
 
-    wined3d_texture_prepare_texture(texture, context, srgb);
-    wined3d_texture_gl_bind_and_dirtify(wined3d_texture_gl(texture), wined3d_context_gl(context), srgb);
+    wined3d_texture_gl_prepare_texture(texture_gl, context_gl, srgb);
+    wined3d_texture_gl_bind_and_dirtify(texture_gl, context_gl, srgb);
     wined3d_texture_get_pitch(texture, level, &src_row_pitch, &src_slice_pitch);
 
     format = texture->resource.format;
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 5e84a82138a..8b27e59bc30 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -1715,52 +1715,53 @@ static void wined3d_texture_force_reload(struct wined3d_texture *texture)
 }
 
 /* Context activation is done by the caller. */
-void wined3d_texture_prepare_texture(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb)
+void wined3d_texture_gl_prepare_texture(struct wined3d_texture_gl *texture_gl,
+        struct wined3d_context_gl *context_gl, BOOL srgb)
 {
     DWORD alloc_flag = srgb ? WINED3D_TEXTURE_SRGB_ALLOCATED : WINED3D_TEXTURE_RGB_ALLOCATED;
-    const struct wined3d_d3d_info *d3d_info = context->d3d_info;
-    const struct wined3d_gl_info *gl_info = context->gl_info;
-    struct wined3d_resource *resource = &texture->resource;
+    const struct wined3d_d3d_info *d3d_info = context_gl->c.d3d_info;
+    const struct wined3d_gl_info *gl_info = context_gl->c.gl_info;
+    struct wined3d_resource *resource = &texture_gl->t.resource;
     const struct wined3d_device *device = resource->device;
     const struct wined3d_format *format = resource->format;
     const struct wined3d_color_key_conversion *conversion;
     const struct wined3d_format_gl *format_gl;
     GLenum internal;
 
-    TRACE("texture %p, context %p, format %s.\n", texture, context, debug_d3dformat(format->id));
+    TRACE("texture_gl %p, context_gl %p, format %s.\n", texture_gl, context_gl, debug_d3dformat(format->id));
 
     if (!d3d_info->shader_color_key
-            && !(texture->async.flags & WINED3D_TEXTURE_ASYNC_COLOR_KEY)
-            != !(texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT))
+            && !(texture_gl->t.async.flags & WINED3D_TEXTURE_ASYNC_COLOR_KEY)
+            != !(texture_gl->t.async.color_key_flags & WINED3D_CKEY_SRC_BLT))
     {
-        wined3d_texture_force_reload(texture);
+        wined3d_texture_force_reload(&texture_gl->t);
 
-        if (texture->async.color_key_flags & WINED3D_CKEY_SRC_BLT)
-            texture->async.flags |= WINED3D_TEXTURE_ASYNC_COLOR_KEY;
+        if (texture_gl->t.async.color_key_flags & WINED3D_CKEY_SRC_BLT)
+            texture_gl->t.async.flags |= WINED3D_TEXTURE_ASYNC_COLOR_KEY;
     }
 
-    if (texture->flags & alloc_flag)
+    if (texture_gl->t.flags & alloc_flag)
         return;
 
     if (resource->format_flags & WINED3DFMT_FLAG_DECOMPRESS)
     {
         TRACE("WINED3DFMT_FLAG_DECOMPRESS set.\n");
-        texture->flags |= WINED3D_TEXTURE_CONVERTED;
+        texture_gl->t.flags |= WINED3D_TEXTURE_CONVERTED;
         format = wined3d_resource_get_decompress_format(resource);
     }
     else if (format->conv_byte_count)
     {
-        texture->flags |= WINED3D_TEXTURE_CONVERTED;
+        texture_gl->t.flags |= WINED3D_TEXTURE_CONVERTED;
     }
-    else if ((conversion = wined3d_format_get_color_key_conversion(texture, TRUE)))
+    else if ((conversion = wined3d_format_get_color_key_conversion(&texture_gl->t, TRUE)))
     {
-        texture->flags |= WINED3D_TEXTURE_CONVERTED;
+        texture_gl->t.flags |= WINED3D_TEXTURE_CONVERTED;
         format = wined3d_get_format(device->adapter, conversion->dst_format, resource->bind_flags);
         TRACE("Using format %s for color key conversion.\n", debug_d3dformat(format->id));
     }
     format_gl = wined3d_format_gl(format);
 
-    wined3d_texture_gl_bind_and_dirtify(wined3d_texture_gl(texture), wined3d_context_gl(context), srgb);
+    wined3d_texture_gl_bind_and_dirtify(texture_gl, context_gl, srgb);
 
     if (srgb)
         internal = format_gl->srgb_internal;
@@ -1774,11 +1775,11 @@ void wined3d_texture_prepare_texture(struct wined3d_texture *texture, struct win
 
     TRACE("internal %#x, format %#x, type %#x.\n", internal, format_gl->format, format_gl->type);
 
-    if (wined3d_texture_use_immutable_storage(texture, gl_info))
-        wined3d_texture_gl_allocate_immutable_storage(wined3d_texture_gl(texture), internal, gl_info);
+    if (wined3d_texture_use_immutable_storage(&texture_gl->t, gl_info))
+        wined3d_texture_gl_allocate_immutable_storage(texture_gl, internal, gl_info);
     else
-        wined3d_texture_gl_allocate_mutable_storage(wined3d_texture_gl(texture), internal, format_gl, gl_info);
-    texture->flags |= alloc_flag;
+        wined3d_texture_gl_allocate_mutable_storage(texture_gl, internal, format_gl, gl_info);
+    texture_gl->t.flags |= alloc_flag;
 }
 
 static void wined3d_texture_gl_prepare_rb(struct wined3d_texture_gl *texture_gl,
@@ -1822,6 +1823,9 @@ static void wined3d_texture_gl_prepare_rb(struct wined3d_texture_gl *texture_gl,
 BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
         struct wined3d_context *context, DWORD location)
 {
+    struct wined3d_texture_gl *texture_gl = wined3d_texture_gl(texture);
+    struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
+
     switch (location)
     {
         case WINED3D_LOCATION_SYSMEM:
@@ -1842,11 +1846,11 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned
             return TRUE;
 
         case WINED3D_LOCATION_TEXTURE_RGB:
-            wined3d_texture_prepare_texture(texture, context, FALSE);
+            wined3d_texture_gl_prepare_texture(texture_gl, context_gl, FALSE);
             return TRUE;
 
         case WINED3D_LOCATION_TEXTURE_SRGB:
-            wined3d_texture_prepare_texture(texture, context, TRUE);
+            wined3d_texture_gl_prepare_texture(texture_gl, context_gl, TRUE);
             return TRUE;
 
         case WINED3D_LOCATION_DRAWABLE:
@@ -1855,11 +1859,11 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned
             return TRUE;
 
         case WINED3D_LOCATION_RB_MULTISAMPLE:
-            wined3d_texture_gl_prepare_rb(wined3d_texture_gl(texture), context->gl_info, TRUE);
+            wined3d_texture_gl_prepare_rb(texture_gl, context->gl_info, TRUE);
             return TRUE;
 
         case WINED3D_LOCATION_RB_RESOLVED:
-            wined3d_texture_gl_prepare_rb(wined3d_texture_gl(texture), context->gl_info, FALSE);
+            wined3d_texture_gl_prepare_rb(texture_gl, context->gl_info, FALSE);
             return TRUE;
 
         default:
@@ -3844,7 +3848,7 @@ void wined3d_texture_upload_from_texture(struct wined3d_texture *dst_texture, un
     if (update_w == wined3d_texture_get_level_width(dst_texture, dst_level)
             && update_h == wined3d_texture_get_level_height(dst_texture, dst_level)
             && update_d == wined3d_texture_get_level_depth(dst_texture, dst_level))
-        wined3d_texture_prepare_texture(dst_texture, context, FALSE);
+        wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
     else
         wined3d_texture_load_location(dst_texture, dst_sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
     wined3d_texture_gl_bind_and_dirtify(wined3d_texture_gl(dst_texture), wined3d_context_gl(context), FALSE);
diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c
index bd32b88e0eb..e0ac57e761e 100644
--- a/dlls/wined3d/view.c
+++ b/dlls/wined3d/view.c
@@ -190,7 +190,7 @@ static void create_texture_view(struct wined3d_gl_view *view, GLenum view_target
         return;
     }
 
-    wined3d_texture_prepare_texture(&texture_gl->t, context, FALSE);
+    wined3d_texture_gl_prepare_texture(texture_gl, context_gl, FALSE);
     texture_name = wined3d_texture_gl_get_texture_name(texture_gl, context, FALSE);
 
     level_idx = desc->u.texture.level_idx;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 04f160e9815..9617a44b32d 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3550,8 +3550,6 @@ BOOL wined3d_texture_load_location(struct wined3d_texture *texture,
         unsigned int sub_resource_idx, struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
 BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
         struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
-void wined3d_texture_prepare_texture(struct wined3d_texture *texture,
-        struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
 void wined3d_texture_set_map_binding(struct wined3d_texture *texture, DWORD map_binding) DECLSPEC_HIDDEN;
 void wined3d_texture_set_swapchain(struct wined3d_texture *texture,
         struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
@@ -3625,6 +3623,8 @@ void wined3d_texture_gl_bind(struct wined3d_texture_gl *texture_gl,
         struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
 void wined3d_texture_gl_bind_and_dirtify(struct wined3d_texture_gl *texture_gl,
         struct wined3d_context_gl *context_gl, BOOL srgb) DECLSPEC_HIDDEN;
+void wined3d_texture_gl_prepare_texture(struct wined3d_texture_gl *texture_gl,
+        struct wined3d_context_gl *context_gl, BOOL srgb) DECLSPEC_HIDDEN;
 void wined3d_texture_gl_set_compatible_renderbuffer(struct wined3d_texture_gl *texture_gl,
         struct wined3d_context *context, unsigned int level,
         const struct wined3d_rendertarget_info *rt) DECLSPEC_HIDDEN;
-- 
2.11.0




More information about the wine-devel mailing list