meta: Don't do srgb to linear decode when blitting srgb textures.
[mesa.git] / src / mesa / drivers / common / meta.c
index 08b6024639fe1752f70f677368f13060a28c1c8c..a0d4b9e7cf747a35285b9cdced000205ceef2930 100644 (file)
@@ -1186,6 +1186,7 @@ blitframebuffer_texture(struct gl_context *ctx,
          const GLint maxLevelSave = texObj->MaxLevel;
          const GLenum wrapSSave = texObj->Sampler.WrapS;
          const GLenum wrapTSave = texObj->Sampler.WrapT;
+         const GLenum srgbSave = texObj->Sampler.sRGBDecode;
          const GLenum target = texObj->Target;
 
          if (drawAtt->Texture == readAtt->Texture) {
@@ -1217,6 +1218,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);
+
+        if (ctx->Extensions.EXT_texture_sRGB_decode) {
+           _mesa_TexParameteri(target, GL_TEXTURE_SRGB_DECODE_EXT,
+                               GL_SKIP_DECODE_EXT);
+        }
+
          _mesa_TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
          _mesa_set_enable(ctx, target, GL_TRUE);
 
@@ -1278,6 +1285,9 @@ blitframebuffer_texture(struct gl_context *ctx,
          }
          _mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, wrapSSave);
          _mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, wrapTSave);
+        if (ctx->Extensions.EXT_texture_sRGB_decode) {
+           _mesa_TexParameteri(target, GL_TEXTURE_SRGB_DECODE_EXT, srgbSave);
+        }
 
          /* Done with color buffer */
          mask &= ~GL_COLOR_BUFFER_BIT;