[PATCH 3/5] wined3d: Merge texture2d_preload() and texture3d_preload() into wined3d_texture_load().
Henri Verbeet
hverbeet at codeweavers.com
Fri Nov 22 03:45:02 CST 2013
---
dlls/wined3d/context.c | 2 +-
dlls/wined3d/device.c | 2 +-
dlls/wined3d/surface.c | 2 +-
dlls/wined3d/texture.c | 140 +++++++++++++++++-----------------------
dlls/wined3d/wined3d_private.h | 6 +-
5 files changed, 65 insertions(+), 87 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index e5bbb91..e451a67 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -2797,7 +2797,7 @@ static void context_preload_texture(struct wined3d_context *context,
return;
srgb = state->sampler_states[idx][WINED3D_SAMP_SRGB_TEXTURE] ? SRGB_SRGB : SRGB_RGB;
- texture->texture_ops->texture_preload(texture, context, srgb);
+ wined3d_texture_load(texture, context, srgb);
}
/* Context activation is done by the caller. */
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index f28ce27..ed5e61c 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3402,7 +3402,7 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device,
/* Make sure that the destination texture is loaded. */
context = context_acquire(device, NULL);
- dst_texture->texture_ops->texture_preload(dst_texture, context, SRGB_RGB);
+ wined3d_texture_load(dst_texture, context, SRGB_RGB);
context_release(context);
/* Update every surface level of the texture. */
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 1523d5c..d3a0b13 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -3455,7 +3455,7 @@ void surface_internal_preload(struct wined3d_surface *surface,
TRACE("iface %p, srgb %#x.\n", surface, srgb);
- texture->texture_ops->texture_preload(texture, context, srgb);
+ wined3d_texture_load(texture, context, srgb);
}
/* Read the framebuffer back into the surface */
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 08638a5..755335f 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -508,11 +508,60 @@ DWORD CDECL wined3d_texture_get_priority(const struct wined3d_texture *texture)
return resource_get_priority(&texture->resource);
}
+/* Context activation is done by the caller */
+void wined3d_texture_load(struct wined3d_texture *texture,
+ struct wined3d_context *context, enum WINED3DSRGB srgb)
+{
+ UINT sub_count = texture->level_count * texture->layer_count;
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ BOOL srgb_mode;
+ DWORD flag;
+ UINT i;
+
+ TRACE("texture %p, srgb %#x.\n", texture, srgb);
+
+ if (gl_info->supported[EXT_TEXTURE_SRGB_DECODE])
+ srgb = SRGB_RGB;
+
+ switch (srgb)
+ {
+ case SRGB_RGB:
+ srgb_mode = FALSE;
+ break;
+
+ case SRGB_SRGB:
+ srgb_mode = TRUE;
+ break;
+
+ default:
+ srgb_mode = texture->flags & WINED3D_TEXTURE_IS_SRGB;
+ break;
+ }
+
+ if (srgb_mode)
+ flag = WINED3D_TEXTURE_SRGB_VALID;
+ else
+ flag = WINED3D_TEXTURE_RGB_VALID;
+
+ if (texture->flags & flag)
+ {
+ TRACE("Texture %p not dirty, nothing to do.\n", texture);
+ return;
+ }
+
+ /* Reload the surfaces if the texture is marked dirty. */
+ for (i = 0; i < sub_count; ++i)
+ {
+ texture->texture_ops->texture_sub_resource_load(texture->sub_resources[i], context, srgb_mode);
+ }
+ texture->flags |= flag;
+}
+
void CDECL wined3d_texture_preload(struct wined3d_texture *texture)
{
struct wined3d_context *context;
context = context_acquire(texture->resource.device, NULL);
- texture->texture_ops->texture_preload(texture, context, SRGB_ANY);
+ wined3d_texture_load(texture, context, SRGB_ANY);
context_release(context);
}
@@ -631,54 +680,10 @@ HRESULT CDECL wined3d_texture_add_dirty_region(struct wined3d_texture *texture,
return WINED3D_OK;
}
-static BOOL texture_srgb_mode(const struct wined3d_texture *texture, enum WINED3DSRGB srgb)
-{
- switch (srgb)
- {
- case SRGB_RGB:
- return FALSE;
-
- case SRGB_SRGB:
- return TRUE;
-
- default:
- return texture->flags & WINED3D_TEXTURE_IS_SRGB;
- }
-}
-
-/* Context activation is done by the caller */
-static void texture2d_preload(struct wined3d_texture *texture,
- struct wined3d_context *context, enum WINED3DSRGB srgb)
+static void texture2d_sub_resource_load(struct wined3d_resource *sub_resource,
+ struct wined3d_context *context, BOOL srgb)
{
- UINT sub_count = texture->level_count * texture->layer_count;
- const struct wined3d_gl_info *gl_info = context->gl_info;
- BOOL srgb_mode;
- DWORD flag;
- UINT i;
-
- TRACE("texture %p, srgb %#x.\n", texture, srgb);
-
- if (gl_info->supported[EXT_TEXTURE_SRGB_DECODE])
- srgb = SRGB_RGB;
-
- srgb_mode = texture_srgb_mode(texture, srgb);
- if (srgb_mode)
- flag = WINED3D_TEXTURE_SRGB_VALID;
- else
- flag = WINED3D_TEXTURE_RGB_VALID;
-
- if (texture->flags & flag)
- {
- TRACE("Texture %p not dirty, nothing to do.\n", texture);
- return;
- }
-
- /* Reload the surfaces if the texture is marked dirty. */
- for (i = 0; i < sub_count; ++i)
- {
- surface_load(surface_from_resource(texture->sub_resources[i]), srgb_mode);
- }
- texture->flags |= flag;
+ surface_load(surface_from_resource(sub_resource), srgb);
}
static void texture2d_sub_resource_add_dirty_region(struct wined3d_resource *sub_resource,
@@ -698,7 +703,7 @@ static void texture2d_sub_resource_cleanup(struct wined3d_resource *sub_resource
static const struct wined3d_texture_ops texture2d_ops =
{
- texture2d_preload,
+ texture2d_sub_resource_load,
texture2d_sub_resource_add_dirty_region,
texture2d_sub_resource_cleanup,
};
@@ -998,39 +1003,10 @@ static HRESULT texture_init(struct wined3d_texture *texture, const struct wined3
return WINED3D_OK;
}
-/* Context activation is done by the caller. */
-static void texture3d_preload(struct wined3d_texture *texture,
- struct wined3d_context *context, enum WINED3DSRGB srgb)
+static void texture3d_sub_resource_load(struct wined3d_resource *sub_resource,
+ struct wined3d_context *context, BOOL srgb)
{
- UINT sub_count = texture->level_count * texture->layer_count;
- const struct wined3d_gl_info *gl_info = context->gl_info;
- BOOL srgb_mode;
- DWORD flag;
- UINT i;
-
- TRACE("texture %p, srgb %#x.\n", texture, srgb);
-
- if (gl_info->supported[EXT_TEXTURE_SRGB_DECODE])
- srgb = SRGB_RGB;
-
- srgb_mode = texture_srgb_mode(texture, srgb);
- if (srgb_mode)
- flag = WINED3D_TEXTURE_SRGB_VALID;
- else
- flag = WINED3D_TEXTURE_RGB_VALID;
-
- if (texture->flags & flag)
- {
- TRACE("Texture %p not dirty, nothing to do.\n", texture);
- return;
- }
-
- /* Reload the surfaces if the texture is marked dirty. */
- for (i = 0; i < sub_count; ++i)
- {
- wined3d_volume_load(volume_from_resource(texture->sub_resources[i]), context, srgb_mode);
- }
- texture->flags |= flag;
+ wined3d_volume_load(volume_from_resource(sub_resource), context, srgb);
}
static void texture3d_sub_resource_add_dirty_region(struct wined3d_resource *sub_resource,
@@ -1049,7 +1025,7 @@ static void texture3d_sub_resource_cleanup(struct wined3d_resource *sub_resource
static const struct wined3d_texture_ops texture3d_ops =
{
- texture3d_preload,
+ texture3d_sub_resource_load,
texture3d_sub_resource_add_dirty_region,
texture3d_sub_resource_cleanup,
};
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index e8bc18b..ff50aec 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2058,8 +2058,8 @@ struct gl_texture
struct wined3d_texture_ops
{
- void (*texture_preload)(struct wined3d_texture *texture, struct wined3d_context *context,
- enum WINED3DSRGB srgb);
+ void (*texture_sub_resource_load)(struct wined3d_resource *sub_resource,
+ struct wined3d_context *context, BOOL srgb);
void (*texture_sub_resource_add_dirty_region)(struct wined3d_resource *sub_resource,
const struct wined3d_box *dirty_region);
void (*texture_sub_resource_cleanup)(struct wined3d_resource *sub_resource);
@@ -2107,6 +2107,8 @@ void wined3d_texture_bind(struct wined3d_texture *texture,
struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture,
struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
+void wined3d_texture_load(struct wined3d_texture *texture,
+ struct wined3d_context *context, enum WINED3DSRGB srgb) DECLSPEC_HIDDEN;
void wined3d_texture_set_dirty(struct wined3d_texture *texture) DECLSPEC_HIDDEN;
#define WINED3D_VFLAG_ALLOCATED 0x00000001
--
1.7.10.4
More information about the wine-patches
mailing list