From 24bc246f84bc94b59b17d9b535d83173653f6b14 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@gmail.com>
Date: Thu, 13 Jan 2011 15:54:29 +1000
Subject: [PATCH 2/2] i965: add support for EXT_texture_sRGB_decode

We just choose the texture format depending on the srgb decode bit
for the sRGB formats.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c |   14 +++++++++++---
 src/mesa/drivers/dri/intel/intel_extensions.c    |    1 +
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index 233fe3b..a372554 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -120,7 +120,8 @@ brw_render_target_supported(gl_format format)
 
 static GLuint translate_tex_format( gl_format mesa_format,
                                     GLenum internal_format,
-				    GLenum depth_mode )
+				    GLenum depth_mode, 
+				    GLenum srgb_decode )
 {
    switch( mesa_format ) {
 
@@ -146,7 +147,14 @@ static GLuint translate_tex_format( gl_format mesa_format,
          return BRW_SURFACEFORMAT_R24_UNORM_X8_TYPELESS;
       else
          return BRW_SURFACEFORMAT_L24X8_UNORM;
-
+      
+   case MESA_FORMAT_SARGB8:
+   case MESA_FORMAT_SLA8:
+   case MESA_FORMAT_SL8:
+      if (srgb_decode == GL_DECODE_EXT)
+	 return brw_format_for_mesa_format[mesa_format];
+      else if (srgb_decode == GL_SKIP_DECODE_EXT)
+	 return brw_format_for_mesa_format[_mesa_get_srgb_format_linear(mesa_format)];
    default:
       assert(brw_format_for_mesa_format[mesa_format] != 0);
       return brw_format_for_mesa_format[mesa_format];
@@ -189,7 +197,7 @@ brw_update_texture_surface( struct gl_context *ctx, GLuint unit )
    surf.ss0.surface_type = translate_tex_target(tObj->Target);
    surf.ss0.surface_format = translate_tex_format(firstImage->TexFormat,
 						  firstImage->InternalFormat,
-						  tObj->DepthMode);
+						  tObj->DepthMode, tObj->sRGBDecode);
 
    /* This is ok for all textures with channel width 8bit or less:
     */
diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c
index 00c2f99..e1caac1 100644
--- a/src/mesa/drivers/dri/intel/intel_extensions.c
+++ b/src/mesa/drivers/dri/intel/intel_extensions.c
@@ -176,6 +176,7 @@ static const struct dri_extension brw_extensions[] = {
    { "GL_EXT_shadow_funcs",               NULL },
    { "GL_EXT_stencil_two_side",           GL_EXT_stencil_two_side_functions },
    { "GL_EXT_texture_sRGB",		  NULL },
+   { "GL_EXT_texture_sRGB_decode",	  NULL },
    { "GL_EXT_texture_swizzle",		  NULL },
    { "GL_EXT_vertex_array_bgra",	  NULL },
    { "GL_ATI_envmap_bumpmap",             GL_ATI_envmap_bumpmap_functions },
-- 
1.7.3.2

