From: Henri Verbeet Subject: [PATCH 1/4] wined3d: Filter sRGB capabilities during format initialization. Message-Id: <1298876739-17611-1-git-send-email-hverbeet@gmail.com> Date: Mon, 28 Feb 2011 08:05:36 +0100 --- dlls/wined3d/directx.c | 2 +- dlls/wined3d/utils.c | 8 ++++++++ dlls/wined3d/volumetexture.c | 3 +-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 899011e..d80df10 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -3159,7 +3159,7 @@ static BOOL CheckRenderTargetCapability(const struct wined3d_adapter *adapter, static BOOL CheckSrgbReadCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *format) { - return adapter->gl_info.supported[EXT_TEXTURE_SRGB] && (format->flags & WINED3DFMT_FLAG_SRGB_READ); + return format->flags & WINED3DFMT_FLAG_SRGB_READ; } static BOOL CheckSrgbWriteCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *format) diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 220e5fe..4c91644 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -1197,6 +1197,14 @@ static BOOL init_format_texture_info(struct wined3d_gl_info *gl_info) format->flags |= format_texture_info[i].flags; format->heightscale = 1.0f; + /* Filter sRGB capabilities if EXT_texture_sRGB is not supported. */ + if (!gl_info->supported[EXT_TEXTURE_SRGB] + && format->glGammaInternal != format->glInternal) + { + format->glGammaInternal = format->glInternal; + format->flags &= ~(WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE); + } + /* Texture conversion stuff */ format->convert = format_texture_info[i].convert; format->conv_byte_count = format_texture_info[i].conv_byte_count; diff --git a/dlls/wined3d/volumetexture.c b/dlls/wined3d/volumetexture.c index 7da1cf1..37c51bb 100644 --- a/dlls/wined3d/volumetexture.c +++ b/dlls/wined3d/volumetexture.c @@ -40,7 +40,6 @@ static HRESULT volumetexture_bind(IWineD3DBaseTextureImpl *texture, BOOL srgb) static void volumetexture_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb) { IWineD3DDeviceImpl *device = texture->resource.device; - const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; struct wined3d_context *context = NULL; BOOL srgb_mode = texture->baseTexture.is_srgb; BOOL srgb_was_toggled = FALSE; @@ -49,7 +48,7 @@ static void volumetexture_preload(IWineD3DBaseTextureImpl *texture, enum WINED3D TRACE("texture %p, srgb %#x.\n", texture, srgb); if (!device->isInDraw) context = context_acquire(device, NULL); - else if (gl_info->supported[EXT_TEXTURE_SRGB] && texture->baseTexture.bindCount > 0) + else if (texture->baseTexture.bindCount > 0) { srgb_mode = device->stateBlock->state.sampler_states[texture->baseTexture.sampler][WINED3DSAMP_SRGBTEXTURE]; srgb_was_toggled = texture->baseTexture.is_srgb != srgb_mode; -- 1.7.3.4