From 6cf8708ce55fb38c400c8f005e55170f54241187 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 12 Aug 2016 14:48:54 -0700 Subject: [PATCH] meta: Always do GenerateMipmaps in linear colorspace. When generating mipmaps for sRGB textures, force both decode and encode, so the filtering is done in linear colorspace, regardless of settings. Fixes a WebGL conformance test in Chrome: https://www.khronos.org/registry/webgl/sdk/tests/conformance2/textures/misc/tex-srgb-mipmap.html?webglVersion=2 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97322 Signed-off-by: Kenneth Graunke Reviewed-by: Topi Pohjolainen --- src/mesa/drivers/common/meta_generate_mipmap.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/common/meta_generate_mipmap.c b/src/mesa/drivers/common/meta_generate_mipmap.c index 9cebbf79fd5..bbe9d6d8863 100644 --- a/src/mesa/drivers/common/meta_generate_mipmap.c +++ b/src/mesa/drivers/common/meta_generate_mipmap.c @@ -221,9 +221,17 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target, GL_LINEAR); _mesa_set_sampler_wrap(ctx, mipmap->samp_obj, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE); + } + + if (ctx->Extensions.EXT_texture_sRGB_decode) { + const struct gl_texture_image *baseImage = + _mesa_select_tex_image(texObj, target, texObj->BaseLevel); + const bool srgb = + _mesa_get_format_color_encoding(baseImage->TexFormat) == GL_SRGB; - /* We don't want to encode or decode sRGB values; treat them as linear. */ - _mesa_set_sampler_srgb_decode(ctx, mipmap->samp_obj, GL_SKIP_DECODE_EXT); + _mesa_set_sampler_srgb_decode(ctx, mipmap->samp_obj, + srgb ? GL_DECODE_EXT : GL_SKIP_DECODE_EXT); + _mesa_set_framebuffer_srgb(ctx, srgb); } _mesa_bind_sampler(ctx, ctx->Texture.CurrentUnit, mipmap->samp_obj); -- 2.30.2