gallium: Add an equivalent of MESA_FORMAT_BGR_UNORM8.
[mesa.git] / src / mesa / state_tracker / st_format.c
index caddd76c5daa29ae66ce4cb57ef41705ce7babea..1d6b439681c915659443d3b964227571a616bdba 100644 (file)
@@ -71,6 +71,8 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
    switch (mesaFormat) {
    case MESA_FORMAT_A8B8G8R8_UNORM:
       return PIPE_FORMAT_ABGR8888_UNORM;
+   case MESA_FORMAT_RGB_UNORM8:
+      return PIPE_FORMAT_R8G8B8_UNORM;
    case MESA_FORMAT_R8G8B8A8_UNORM:
       return PIPE_FORMAT_RGBA8888_UNORM;
    case MESA_FORMAT_B8G8R8A8_UNORM:
@@ -89,12 +91,24 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       return PIPE_FORMAT_B5G5R5A1_UNORM;
    case MESA_FORMAT_A1B5G5R5_UNORM:
       return PIPE_FORMAT_A1B5G5R5_UNORM;
+   case MESA_FORMAT_A1R5G5B5_UNORM:
+      return PIPE_FORMAT_A1R5G5B5_UNORM;
+   case MESA_FORMAT_R5G5B5A1_UNORM:
+      return PIPE_FORMAT_R5G5B5A1_UNORM;
+   case MESA_FORMAT_R4G4B4A4_UNORM:
+      return PIPE_FORMAT_R4G4B4A4_UNORM;
    case MESA_FORMAT_B4G4R4A4_UNORM:
       return PIPE_FORMAT_B4G4R4A4_UNORM;
    case MESA_FORMAT_A4B4G4R4_UNORM:
       return PIPE_FORMAT_A4B4G4R4_UNORM;
+   case MESA_FORMAT_A4R4G4B4_UNORM:
+      return PIPE_FORMAT_A4R4G4B4_UNORM;
+   case MESA_FORMAT_R5G6B5_UNORM:
+      return PIPE_FORMAT_R5G6B5_UNORM;
    case MESA_FORMAT_B5G6R5_UNORM:
       return PIPE_FORMAT_B5G6R5_UNORM;
+   case MESA_FORMAT_R3G3B2_UNORM:
+      return PIPE_FORMAT_R3G3B2_UNORM;
    case MESA_FORMAT_B2G3R3_UNORM:
       return PIPE_FORMAT_B2G3R3_UNORM;
    case MESA_FORMAT_B10G10R10A2_UNORM:
@@ -103,16 +117,12 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       return PIPE_FORMAT_R10G10B10A2_UNORM;
    case MESA_FORMAT_R10G10B10X2_UNORM:
       return PIPE_FORMAT_R10G10B10X2_UNORM;
+   case MESA_FORMAT_A2B10G10R10_UNORM:
+      return PIPE_FORMAT_A2B10G10R10_UNORM;
+   case MESA_FORMAT_A2R10G10B10_UNORM:
+      return PIPE_FORMAT_A2R10G10B10_UNORM;
    case MESA_FORMAT_L4A4_UNORM:
       return PIPE_FORMAT_L4A4_UNORM;
-   case MESA_FORMAT_L8A8_UNORM:
-      return PIPE_FORMAT_LA88_UNORM;
-   case MESA_FORMAT_A8L8_UNORM:
-      return PIPE_FORMAT_AL88_UNORM;
-   case MESA_FORMAT_L16A16_UNORM:
-      return PIPE_FORMAT_LA1616_UNORM;
-   case MESA_FORMAT_A16L16_UNORM:
-      return PIPE_FORMAT_AL1616_UNORM;
    case MESA_FORMAT_A_UNORM8:
       return PIPE_FORMAT_A8_UNORM;
    case MESA_FORMAT_A_UNORM16:
@@ -121,6 +131,10 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       return PIPE_FORMAT_L8_UNORM;
    case MESA_FORMAT_L_UNORM16:
       return PIPE_FORMAT_L16_UNORM;
+   case MESA_FORMAT_LA_UNORM8:
+      return PIPE_FORMAT_L8A8_UNORM;
+   case MESA_FORMAT_LA_UNORM16:
+      return PIPE_FORMAT_L16A16_UNORM;
    case MESA_FORMAT_I_UNORM8:
       return PIPE_FORMAT_I8_UNORM;
    case MESA_FORMAT_I_UNORM16:
@@ -163,12 +177,10 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       return PIPE_FORMAT_DXT3_SRGBA;
    case MESA_FORMAT_SRGBA_DXT5:
       return PIPE_FORMAT_DXT5_SRGBA;
-   case MESA_FORMAT_L8A8_SRGB:
-      return PIPE_FORMAT_LA88_SRGB;
-   case MESA_FORMAT_A8L8_SRGB:
-      return PIPE_FORMAT_AL88_SRGB;
    case MESA_FORMAT_L_SRGB8:
       return PIPE_FORMAT_L8_SRGB;
+   case MESA_FORMAT_LA_SRGB8:
+      return PIPE_FORMAT_L8A8_SRGB;
    case MESA_FORMAT_R_SRGB8:
       return PIPE_FORMAT_R8_SRGB;
    case MESA_FORMAT_BGR_SRGB8:
@@ -218,14 +230,12 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       return PIPE_FORMAT_R8_UNORM;
    case MESA_FORMAT_R_UNORM16:
       return PIPE_FORMAT_R16_UNORM;
-   case MESA_FORMAT_R8G8_UNORM:
-      return PIPE_FORMAT_RG88_UNORM;
-   case MESA_FORMAT_G8R8_UNORM:
-      return PIPE_FORMAT_GR88_UNORM;
-   case MESA_FORMAT_R16G16_UNORM:
-      return PIPE_FORMAT_RG1616_UNORM;
-   case MESA_FORMAT_G16R16_UNORM:
-      return PIPE_FORMAT_GR1616_UNORM;
+   case MESA_FORMAT_RG_UNORM8:
+      return PIPE_FORMAT_R8G8_UNORM;
+   case MESA_FORMAT_RG_UNORM16:
+      return PIPE_FORMAT_R16G16_UNORM;
+   case MESA_FORMAT_BGR_UNORM8:
+      return PIPE_FORMAT_B8G8R8_UNORM;
    case MESA_FORMAT_RGBA_UNORM16:
       return PIPE_FORMAT_R16G16B16A16_UNORM;
 
@@ -372,10 +382,8 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
    /* signed normalized formats */
    case MESA_FORMAT_R_SNORM8:
       return PIPE_FORMAT_R8_SNORM;
-   case MESA_FORMAT_R8G8_SNORM:
-      return PIPE_FORMAT_RG88_SNORM;
-   case MESA_FORMAT_G8R8_SNORM:
-      return PIPE_FORMAT_GR88_SNORM;
+   case MESA_FORMAT_RG_SNORM8:
+      return PIPE_FORMAT_R8G8_SNORM;
    case MESA_FORMAT_R8G8B8A8_SNORM:
       return PIPE_FORMAT_RGBA8888_SNORM;
    case MESA_FORMAT_A8B8G8R8_SNORM:
@@ -385,19 +393,17 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       return PIPE_FORMAT_A8_SNORM;
    case MESA_FORMAT_L_SNORM8:
       return PIPE_FORMAT_L8_SNORM;
-   case MESA_FORMAT_L8A8_SNORM:
-      return PIPE_FORMAT_LA88_SNORM;
-   case MESA_FORMAT_A8L8_SNORM:
-      return PIPE_FORMAT_AL88_SNORM;
+   case MESA_FORMAT_LA_SNORM8:
+      return PIPE_FORMAT_L8A8_SNORM;
    case MESA_FORMAT_I_SNORM8:
       return PIPE_FORMAT_I8_SNORM;
 
    case MESA_FORMAT_R_SNORM16:
       return PIPE_FORMAT_R16_SNORM;
-   case MESA_FORMAT_R16G16_SNORM:
-      return PIPE_FORMAT_RG1616_SNORM;
-   case MESA_FORMAT_G16R16_SNORM:
-      return PIPE_FORMAT_GR1616_SNORM;
+   case MESA_FORMAT_RG_SNORM16:
+      return PIPE_FORMAT_R16G16_SNORM;
+   case MESA_FORMAT_RGB_SNORM16:
+      return PIPE_FORMAT_R16G16B16_SNORM;
    case MESA_FORMAT_RGBA_SNORM16:
       return PIPE_FORMAT_R16G16B16A16_SNORM;
 
@@ -602,7 +608,64 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
          return PIPE_FORMAT_R8G8B8A8_SRGB;
       return PIPE_FORMAT_ASTC_12x12_SRGB;
 
+   case MESA_FORMAT_RGBA_ASTC_3x3x3:
+      return PIPE_FORMAT_ASTC_3x3x3;
+   case MESA_FORMAT_RGBA_ASTC_4x3x3:
+      return PIPE_FORMAT_ASTC_4x3x3;
+   case MESA_FORMAT_RGBA_ASTC_4x4x3:
+      return PIPE_FORMAT_ASTC_4x4x3;
+   case MESA_FORMAT_RGBA_ASTC_4x4x4:
+      return PIPE_FORMAT_ASTC_4x4x4;
+   case MESA_FORMAT_RGBA_ASTC_5x4x4:
+      return PIPE_FORMAT_ASTC_5x4x4;
+   case MESA_FORMAT_RGBA_ASTC_5x5x4:
+      return PIPE_FORMAT_ASTC_5x5x4;
+   case MESA_FORMAT_RGBA_ASTC_5x5x5:
+      return PIPE_FORMAT_ASTC_5x5x5;
+   case MESA_FORMAT_RGBA_ASTC_6x5x5:
+      return PIPE_FORMAT_ASTC_6x5x5;
+   case MESA_FORMAT_RGBA_ASTC_6x6x5:
+      return PIPE_FORMAT_ASTC_6x6x5;
+   case MESA_FORMAT_RGBA_ASTC_6x6x6:
+      return PIPE_FORMAT_ASTC_6x6x6;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_3x3x3:
+      return PIPE_FORMAT_ASTC_3x3x3_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x3x3:
+      return PIPE_FORMAT_ASTC_4x3x3_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x3:
+      return PIPE_FORMAT_ASTC_4x4x3_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x4:
+      return PIPE_FORMAT_ASTC_4x4x4_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4x4:
+      return PIPE_FORMAT_ASTC_5x4x4_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x4:
+      return PIPE_FORMAT_ASTC_5x5x4_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x5:
+      return PIPE_FORMAT_ASTC_5x5x5_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5x5:
+      return PIPE_FORMAT_ASTC_6x5x5_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x5:
+      return PIPE_FORMAT_ASTC_6x6x5_SRGB;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x6:
+      return PIPE_FORMAT_ASTC_6x6x6_SRGB;
+
+   case MESA_FORMAT_ATC_RGB:
+      return PIPE_FORMAT_ATC_RGB;
+   case MESA_FORMAT_ATC_RGBA_EXPLICIT:
+      return PIPE_FORMAT_ATC_RGBA_EXPLICIT;
+   case MESA_FORMAT_ATC_RGBA_INTERPOLATED:
+      return PIPE_FORMAT_ATC_RGBA_INTERPOLATED;
+
+   case MESA_FORMAT_RGB_FXT1:
+      return PIPE_FORMAT_FXT1_RGB;
+   case MESA_FORMAT_RGBA_FXT1:
+      return PIPE_FORMAT_FXT1_RGBA;
+
    default:
+      if (0) {
+         debug_printf("%s(mesa_format=%s) -> NONE\n",
+                      __func__, _mesa_get_format_name(mesaFormat));
+      }
       return PIPE_FORMAT_NONE;
    }
 }
@@ -619,6 +682,8 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_A8B8G8R8_UNORM;
    case PIPE_FORMAT_RGBA8888_UNORM:
       return MESA_FORMAT_R8G8B8A8_UNORM;
+   case PIPE_FORMAT_R8G8B8_UNORM:
+      return MESA_FORMAT_RGB_UNORM8;
    case PIPE_FORMAT_BGRA8888_UNORM:
       return MESA_FORMAT_B8G8R8A8_UNORM;
    case PIPE_FORMAT_ARGB8888_UNORM:
@@ -635,12 +700,24 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_B5G5R5A1_UNORM;
    case PIPE_FORMAT_A1B5G5R5_UNORM:
       return MESA_FORMAT_A1B5G5R5_UNORM;
+   case PIPE_FORMAT_A1R5G5B5_UNORM:
+      return MESA_FORMAT_A1R5G5B5_UNORM;
+   case PIPE_FORMAT_R5G5B5A1_UNORM:
+      return MESA_FORMAT_R5G5B5A1_UNORM;
+   case PIPE_FORMAT_R4G4B4A4_UNORM:
+      return MESA_FORMAT_R4G4B4A4_UNORM;
    case PIPE_FORMAT_B4G4R4A4_UNORM:
       return MESA_FORMAT_B4G4R4A4_UNORM;
    case PIPE_FORMAT_A4B4G4R4_UNORM:
       return MESA_FORMAT_A4B4G4R4_UNORM;
+   case PIPE_FORMAT_A4R4G4B4_UNORM:
+      return MESA_FORMAT_A4R4G4B4_UNORM;
+   case PIPE_FORMAT_R5G6B5_UNORM:
+      return MESA_FORMAT_R5G6B5_UNORM;
    case PIPE_FORMAT_B5G6R5_UNORM:
       return MESA_FORMAT_B5G6R5_UNORM;
+   case PIPE_FORMAT_R3G3B2_UNORM:
+      return MESA_FORMAT_R3G3B2_UNORM;
    case PIPE_FORMAT_B2G3R3_UNORM:
       return MESA_FORMAT_B2G3R3_UNORM;
    case PIPE_FORMAT_B10G10R10A2_UNORM:
@@ -649,16 +726,16 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_R10G10B10A2_UNORM;
    case PIPE_FORMAT_R10G10B10X2_UNORM:
       return MESA_FORMAT_R10G10B10X2_UNORM;
+   case PIPE_FORMAT_A2R10G10B10_UNORM:
+      return MESA_FORMAT_A2R10G10B10_UNORM;
+   case PIPE_FORMAT_A2B10G10R10_UNORM:
+      return MESA_FORMAT_A2B10G10R10_UNORM;
    case PIPE_FORMAT_L4A4_UNORM:
       return MESA_FORMAT_L4A4_UNORM;
-   case PIPE_FORMAT_LA88_UNORM:
-      return MESA_FORMAT_L8A8_UNORM;
-   case PIPE_FORMAT_AL88_UNORM:
-      return MESA_FORMAT_A8L8_UNORM;
-   case PIPE_FORMAT_LA1616_UNORM:
-      return MESA_FORMAT_L16A16_UNORM;
-   case PIPE_FORMAT_AL1616_UNORM:
-      return MESA_FORMAT_A16L16_UNORM;
+   case PIPE_FORMAT_L8A8_UNORM:
+      return MESA_FORMAT_LA_UNORM8;
+   case PIPE_FORMAT_L16A16_UNORM:
+      return MESA_FORMAT_LA_UNORM16;
    case PIPE_FORMAT_A8_UNORM:
       return MESA_FORMAT_A_UNORM8;
    case PIPE_FORMAT_A16_UNORM:
@@ -715,12 +792,10 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_SRGBA_DXT3;
    case PIPE_FORMAT_DXT5_SRGBA:
       return MESA_FORMAT_SRGBA_DXT5;
-   case PIPE_FORMAT_LA88_SRGB:
-      return MESA_FORMAT_L8A8_SRGB;
-   case PIPE_FORMAT_AL88_SRGB:
-      return MESA_FORMAT_A8L8_SRGB;
    case PIPE_FORMAT_L8_SRGB:
       return MESA_FORMAT_L_SRGB8;
+   case PIPE_FORMAT_L8A8_SRGB:
+      return MESA_FORMAT_LA_SRGB8;
    case PIPE_FORMAT_R8_SRGB:
       return MESA_FORMAT_R_SRGB8;
    case PIPE_FORMAT_R8G8B8_SRGB:
@@ -770,14 +845,12 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_R_UNORM8;
    case PIPE_FORMAT_R16_UNORM:
       return MESA_FORMAT_R_UNORM16;
-   case PIPE_FORMAT_RG88_UNORM:
-      return MESA_FORMAT_R8G8_UNORM;
-   case PIPE_FORMAT_GR88_UNORM:
-      return MESA_FORMAT_G8R8_UNORM;
-   case PIPE_FORMAT_RG1616_UNORM:
-      return MESA_FORMAT_R16G16_UNORM;
-   case PIPE_FORMAT_GR1616_UNORM:
-      return MESA_FORMAT_G16R16_UNORM;
+   case PIPE_FORMAT_R8G8_UNORM:
+      return MESA_FORMAT_RG_UNORM8;
+   case PIPE_FORMAT_R16G16_UNORM:
+      return MESA_FORMAT_RG_UNORM16;
+   case PIPE_FORMAT_B8G8R8_UNORM:
+      return MESA_FORMAT_BGR_UNORM8;
 
    case PIPE_FORMAT_A8_UINT:
       return MESA_FORMAT_A_UINT8;
@@ -919,10 +992,8 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
    /* signed normalized formats */
    case PIPE_FORMAT_R8_SNORM:
       return MESA_FORMAT_R_SNORM8;
-   case PIPE_FORMAT_RG88_SNORM:
-      return MESA_FORMAT_R8G8_SNORM;
-   case PIPE_FORMAT_GR88_SNORM:
-      return MESA_FORMAT_G8R8_SNORM;
+   case PIPE_FORMAT_R8G8_SNORM:
+      return MESA_FORMAT_RG_SNORM8;
    case PIPE_FORMAT_RGBA8888_SNORM:
       return MESA_FORMAT_R8G8B8A8_SNORM;
    case PIPE_FORMAT_ABGR8888_SNORM:
@@ -932,19 +1003,17 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_A_SNORM8;
    case PIPE_FORMAT_L8_SNORM:
       return MESA_FORMAT_L_SNORM8;
-   case PIPE_FORMAT_LA88_SNORM:
-      return MESA_FORMAT_L8A8_SNORM;
-   case PIPE_FORMAT_AL88_SNORM:
-      return MESA_FORMAT_A8L8_SNORM;
+   case PIPE_FORMAT_L8A8_SNORM:
+      return MESA_FORMAT_LA_SNORM8;
    case PIPE_FORMAT_I8_SNORM:
       return MESA_FORMAT_I_SNORM8;
 
    case PIPE_FORMAT_R16_SNORM:
       return MESA_FORMAT_R_SNORM16;
-   case PIPE_FORMAT_RG1616_SNORM:
-      return MESA_FORMAT_R16G16_SNORM;
-   case PIPE_FORMAT_GR1616_SNORM:
-      return MESA_FORMAT_G16R16_SNORM;
+   case PIPE_FORMAT_R16G16_SNORM:
+      return MESA_FORMAT_RG_SNORM16;
+   case PIPE_FORMAT_R16G16B16_SNORM:
+      return MESA_FORMAT_RGB_SNORM16;
    case PIPE_FORMAT_R16G16B16A16_SNORM:
       return MESA_FORMAT_RGBA_SNORM16;
 
@@ -1088,50 +1157,64 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
    case PIPE_FORMAT_ASTC_12x12_SRGB:
       return MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12;
 
+   case PIPE_FORMAT_ASTC_3x3x3:
+      return MESA_FORMAT_RGBA_ASTC_3x3x3;
+   case PIPE_FORMAT_ASTC_4x3x3:
+      return MESA_FORMAT_RGBA_ASTC_4x3x3;
+   case PIPE_FORMAT_ASTC_4x4x3:
+      return MESA_FORMAT_RGBA_ASTC_4x4x3;
+   case PIPE_FORMAT_ASTC_4x4x4:
+      return MESA_FORMAT_RGBA_ASTC_4x4x4;
+   case PIPE_FORMAT_ASTC_5x4x4:
+      return MESA_FORMAT_RGBA_ASTC_5x4x4;
+   case PIPE_FORMAT_ASTC_5x5x4:
+      return MESA_FORMAT_RGBA_ASTC_5x5x4;
+   case PIPE_FORMAT_ASTC_5x5x5:
+      return MESA_FORMAT_RGBA_ASTC_5x5x5;
+   case PIPE_FORMAT_ASTC_6x5x5:
+      return MESA_FORMAT_RGBA_ASTC_6x5x5;
+   case PIPE_FORMAT_ASTC_6x6x5:
+      return MESA_FORMAT_RGBA_ASTC_6x6x5;
+   case PIPE_FORMAT_ASTC_6x6x6:
+      return MESA_FORMAT_RGBA_ASTC_6x6x6;
+   case PIPE_FORMAT_ASTC_3x3x3_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_3x3x3;
+   case PIPE_FORMAT_ASTC_4x3x3_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x3x3;
+   case PIPE_FORMAT_ASTC_4x4x3_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x3;
+   case PIPE_FORMAT_ASTC_4x4x4_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x4;
+   case PIPE_FORMAT_ASTC_5x4x4_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4x4;
+   case PIPE_FORMAT_ASTC_5x5x4_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x4;
+   case PIPE_FORMAT_ASTC_5x5x5_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x5;
+   case PIPE_FORMAT_ASTC_6x5x5_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5x5;
+   case PIPE_FORMAT_ASTC_6x6x5_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x5;
+   case PIPE_FORMAT_ASTC_6x6x6_SRGB:
+      return MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x6;
+
+   case PIPE_FORMAT_ATC_RGB:
+      return MESA_FORMAT_ATC_RGB;
+   case PIPE_FORMAT_ATC_RGBA_EXPLICIT:
+      return MESA_FORMAT_ATC_RGBA_EXPLICIT;
+   case PIPE_FORMAT_ATC_RGBA_INTERPOLATED:
+      return MESA_FORMAT_ATC_RGBA_INTERPOLATED;
+
+   case PIPE_FORMAT_FXT1_RGB:
+      return MESA_FORMAT_RGB_FXT1;
+   case PIPE_FORMAT_FXT1_RGBA:
+      return MESA_FORMAT_RGBA_FXT1;
+
    default:
       return MESA_FORMAT_NONE;
    }
 }
 
-
-/**
- * Debug only: check that the two functions above correctly map
- * Mesa formats to Gallium formats and back again.
- */
-static void
-test_format_conversion(struct st_context *st)
-{
-   GLuint i;
-
-   /* test all Mesa formats */
-   for (i = 1; i < MESA_FORMAT_COUNT; i++) {
-      enum pipe_format pf;
-
-      if (st_compressed_format_fallback(st, i))
-         continue;
-
-      pf = st_mesa_format_to_pipe_format(st, i);
-      if (pf != PIPE_FORMAT_NONE) {
-         mesa_format MAYBE_UNUSED mf = st_pipe_format_to_mesa_format(pf);
-         assert(mf == i);
-      }
-   }
-
-   /* Test all Gallium formats */
-   for (i = 1; i < PIPE_FORMAT_COUNT; i++) {
-      mesa_format mf = st_pipe_format_to_mesa_format(i);
-      if (st_compressed_format_fallback(st, mf))
-         continue;
-
-      if (mf != MESA_FORMAT_NONE) {
-         enum pipe_format MAYBE_UNUSED pf =
-            st_mesa_format_to_pipe_format(st, mf);
-         assert(pf == i);
-      }
-   }
-}
-
-
 /**
  * Map GL texture formats to Gallium pipe formats.
  */
@@ -2182,18 +2265,6 @@ st_choose_format(struct st_context *st, GLenum internalFormat,
    int j;
    enum pipe_format pf;
 
-#ifdef DEBUG
-   {
-      static boolean firstCall = TRUE;
-      if (firstCall) {
-         test_format_conversion(st);
-         firstCall = FALSE;
-      }
-   }
-#else
-   (void) test_format_conversion;
-#endif
-
    /* can't render to compressed formats at this time */
    if (_mesa_is_compressed_format(st->ctx, internalFormat)
        && (bindings & ~PIPE_BIND_SAMPLER_VIEW)) {
@@ -2221,6 +2292,13 @@ st_choose_format(struct st_context *st, GLenum internalFormat,
          internalFormat = GL_RGB10_A2;
    }
 
+   if (type == GL_UNSIGNED_SHORT_5_5_5_1) {
+      if (internalFormat == GL_RGB)
+         internalFormat = GL_RGB5;
+      else if (internalFormat == GL_RGBA)
+         internalFormat = GL_RGB5_A1;
+   }
+
    /* search table for internalFormat */
    for (i = 0; i < ARRAY_SIZE(format_map); i++) {
       const struct format_mapping *mapping = &format_map[i];
@@ -2288,7 +2366,7 @@ st_choose_matching_format(struct st_context *st, unsigned bind,
    mesa_format mesa_format;
 
    for (mesa_format = 1; mesa_format < MESA_FORMAT_COUNT; mesa_format++) {
-      if (_mesa_get_format_color_encoding(mesa_format) == GL_SRGB) {
+      if (_mesa_is_format_srgb(mesa_format)) {
          continue;
       }
       if (_mesa_get_format_bits(mesa_format, GL_TEXTURE_INTENSITY_SIZE) > 0) {
@@ -2356,6 +2434,8 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target,
       bindings |= PIPE_BIND_DEPTH_STENCIL;
    else if (is_renderbuffer || internalFormat == 3 || internalFormat == 4 ||
             internalFormat == GL_RGB || internalFormat == GL_RGBA ||
+            internalFormat == GL_RGBA2 ||
+            internalFormat == GL_RGB4 || internalFormat == GL_RGBA4 ||
             internalFormat == GL_RGB8 || internalFormat == GL_RGBA8 ||
             internalFormat == GL_BGRA ||
             internalFormat == GL_RGB16F ||
@@ -2457,7 +2537,7 @@ st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target,
    /* If an sRGB framebuffer is unsupported, sRGB formats behave like linear
     * formats.
     */
-   if (!ctx->Extensions.EXT_framebuffer_sRGB) {
+   if (!ctx->Extensions.EXT_sRGB) {
       internalFormat = _mesa_get_linear_internalformat(internalFormat);
    }