Module: wine Branch: master Commit: 86d63f1d5ac27a44c5b0a5ae8bf3799c2d75bc48 URL: http://source.winehq.org/git/wine.git/?a=commit;h=86d63f1d5ac27a44c5b0a5ae8b...
Author: Stefan Dösinger stefan@codeweavers.com Date: Wed Oct 9 12:38:00 2013 +0200
wined3d: Move sRGB_decode handling to the top of texture_bind / preload.
---
dlls/wined3d/texture.c | 27 ++++++++++++++++----------- dlls/wined3d/wined3d_private.h | 5 ++--- 2 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 0f3c470..69e7010 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -154,13 +154,16 @@ static HRESULT wined3d_texture_bind(struct wined3d_texture *texture,
TRACE("texture %p, context %p, srgb %#x, set_surface_desc %p.\n", texture, context, srgb, set_surface_desc);
+ if (gl_info->supported[EXT_TEXTURE_SRGB_DECODE]) + srgb = FALSE; + /* sRGB mode cache for preload() calls outside drawprim. */ if (srgb) texture->flags |= WINED3D_TEXTURE_IS_SRGB; else texture->flags &= ~WINED3D_TEXTURE_IS_SRGB;
- gl_tex = wined3d_texture_get_gl_texture(texture, context->gl_info, srgb); + gl_tex = wined3d_texture_get_gl_texture(texture, srgb); target = texture->target;
/* Generate a texture name if we don't already have one. */ @@ -282,8 +285,7 @@ void wined3d_texture_apply_state_changes(struct wined3d_texture *texture,
TRACE("texture %p, sampler_states %p.\n", texture, sampler_states);
- gl_tex = wined3d_texture_get_gl_texture(texture, gl_info, - texture->flags & WINED3D_TEXTURE_IS_SRGB); + gl_tex = wined3d_texture_get_gl_texture(texture, texture->flags & WINED3D_TEXTURE_IS_SRGB);
/* This function relies on the correct texture being bound and loaded. */
@@ -612,12 +614,11 @@ static HRESULT texture2d_bind(struct wined3d_texture *texture, if (set_gl_texture_desc && SUCCEEDED(hr)) { UINT sub_count = texture->level_count * texture->layer_count; - BOOL srgb_tex = !context->gl_info->supported[EXT_TEXTURE_SRGB_DECODE] - && (texture->flags & WINED3D_TEXTURE_IS_SRGB); + BOOL srgb_tex = texture->flags & WINED3D_TEXTURE_IS_SRGB; struct gl_texture *gl_tex; UINT i;
- gl_tex = wined3d_texture_get_gl_texture(texture, context->gl_info, srgb_tex); + gl_tex = wined3d_texture_get_gl_texture(texture, srgb_tex);
for (i = 0; i < sub_count; ++i) { @@ -658,7 +659,6 @@ static HRESULT texture2d_bind(struct wined3d_texture *texture,
static BOOL texture_srgb_mode(const struct wined3d_texture *texture, enum WINED3DSRGB srgb) { - const struct wined3d_gl_info *gl_info = &texture->resource.device->adapter->gl_info; switch (srgb) { case SRGB_RGB: @@ -668,8 +668,7 @@ static BOOL texture_srgb_mode(const struct wined3d_texture *texture, enum WINED3 return TRUE;
default: - return !gl_info->supported[EXT_TEXTURE_SRGB_DECODE] - && texture->flags & WINED3D_TEXTURE_IS_SRGB; + return texture->flags & WINED3D_TEXTURE_IS_SRGB; } }
@@ -685,8 +684,11 @@ static void texture2d_preload(struct wined3d_texture *texture,
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 && !gl_info->supported[EXT_TEXTURE_SRGB_DECODE]) + if (srgb_mode) flag = WINED3D_TEXTURE_SRGB_VALID; else flag = WINED3D_TEXTURE_RGB_VALID; @@ -1058,8 +1060,11 @@ static void texture3d_preload(struct wined3d_texture *texture,
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 && !gl_info->supported[EXT_TEXTURE_SRGB_DECODE]) + if (srgb_mode) flag = WINED3D_TEXTURE_SRGB_VALID; else flag = WINED3D_TEXTURE_RGB_VALID; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 09aa7a4..14cc378 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2102,10 +2102,9 @@ static inline struct wined3d_texture *wined3d_texture_from_resource(struct wined }
static inline struct gl_texture *wined3d_texture_get_gl_texture(struct wined3d_texture *texture, - const struct wined3d_gl_info *gl_info, BOOL srgb) + BOOL srgb) { - return srgb && !gl_info->supported[EXT_TEXTURE_SRGB_DECODE] - ? &texture->texture_srgb : &texture->texture_rgb; + return srgb ? &texture->texture_srgb : &texture->texture_rgb; }
void wined3d_texture_apply_state_changes(struct wined3d_texture *texture,