Mesa (master): meta: Don' t do sRGB encode for framebuffer blits on sRGB-enabled framebuffers.

Eric Anholt anholt at kemper.freedesktop.org
Sun Jun 5 18:31:51 UTC 2011


Module: Mesa
Branch: master
Commit: e8ea8793e3c65f7feef063c6edc7b86bf0e66997
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e8ea8793e3c65f7feef063c6edc7b86bf0e66997

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Jun  1 13:15:28 2011 -0700

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 at vmware.com>

---

 src/mesa/drivers/common/meta.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index a0d4b9e..979926a 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;




More information about the mesa-commit mailing list