Module: wine Branch: master Commit: 59e2f52ff8743825e81c0f2ef6afaa9892503098 URL: http://source.winehq.org/git/wine.git/?a=commit;h=59e2f52ff8743825e81c0f2ef6...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Mon Sep 9 10:26:18 2013 +0200
wined3d: Replace the "dirty" field in struct gl_texture with WINED3D_TEXTURE_ flags.
---
dlls/wined3d/texture.c | 66 +++++++++++++++++++--------------------- dlls/wined3d/wined3d_private.h | 9 +++-- 2 files changed, 36 insertions(+), 39 deletions(-)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index e9173ce..5d24ada 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -71,8 +71,6 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc texture->level_count = level_count; texture->filter_type = (desc->usage & WINED3DUSAGE_AUTOGENMIPMAP) ? WINED3D_TEXF_LINEAR : WINED3D_TEXF_NONE; texture->lod = 0; - texture->texture_rgb.dirty = TRUE; - texture->texture_srgb.dirty = TRUE; texture->flags = WINED3D_TEXTURE_POW2_MAT_IDENT;
if (texture->resource.format->flags & WINED3DFMT_FLAG_FILTERING) @@ -141,8 +139,7 @@ static void wined3d_texture_cleanup(struct wined3d_texture *texture)
void wined3d_texture_set_dirty(struct wined3d_texture *texture) { - texture->texture_rgb.dirty = TRUE; - texture->texture_srgb.dirty = TRUE; + texture->flags &= ~(WINED3D_TEXTURE_RGB_VALID | WINED3D_TEXTURE_SRGB_VALID); }
/* Context activation is done by the caller. */ @@ -677,14 +674,23 @@ static void texture2d_preload(struct wined3d_texture *texture, enum WINED3DSRGB struct wined3d_device *device = texture->resource.device; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; struct wined3d_context *context = NULL; - struct gl_texture *gl_tex; BOOL srgb_mode; + DWORD flag; UINT i;
TRACE("texture %p, srgb %#x.\n", texture, srgb);
srgb_mode = texture_srgb_mode(texture, srgb); - gl_tex = wined3d_texture_get_gl_texture(texture, gl_info, srgb_mode); + if (srgb_mode && !gl_info->supported[EXT_TEXTURE_SRGB_DECODE]) + 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; + }
if (!device->isInDraw) { @@ -693,21 +699,12 @@ static void texture2d_preload(struct wined3d_texture *texture, enum WINED3DSRGB context = context_acquire(device, NULL); }
- if (gl_tex->dirty) - { - /* 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); - } - } - else + /* Reload the surfaces if the texture is marked dirty. */ + for (i = 0; i < sub_count; ++i) { - TRACE("Texture %p not dirty, nothing to do.\n", texture); + surface_load(surface_from_resource(texture->sub_resources[i]), srgb_mode); } - - /* No longer dirty. */ - gl_tex->dirty = FALSE; + texture->flags |= flag;
if (context) context_release(context); } @@ -1059,35 +1056,34 @@ static void texture3d_preload(struct wined3d_texture *texture, enum WINED3DSRGB struct wined3d_device *device = texture->resource.device; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; struct wined3d_context *context = NULL; - struct gl_texture *gl_tex; BOOL srgb_mode; + DWORD flag; UINT i;
TRACE("texture %p, srgb %#x.\n", texture, srgb);
srgb_mode = texture_srgb_mode(texture, srgb); - gl_tex = wined3d_texture_get_gl_texture(texture, gl_info, srgb_mode); + if (srgb_mode && !gl_info->supported[EXT_TEXTURE_SRGB_DECODE]) + flag = WINED3D_TEXTURE_SRGB_VALID; + else + flag = WINED3D_TEXTURE_RGB_VALID;
- if (gl_tex->dirty) + if (texture->flags & flag) { - context = context_acquire(device, NULL); + 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); - } + context = context_acquire(device, NULL);
- context_release(context); - } - else + /* Reload the surfaces if the texture is marked dirty. */ + for (i = 0; i < sub_count; ++i) { - TRACE("Texture %p not dirty, nothing to do.\n", texture); + wined3d_volume_load(volume_from_resource(texture->sub_resources[i]), context, srgb_mode); } + texture->flags |= flag;
- /* No longer dirty. */ - gl_tex->dirty = FALSE; + context_release(context); }
static void texture3d_sub_resource_add_dirty_region(struct wined3d_resource *sub_resource, diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index b771869..925b9ca 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2057,7 +2057,6 @@ enum WINED3DSRGB struct gl_texture { DWORD states[MAX_WINETEXTURESTATES]; - BOOL dirty; GLuint name; };
@@ -2071,9 +2070,11 @@ struct wined3d_texture_ops void (*texture_sub_resource_cleanup)(struct wined3d_resource *sub_resource); };
-#define WINED3D_TEXTURE_COND_NP2 0x1 -#define WINED3D_TEXTURE_POW2_MAT_IDENT 0x2 -#define WINED3D_TEXTURE_IS_SRGB 0x4 +#define WINED3D_TEXTURE_COND_NP2 0x00000001 +#define WINED3D_TEXTURE_POW2_MAT_IDENT 0x00000002 +#define WINED3D_TEXTURE_IS_SRGB 0x00000004 +#define WINED3D_TEXTURE_RGB_VALID 0x00000008 +#define WINED3D_TEXTURE_SRGB_VALID 0x00000010
struct wined3d_texture {