summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/common/meta_generate_mipmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/common/meta_generate_mipmap.c')
-rw-r--r--src/mesa/drivers/common/meta_generate_mipmap.c12
1 files 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);