summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2011-06-01 13:15:28 -0700
committerEric Anholt <eric@anholt.net>2011-06-05 11:29:00 -0700
commite8ea8793e3c65f7feef063c6edc7b86bf0e66997 (patch)
treeabbe969805658ef5e301b22214fd78a3327e52da
parenta513bee2f247d7cf9cd8e9c3d50f2bd48f136776 (diff)
meta: Don't do sRGB encode for framebuffer blits on sRGB-enabled framebuffers.
Fixes fbo-srgb-blit. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=35373 Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r--src/mesa/drivers/common/meta.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index a0d4b9e7cf7..979926a7e8f 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -1187,6 +1187,7 @@ blitframebuffer_texture(struct gl_context *ctx,
const GLenum wrapSSave = texObj->Sampler.WrapS;
const GLenum wrapTSave = texObj->Sampler.WrapT;
const GLenum srgbSave = texObj->Sampler.sRGBDecode;
+ const GLenum fbo_srgb_save = ctx->Color.sRGBEnabled;
const GLenum target = texObj->Target;
if (drawAtt->Texture == readAtt->Texture) {
@@ -1219,10 +1220,12 @@ blitframebuffer_texture(struct gl_context *ctx,
_mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
_mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ /* Always do our blits with no sRGB decode or encode.*/
if (ctx->Extensions.EXT_texture_sRGB_decode) {
_mesa_TexParameteri(target, GL_TEXTURE_SRGB_DECODE_EXT,
GL_SKIP_DECODE_EXT);
}
+ _mesa_Disable(GL_FRAMEBUFFER_SRGB_EXT);
_mesa_TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
_mesa_set_enable(ctx, target, GL_TRUE);
@@ -1288,6 +1291,9 @@ blitframebuffer_texture(struct gl_context *ctx,
if (ctx->Extensions.EXT_texture_sRGB_decode) {
_mesa_TexParameteri(target, GL_TEXTURE_SRGB_DECODE_EXT, srgbSave);
}
+ if (ctx->Extensions.EXT_texture_sRGB_decode && fbo_srgb_save) {
+ _mesa_Enable(GL_FRAMEBUFFER_SRGB_EXT);
+ }
/* Done with color buffer */
mask &= ~GL_COLOR_BUFFER_BIT;