Module: wine Branch: master Commit: e0beab8b817d0ad0594c2b157ae5b9d14f4d1a97 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e0beab8b817d0ad0594c2b157a...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Nov 22 10:45:02 2013 +0100
wined3d: Merge texture2d_preload() and texture3d_preload() into wined3d_texture_load().
---
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