intel: Merge our choosetexformat fallbacks into core.
authorEric Anholt <eric@anholt.net>
Tue, 4 Jan 2011 21:44:34 +0000 (13:44 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 4 Jan 2011 22:42:54 +0000 (14:42 -0800)
We now share the type/format -> MESA_FORMAT_* mappings with software
mesa, and the core supports most of the fallbacks hardware drivers
will want.

src/mesa/drivers/dri/intel/intel_context.c
src/mesa/drivers/dri/intel/intel_fbo.c
src/mesa/drivers/dri/intel/intel_tex.c
src/mesa/drivers/dri/intel/intel_tex.h
src/mesa/drivers/dri/intel/intel_tex_format.c
src/mesa/main/texformat.c

index d183d275e73d1f213209339dde1fd44faea029df..4255c0ea73a6c8264decefe13c36ba0de72f5f17 100644 (file)
@@ -683,6 +683,64 @@ intelInitContext(struct intel_context *intel,
       }
    }
 
+   memset(&ctx->TextureFormatSupported, 0,
+         sizeof(ctx->TextureFormatSupported));
+   ctx->TextureFormatSupported[MESA_FORMAT_ARGB8888] = GL_TRUE;
+   if (intel->has_xrgb_textures)
+      ctx->TextureFormatSupported[MESA_FORMAT_XRGB8888] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_ARGB4444] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_ARGB1555] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_RGB565] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_L8] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_A8] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_I8] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_AL88] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_AL1616] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = GL_TRUE;
+   /*
+    * This was disabled in initial FBO enabling to avoid combinations
+    * of depth+stencil that wouldn't work together.  We since decided
+    * that it was OK, since it's up to the app to come up with the
+    * combo that actually works, so this can probably be re-enabled.
+    */
+   /*
+   ctx->TextureFormatSupported[MESA_FORMAT_Z16] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_Z24] = GL_TRUE;
+   */
+
+   /* ctx->Extensions.MESA_ycbcr_texture */
+   ctx->TextureFormatSupported[MESA_FORMAT_YCBCR] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_YCBCR_REV] = GL_TRUE;
+
+   /* GL_3DFX_texture_compression_FXT1 */
+   ctx->TextureFormatSupported[MESA_FORMAT_RGB_FXT1] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_RGBA_FXT1] = GL_TRUE;
+
+   /* GL_EXT_texture_compression_s3tc */
+   ctx->TextureFormatSupported[MESA_FORMAT_RGB_DXT1] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_RGBA_DXT1] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_RGBA_DXT3] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_RGBA_DXT5] = GL_TRUE;
+
+#ifndef I915
+   /* GL_ARB_texture_rg */
+   ctx->TextureFormatSupported[MESA_FORMAT_R8] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_R16] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_RG88] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_RG1616] = GL_TRUE;
+
+   ctx->TextureFormatSupported[MESA_FORMAT_DUDV8] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_SIGNED_RGBA8888_REV] = GL_TRUE;
+
+   /* GL_EXT_texture_sRGB */
+   ctx->TextureFormatSupported[MESA_FORMAT_SARGB8] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_SRGB_DXT1] = GL_TRUE;
+   if (intel->has_luminance_srgb) {
+      ctx->TextureFormatSupported[MESA_FORMAT_SL8] = GL_TRUE;
+      ctx->TextureFormatSupported[MESA_FORMAT_SLA8] = GL_TRUE;
+   }
+#endif
+
    driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache,
                        sPriv->myNum, (intel->gen >= 4) ? "i965" : "i915");
    if (intelScreen->deviceID == PCI_CHIP_I865_G)
index a47d2d4f838a59f7bd4c6f06a287f9302ab2d7d1..f4aceee9d6a298efcba73045726d51a91848f525 100644 (file)
@@ -115,8 +115,8 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer
        * except they're less useful because you can't texture with
        * them.
        */
-      rb->Format = intelChooseTextureFormat(ctx, internalFormat,
-                                           GL_NONE, GL_NONE);
+      rb->Format = intel->ctx.Driver.ChooseTextureFormat(ctx, internalFormat,
+                                                        GL_NONE, GL_NONE);
       break;
    case GL_STENCIL_INDEX:
    case GL_STENCIL_INDEX1_EXT:
index 2c21ea0576e9a56a9dccf49e34a65c72187efe72..2c3eab20fdadf9212dac42c8b8ce3882c2df6e3a 100644 (file)
@@ -113,7 +113,6 @@ intelGenerateMipmap(struct gl_context *ctx, GLenum target,
 void
 intelInitTextureFuncs(struct dd_function_table *functions)
 {
-   functions->ChooseTextureFormat = intelChooseTextureFormat;
    functions->GenerateMipmap = intelGenerateMipmap;
 
    functions->NewTextureObject = intelNewTextureObject;
index b638628c711702f81404e93dcc24e6ff4039f716..6552ed0d332afb78926bc1bdf0ebae56d6972ddb 100644 (file)
@@ -40,8 +40,6 @@ void intelInitTextureSubImageFuncs(struct dd_function_table *functions);
 
 void intelInitTextureCopyImageFuncs(struct dd_function_table *functions);
 
-gl_format intelChooseTextureFormat(struct gl_context *ctx, GLint internalFormat,
-                                   GLenum format, GLenum type);
 GLenum intel_mesa_format_to_rb_datatype(gl_format format);
 
 void intelSetTexBuffer(__DRIcontext *pDRICtx,
index c9763c9ae16f1f1bfeb19c2ad7900a536807c0f3..87745bc66d4b528c2fbaa62daecb4a964f2c7c33 100644 (file)
@@ -35,230 +35,6 @@ intel_mesa_format_to_rb_datatype(gl_format format)
    }
 }
 
-
-/**
- * Choose hardware texture format given the user's glTexImage parameters.
- *
- * It works out that this function is fine for all the supported
- * hardware.  However, there is still a need to map the formats onto
- * hardware descriptors.
- *
- * Note that the i915 can actually support many more formats than
- * these if we take the step of simply swizzling the colors
- * immediately after sampling...
- */
-gl_format
-intelChooseTextureFormat(struct gl_context * ctx, GLint internalFormat,
-                         GLenum format, GLenum type)
-{
-   struct intel_context *intel = intel_context(ctx);
-
-#if 0
-   printf("%s intFmt=0x%x format=0x%x type=0x%x\n",
-          __FUNCTION__, internalFormat, format, type);
-#endif
-
-   switch (internalFormat) {
-   case 4:
-   case GL_RGBA:
-   case GL_COMPRESSED_RGBA:
-      if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV)
-        return MESA_FORMAT_ARGB4444;
-      else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV)
-        return MESA_FORMAT_ARGB1555;
-      else
-        return MESA_FORMAT_ARGB8888;
-
-   case 3:
-   case GL_RGB:
-   case GL_COMPRESSED_RGB:
-      if (type == GL_UNSIGNED_SHORT_5_6_5)
-        return MESA_FORMAT_RGB565;
-      else if (intel->has_xrgb_textures)
-        return MESA_FORMAT_XRGB8888;
-      else
-        return MESA_FORMAT_ARGB8888;
-
-   case GL_RGBA8:
-   case GL_RGB10_A2:
-   case GL_RGBA12:
-   case GL_RGBA16:
-      return MESA_FORMAT_ARGB8888;
-
-   case GL_RGBA4:
-   case GL_RGBA2:
-      return MESA_FORMAT_ARGB4444;
-
-   case GL_RGB5_A1:
-      return MESA_FORMAT_ARGB1555;
-
-   case GL_RGB8:
-   case GL_RGB10:
-   case GL_RGB12:
-   case GL_RGB16:
-      if (intel->has_xrgb_textures)
-        return MESA_FORMAT_XRGB8888;
-      else
-        return MESA_FORMAT_ARGB8888;
-
-   case GL_RGB5:
-   case GL_RGB4:
-   case GL_R3_G3_B2:
-      return MESA_FORMAT_RGB565;
-
-   case GL_ALPHA:
-   case GL_ALPHA4:
-   case GL_ALPHA8:
-   case GL_ALPHA12:
-   case GL_ALPHA16:
-   case GL_COMPRESSED_ALPHA:
-      return MESA_FORMAT_A8;
-
-   case 1:
-   case GL_LUMINANCE:
-   case GL_LUMINANCE4:
-   case GL_LUMINANCE8:
-   case GL_LUMINANCE12:
-   case GL_LUMINANCE16:
-   case GL_COMPRESSED_LUMINANCE:
-      return MESA_FORMAT_L8;
-
-   case GL_LUMINANCE12_ALPHA4:
-   case GL_LUMINANCE12_ALPHA12:
-   case GL_LUMINANCE16_ALPHA16:
-      /* i915 could implement this mode using MT_32BIT_RG1616.  However, this
-       * would require an extra swizzle instruction in the fragment shader to
-       * convert the { R, G, 1.0, 1.0 } to { R, R, R, G }.
-       */
-#ifndef I915
-      return MESA_FORMAT_AL1616;
-#else
-      /* FALLTHROUGH */
-#endif
-
-   case 2:
-   case GL_LUMINANCE_ALPHA:
-   case GL_LUMINANCE4_ALPHA4:
-   case GL_LUMINANCE6_ALPHA2:
-   case GL_LUMINANCE8_ALPHA8:
-   case GL_COMPRESSED_LUMINANCE_ALPHA:
-      return MESA_FORMAT_AL88;
-
-   case GL_INTENSITY:
-   case GL_INTENSITY4:
-   case GL_INTENSITY8:
-   case GL_INTENSITY12:
-   case GL_INTENSITY16:
-   case GL_COMPRESSED_INTENSITY:
-      return MESA_FORMAT_I8;
-
-   case GL_YCBCR_MESA:
-      if (type == GL_UNSIGNED_SHORT_8_8_MESA || type == GL_UNSIGNED_BYTE)
-         return MESA_FORMAT_YCBCR;
-      else
-         return MESA_FORMAT_YCBCR_REV;
-
-   case GL_COMPRESSED_RGB_FXT1_3DFX:
-      return MESA_FORMAT_RGB_FXT1;
-   case GL_COMPRESSED_RGBA_FXT1_3DFX:
-      return MESA_FORMAT_RGBA_FXT1;
-
-   case GL_RGB_S3TC:
-   case GL_RGB4_S3TC:
-   case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
-      return MESA_FORMAT_RGB_DXT1;
-
-   case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
-      return MESA_FORMAT_RGBA_DXT1;
-
-   case GL_RGBA_S3TC:
-   case GL_RGBA4_S3TC:
-   case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
-      return MESA_FORMAT_RGBA_DXT3;
-
-   case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
-      return MESA_FORMAT_RGBA_DXT5;
-
-   case GL_DEPTH_COMPONENT:
-   case GL_DEPTH_COMPONENT16:
-   case GL_DEPTH_COMPONENT24:
-   case GL_DEPTH_COMPONENT32:
-#if 0
-      return MESA_FORMAT_Z16;
-#else
-      /* fall-through.
-       * 16bpp depth texture can't be paired with a stencil buffer so
-       * always used combined depth/stencil format.
-       */
-#endif
-   case GL_DEPTH_STENCIL_EXT:
-   case GL_DEPTH24_STENCIL8_EXT:
-      return MESA_FORMAT_S8_Z24;
-
-#ifndef I915
-   case GL_SRGB_EXT:
-   case GL_SRGB8_EXT:
-   case GL_SRGB_ALPHA_EXT:
-   case GL_SRGB8_ALPHA8_EXT:
-   case GL_COMPRESSED_SRGB_EXT:
-   case GL_COMPRESSED_SRGB_ALPHA_EXT:
-   case GL_COMPRESSED_SLUMINANCE_EXT:
-   case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
-      return MESA_FORMAT_SARGB8;
-   case GL_SLUMINANCE_EXT:
-   case GL_SLUMINANCE8_EXT:
-      if (intel->has_luminance_srgb)
-         return MESA_FORMAT_SL8;
-      else
-         return MESA_FORMAT_SARGB8;
-   case GL_SLUMINANCE_ALPHA_EXT:
-   case GL_SLUMINANCE8_ALPHA8_EXT:
-      if (intel->has_luminance_srgb)
-         return MESA_FORMAT_SLA8;
-      else
-         return MESA_FORMAT_SARGB8;
-   case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
-   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
-   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
-   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
-      return MESA_FORMAT_SRGB_DXT1;
-
-   /* i915 could also do this */
-   case GL_DUDV_ATI:
-   case GL_DU8DV8_ATI:
-      return MESA_FORMAT_DUDV8;
-   case GL_RGBA_SNORM:
-   case GL_RGBA8_SNORM:
-      return MESA_FORMAT_SIGNED_RGBA8888_REV;
-
-   /* i915 can do a RG16, but it can't do any of the other RED or RG formats.
-    * In addition, it only implements the broken D3D mode where undefined
-    * components are read as 1.0.  I'm not sure who thought reading
-    * { R, G, 1.0, 1.0 } from a red-green texture would be useful.
-    */
-   case GL_RED:
-   case GL_COMPRESSED_RED:
-   case GL_R8:
-      return MESA_FORMAT_R8;
-   case GL_R16:
-      return MESA_FORMAT_R16;
-   case GL_RG:
-   case GL_COMPRESSED_RG:
-   case GL_RG8:
-      return MESA_FORMAT_RG88;
-   case GL_RG16:
-      return MESA_FORMAT_RG1616;
-#endif
-
-   default:
-      fprintf(stderr, "unexpected texture format %s in %s\n",
-              _mesa_lookup_enum_by_nr(internalFormat), __FUNCTION__);
-      return MESA_FORMAT_NONE;
-   }
-
-   return MESA_FORMAT_NONE;       /* never get here */
-}
-
 int intel_compressed_num_bytes(GLuint mesaFormat)
 {
    GLuint bw, bh;
index ab5e25dcded83f7f4309de0e0b6e5ee708a3789c..41853bce5ffc703049acd82d4479b70f40ae5d5d 100644 (file)
@@ -68,14 +68,25 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       /* shallow RGBA formats */
       case 4:
       case GL_RGBA:
+        if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
+           RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
+        } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
+           RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
+        }
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
+        break;
+
       case GL_RGBA8:
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
       case GL_RGB5_A1:
         RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
         break;
       case GL_RGBA2:
         RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
         break;
       case GL_RGBA4:
         RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
@@ -84,10 +95,14 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       /* deep RGBA formats */
       case GL_RGB10_A2:
         RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
       case GL_RGBA12:
       case GL_RGBA16:
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
 
       /* shallow RGB formats */
@@ -95,12 +110,18 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       case GL_RGB:
       case GL_RGB8:
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
       case GL_R3_G3_B2:
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
       case GL_RGB4:
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
         break;
       case GL_RGB5:
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
@@ -111,6 +132,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       case GL_RGB12:
       case GL_RGB16:
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
 
       /* Alpha formats */
@@ -123,6 +146,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       case GL_ALPHA12:
       case GL_ALPHA16:
         RETURN_IF_SUPPORTED(MESA_FORMAT_A16);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
         break;
 
       /* Luminance formats */
@@ -136,11 +160,13 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       case GL_LUMINANCE12:
       case GL_LUMINANCE16:
         RETURN_IF_SUPPORTED(MESA_FORMAT_L16);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
         break;
 
       /* Luminance/Alpha formats */
       case GL_LUMINANCE4_ALPHA4:
         RETURN_IF_SUPPORTED(MESA_FORMAT_AL44);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
         break;
 
       case 2:
@@ -154,6 +180,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       case GL_LUMINANCE12_ALPHA12:
       case GL_LUMINANCE16_ALPHA16:
         RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
         break;
 
       case GL_INTENSITY:
@@ -165,6 +192,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       case GL_INTENSITY12:
       case GL_INTENSITY16:
         RETURN_IF_SUPPORTED(MESA_FORMAT_I16);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
         break;
 
       case GL_COLOR_INDEX:
@@ -187,10 +215,11 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_DEPTH_COMPONENT24:
          case GL_DEPTH_COMPONENT32:
            RETURN_IF_SUPPORTED(MESA_FORMAT_Z32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
            break;
          case GL_DEPTH_COMPONENT16:
            RETURN_IF_SUPPORTED(MESA_FORMAT_Z16);
-           break;
+           RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
          default:
             ; /* fallthrough */
       }
@@ -216,6 +245,8 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          if (ctx->Extensions.TDFX_texture_compression_FXT1)
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
       case GL_COMPRESSED_RGBA_ARB:
          if (ctx->Extensions.EXT_texture_compression_s3tc ||
@@ -224,6 +255,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          if (ctx->Extensions.TDFX_texture_compression_FXT1)
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
       default:
          ; /* fallthrough */
@@ -337,6 +369,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_DEPTH_STENCIL_EXT:
          case GL_DEPTH24_STENCIL8_EXT:
            RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
            break;
          default:
             ; /* fallthrough */
@@ -359,6 +392,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_RGBA_SNORM:
          case GL_RGBA8_SNORM:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
            break;
          default:
             ; /* fallthrough */
@@ -406,24 +440,30 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
          case GL_SRGB_EXT:
          case GL_SRGB8_EXT:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
          case GL_SRGB_ALPHA_EXT:
          case GL_SRGB8_ALPHA8_EXT:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
          case GL_SLUMINANCE_EXT:
          case GL_SLUMINANCE8_EXT:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
          case GL_SLUMINANCE_ALPHA_EXT:
          case GL_SLUMINANCE8_ALPHA8_EXT:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
          case GL_COMPRESSED_SLUMINANCE_EXT:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
          case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
          case GL_COMPRESSED_SRGB_EXT:
 #if FEATURE_texture_s3tc
@@ -431,6 +471,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
               RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
 #endif
            RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
          case GL_COMPRESSED_SRGB_ALPHA_EXT:
 #if FEATURE_texture_s3tc
@@ -438,23 +479,28 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
               RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */
 #endif
            RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
 #if FEATURE_texture_s3tc
          case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
             if (ctx->Extensions.EXT_texture_compression_s3tc)
               RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
             break;
          case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
             if (ctx->Extensions.EXT_texture_compression_s3tc)
               RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
             break;
          case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
             if (ctx->Extensions.EXT_texture_compression_s3tc)
               RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
             break;
          case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
             if (ctx->Extensions.EXT_texture_compression_s3tc)
               RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
             break;
 #endif
          default: