mesa/st: enable carry/borrow lowering pass
[mesa.git] / src / mesa / main / formats.c
index 0cf97fa316b38cc2a807362213ed26755da8c7ba..5c670115ef7781d8acd2f191c37853348d6cfe18 100644 (file)
@@ -78,6 +78,7 @@ struct gl_format_info
  */
 static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
 {
+   /* Packed unorm formats */
    {
       MESA_FORMAT_NONE,            /* Name */
       "MESA_FORMAT_NONE",          /* StrName */
@@ -88,8 +89,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       0, 0, 0                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_A8B8G8R8_UNORM,        /* Name */
-      "MESA_FORMAT_A8B8G8R8_UNORM",      /* StrName */
+      MESA_FORMAT_A8B8G8R8_UNORM,  /* Name */
+      "MESA_FORMAT_A8B8G8R8_UNORM",/* StrName */
       GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
@@ -97,17 +98,17 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_R8G8B8A8_UNORM,    /* Name */
-      "MESA_FORMAT_R8G8B8A8_UNORM",  /* StrName */
-      GL_RGBA,                     /* BaseFormat */
+      MESA_FORMAT_X8B8G8R8_UNORM,  /* Name */
+      "MESA_FORMAT_X8B8G8R8_UNORM",/* StrName */
+      GL_RGB                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
-      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
+      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
       0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_B8G8R8A8_UNORM,        /* Name */
-      "MESA_FORMAT_B8G8R8A8_UNORM",      /* StrName */
+      MESA_FORMAT_R8G8B8A8_UNORM,  /* Name */
+      "MESA_FORMAT_R8G8B8A8_UNORM",/* StrName */
       GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
@@ -115,26 +116,26 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_A8R8G8B8_UNORM,    /* Name */
-      "MESA_FORMAT_A8R8G8B8_UNORM",  /* StrName */
-      GL_RGBA,                     /* BaseFormat */
+      MESA_FORMAT_R8G8B8X8_UNORM,  /* Name */
+      "MESA_FORMAT_R8G8B8X8_UNORM",/* StrName */
+      GL_RGB                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
-      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
+      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
       0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_X8B8G8R8_UNORM,        /* Name */
-      "MESA_FORMAT_X8B8G8R8_UNORM",      /* StrName */
-      GL_RGB                     /* BaseFormat */
+      MESA_FORMAT_B8G8R8A8_UNORM,  /* Name */
+      "MESA_FORMAT_B8G8R8A8_UNORM",/* StrName */
+      GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
-      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
+      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
       0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_R8G8B8X8_UNORM,    /* Name */
-      "MESA_FORMAT_R8G8B8X8_UNORM",  /* StrName */
+      MESA_FORMAT_B8G8R8X8_UNORM,  /* Name */
+      "MESA_FORMAT_B8G8R8X8_UNORM",/* StrName */
       GL_RGB,                      /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -142,17 +143,17 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_B8G8R8X8_UNORM,        /* Name */
-      "MESA_FORMAT_B8G8R8X8_UNORM",      /* StrName */
-      GL_RGB                     /* BaseFormat */
+      MESA_FORMAT_A8R8G8B8_UNORM,  /* Name */
+      "MESA_FORMAT_A8R8G8B8_UNORM",/* StrName */
+      GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
-      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
+      8, 8, 8, 8,                  /* Red/Green/Blue/AlphaBits */
       0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_X8R8G8B8_UNORM,    /* Name */
-      "MESA_FORMAT_X8R8G8B8_UNORM",  /* StrName */
+      MESA_FORMAT_X8R8G8B8_UNORM,  /* Name */
+      "MESA_FORMAT_X8R8G8B8_UNORM",/* StrName */
       GL_RGB,                      /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -160,26 +161,26 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_BGR_UNORM8,          /* Name */
-      "MESA_FORMAT_BGR_UNORM8",        /* StrName */
-      GL_RGB,                      /* BaseFormat */
+      MESA_FORMAT_L16A16_UNORM,    /* Name */
+      "MESA_FORMAT_L16A16_UNORM",  /* StrName */
+      GL_LUMINANCE_ALPHA,          /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
-      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 3                      /* BlockWidth/Height,Bytes */
+      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
+      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_RGB_UNORM8,          /* Name */
-      "MESA_FORMAT_RGB_UNORM8",        /* StrName */
-      GL_RGB,                      /* BaseFormat */
+      MESA_FORMAT_A16L16_UNORM,    /* Name */
+      "MESA_FORMAT_A16L16_UNORM",  /* StrName */
+      GL_LUMINANCE_ALPHA,          /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
-      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 3                      /* BlockWidth/Height,Bytes */
+      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
+      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_B5G6R5_UNORM,          /* Name */
-      "MESA_FORMAT_B5G6R5_UNORM",        /* StrName */
+      MESA_FORMAT_B5G6R5_UNORM,    /* Name */
+      "MESA_FORMAT_B5G6R5_UNORM",  /* StrName */
       GL_RGB,                      /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -187,8 +188,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_R5G6B5_UNORM,      /* Name */
-      "MESA_FORMAT_R5G6B5_UNORM",    /* StrName */
+      MESA_FORMAT_R5G6B5_UNORM,    /* Name */
+      "MESA_FORMAT_R5G6B5_UNORM",  /* StrName */
       GL_RGB,                      /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       5, 6, 5, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -196,8 +197,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_B4G4R4A4_UNORM,        /* Name */
-      "MESA_FORMAT_B4G4R4A4_UNORM",      /* StrName */
+      MESA_FORMAT_B4G4R4A4_UNORM,  /* Name */
+      "MESA_FORMAT_B4G4R4A4_UNORM",/* StrName */
       GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
@@ -205,8 +206,17 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_A4R4G4B4_UNORM,    /* Name */
-      "MESA_FORMAT_A4R4G4B4_UNORM",  /* StrName */
+      MESA_FORMAT_B4G4R4X4_UNORM,
+      "MESA_FORMAT_B4G4R4X4_UNORM",
+      GL_RGB,
+      GL_UNSIGNED_NORMALIZED,
+      4, 4, 4, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_A4R4G4B4_UNORM,  /* Name */
+      "MESA_FORMAT_A4R4G4B4_UNORM",/* StrName */
       GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       4, 4, 4, 4,                  /* Red/Green/Blue/AlphaBits */
@@ -214,8 +224,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_A1B5G5R5_UNORM,        /* Name */
-      "MESA_FORMAT_A1B5G5R5_UNORM",      /* StrName */
+      MESA_FORMAT_A1B5G5R5_UNORM,  /* Name */
+      "MESA_FORMAT_A1B5G5R5_UNORM",/* StrName */
       GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
@@ -223,8 +233,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_B5G5R5A1_UNORM,        /* Name */
-      "MESA_FORMAT_B5G5R5A1_UNORM",      /* StrName */
+      MESA_FORMAT_B5G5R5A1_UNORM,  /* Name */
+      "MESA_FORMAT_B5G5R5A1_UNORM",/* StrName */
       GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
@@ -232,8 +242,17 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_A1R5G5B5_UNORM,    /* Name */
-      "MESA_FORMAT_A1R5G5B5_UNORM",  /* StrName */
+      MESA_FORMAT_B5G5R5X1_UNORM,
+      "MESA_FORMAT_B5G5R5X1_UNORM",
+      GL_RGB,
+      GL_UNSIGNED_NORMALIZED,
+      5, 5, 5, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_A1R5G5B5_UNORM,  /* Name */
+      "MESA_FORMAT_A1R5G5B5_UNORM",/* StrName */
       GL_RGBA,                     /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       5, 5, 5, 1,                  /* Red/Green/Blue/AlphaBits */
@@ -241,17 +260,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_L4A4_UNORM,            /* Name */
-      "MESA_FORMAT_L4A4_UNORM",          /* StrName */
-      GL_LUMINANCE_ALPHA,          /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      0, 0, 0, 4,                  /* Red/Green/Blue/AlphaBits */
-      4, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 1                      /* BlockWidth/Height,Bytes */
-   },
-   {
-      MESA_FORMAT_L8A8_UNORM,            /* Name */
-      "MESA_FORMAT_L8A8_UNORM",          /* StrName */
+      MESA_FORMAT_L8A8_UNORM,      /* Name */
+      "MESA_FORMAT_L8A8_UNORM",    /* StrName */
       GL_LUMINANCE_ALPHA,          /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
@@ -259,8 +269,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_A8L8_UNORM,        /* Name */
-      "MESA_FORMAT_A8L8_UNORM",      /* StrName */
+      MESA_FORMAT_A8L8_UNORM,      /* Name */
+      "MESA_FORMAT_A8L8_UNORM",    /* StrName */
       GL_LUMINANCE_ALPHA,          /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
@@ -268,26 +278,35 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_L16A16_UNORM,          /* Name */
-      "MESA_FORMAT_L16A16_UNORM",        /* StrName */
-      GL_LUMINANCE_ALPHA,          /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
-      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 4                      /* BlockWidth/Height,Bytes */
+      MESA_FORMAT_R8G8_UNORM,
+      "MESA_FORMAT_R8G8_UNORM",
+      GL_RG,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_G8R8_UNORM,
+      "MESA_FORMAT_G8R8_UNORM",
+      GL_RG,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 2
    },
    {
-      MESA_FORMAT_A16L16_UNORM,      /* Name */
-      "MESA_FORMAT_A16L16_UNORM",    /* StrName */
+      MESA_FORMAT_L4A4_UNORM,      /* Name */
+      "MESA_FORMAT_L4A4_UNORM",    /* StrName */
       GL_LUMINANCE_ALPHA,          /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
-      0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
-      16, 0, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 4                      /* BlockWidth/Height,Bytes */
+      0, 0, 0, 4,                  /* Red/Green/Blue/AlphaBits */
+      4, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 1                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_B2G3R3_UNORM,          /* Name */
-      "MESA_FORMAT_B2G3R3_UNORM",        /* StrName */
+      MESA_FORMAT_B2G3R3_UNORM,    /* Name */
+      "MESA_FORMAT_B2G3R3_UNORM",  /* StrName */
       GL_RGB,                      /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       3, 3, 2, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -295,8 +314,118 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 1                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_A_UNORM8,              /* Name */
-      "MESA_FORMAT_A_UNORM8",            /* StrName */
+      MESA_FORMAT_R16G16_UNORM,
+      "MESA_FORMAT_R16G16_UNORM",
+      GL_RG,
+      GL_UNSIGNED_NORMALIZED,
+      16, 16, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_G16R16_UNORM,
+      "MESA_FORMAT_G16R16_UNORM",
+      GL_RG,
+      GL_UNSIGNED_NORMALIZED,
+      16, 16, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_B10G10R10A2_UNORM,
+      "MESA_FORMAT_B10G10R10A2_UNORM",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,
+      10, 10, 10, 2,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_B10G10R10X2_UNORM,
+      "MESA_FORMAT_B10G10R10X2_UNORM",
+      GL_RGB,
+      GL_UNSIGNED_NORMALIZED,
+      10, 10, 10, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_R10G10B10A2_UNORM,
+      "MESA_FORMAT_R10G10B10A2_UNORM",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,
+      10, 10, 10, 2,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_S8_UINT_Z24_UNORM,   /* Name */
+      "MESA_FORMAT_S8_UINT_Z24_UNORM", /* StrName */
+      GL_DEPTH_STENCIL,                /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,          /* DataType */
+      0, 0, 0, 0,                      /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 24, 8,                  /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 4                          /* BlockWidth/Height,Bytes */
+   },
+   {
+      MESA_FORMAT_X8_UINT_Z24_UNORM,   /* Name */
+      "MESA_FORMAT_X8_UINT_Z24_UNORM", /* StrName */
+      GL_DEPTH_COMPONENT,              /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,          /* DataType */
+      0, 0, 0, 0,                      /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 24, 0,                  /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 4                          /* BlockWidth/Height,Bytes */
+   },
+   {
+      MESA_FORMAT_Z24_UNORM_S8_UINT,   /* Name */
+      "MESA_FORMAT_Z24_UNORM_S8_UINT", /* StrName */
+      GL_DEPTH_STENCIL,                /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,          /* DataType */
+      0, 0, 0, 0,                      /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 24, 8,                  /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 4                          /* BlockWidth/Height,Bytes */
+   },
+   {
+      MESA_FORMAT_Z24_UNORM_X8_UINT,   /* Name */
+      "MESA_FORMAT_Z24_UNORM_X8_UINT", /* StrName */
+      GL_DEPTH_COMPONENT,              /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,          /* DataType */
+      0, 0, 0, 0,                      /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 24, 0,                  /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 4                          /* BlockWidth/Height,Bytes */
+   },
+   {
+      MESA_FORMAT_YCBCR,           /* Name */
+      "MESA_FORMAT_YCBCR",         /* StrName */
+      GL_YCBCR_MESA,               /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,      /* DataType */
+      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 2                      /* BlockWidth/Height,Bytes */
+   },
+   {
+      MESA_FORMAT_YCBCR_REV,       /* Name */
+      "MESA_FORMAT_YCBCR_REV",     /* StrName */
+      GL_YCBCR_MESA,               /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,      /* DataType */
+      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 2                      /* BlockWidth/Height,Bytes */
+   },
+
+   /* Array unorm formats */
+   {
+      MESA_FORMAT_DUDV8,
+      "MESA_FORMAT_DUDV8",
+      GL_DUDV_ATI,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_A_UNORM8,        /* Name */
+      "MESA_FORMAT_A_UNORM8",      /* StrName */
       GL_ALPHA,                    /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 8,                  /* Red/Green/Blue/AlphaBits */
@@ -304,8 +433,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 1                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_A_UNORM16,             /* Name */
-      "MESA_FORMAT_A_UNORM16",           /* StrName */
+      MESA_FORMAT_A_UNORM16,       /* Name */
+      "MESA_FORMAT_A_UNORM16",     /* StrName */
       GL_ALPHA,                    /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 16,                 /* Red/Green/Blue/AlphaBits */
@@ -313,8 +442,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_L_UNORM8,              /* Name */
-      "MESA_FORMAT_L_UNORM8",            /* StrName */
+      MESA_FORMAT_L_UNORM8,        /* Name */
+      "MESA_FORMAT_L_UNORM8",      /* StrName */
       GL_LUMINANCE,                /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -322,8 +451,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 1                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_L_UNORM16,             /* Name */
-      "MESA_FORMAT_L_UNORM16",           /* StrName */
+      MESA_FORMAT_L_UNORM16,       /* Name */
+      "MESA_FORMAT_L_UNORM16",     /* StrName */
       GL_LUMINANCE,                /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -331,8 +460,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_I_UNORM8,              /* Name */
-      "MESA_FORMAT_I_UNORM8",            /* StrName */
+      MESA_FORMAT_I_UNORM8,        /* Name */
+      "MESA_FORMAT_I_UNORM8",      /* StrName */
       GL_INTENSITY,                /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -340,32 +469,14 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 1                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_I_UNORM16,             /* Name */
-      "MESA_FORMAT_I_UNORM16",           /* StrName */
+      MESA_FORMAT_I_UNORM16,       /* Name */
+      "MESA_FORMAT_I_UNORM16",     /* StrName */
       GL_INTENSITY,                /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
       0, 16, 0, 0, 0,              /* Lum/Int/Index/Depth/StencilBits */
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
-   {
-      MESA_FORMAT_YCBCR,           /* Name */
-      "MESA_FORMAT_YCBCR",         /* StrName */
-      GL_YCBCR_MESA,               /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 2                      /* BlockWidth/Height,Bytes */
-   },
-   {
-      MESA_FORMAT_YCBCR_REV,       /* Name */
-      "MESA_FORMAT_YCBCR_REV",     /* StrName */
-      GL_YCBCR_MESA,               /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 2                      /* BlockWidth/Height,Bytes */
-   },
    {
       MESA_FORMAT_R_UNORM8,
       "MESA_FORMAT_R_UNORM8",
@@ -375,24 +486,6 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       0, 0, 0, 0, 0,
       1, 1, 1
    },
-   {
-      MESA_FORMAT_R8G8_UNORM,
-      "MESA_FORMAT_R8G8_UNORM",
-      GL_RG,
-      GL_UNSIGNED_NORMALIZED,
-      8, 8, 0, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 2
-   },
-   {
-      MESA_FORMAT_G8R8_UNORM,
-      "MESA_FORMAT_G8R8_UNORM",
-      GL_RG,
-      GL_UNSIGNED_NORMALIZED,
-      8, 8, 0, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 2
-   },
    {
       MESA_FORMAT_R_UNORM16,
       "MESA_FORMAT_R_UNORM16",
@@ -403,53 +496,44 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2
    },
    {
-      MESA_FORMAT_R16G16_UNORM,
-      "MESA_FORMAT_R16G16_UNORM",
-      GL_RG,
-      GL_UNSIGNED_NORMALIZED,
-      16, 16, 0, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
+      MESA_FORMAT_BGR_UNORM8,      /* Name */
+      "MESA_FORMAT_BGR_UNORM8",    /* StrName */
+      GL_RGB,                      /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,      /* DataType */
+      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 3                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_G16R16_UNORM,
-      "MESA_FORMAT_G16R16_UNORM",
-      GL_RG,
-      GL_UNSIGNED_NORMALIZED,
-      16, 16, 0, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
+      MESA_FORMAT_RGB_UNORM8,      /* Name */
+      "MESA_FORMAT_RGB_UNORM8",    /* StrName */
+      GL_RGB,                      /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,      /* DataType */
+      8, 8, 8, 0,                  /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 3                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_B10G10R10A2_UNORM,
-      "MESA_FORMAT_B10G10R10A2_UNORM",
+      MESA_FORMAT_RGBA_UNORM16,
+      "MESA_FORMAT_RGBA_UNORM16",
       GL_RGBA,
       GL_UNSIGNED_NORMALIZED,
-      10, 10, 10, 2,
+      16, 16, 16, 16,
       0, 0, 0, 0, 0,
-      1, 1, 4
-   },
-   {
-      MESA_FORMAT_S8_UINT_Z24_UNORM,          /* Name */
-      "MESA_FORMAT_S8_UINT_Z24_UNORM",        /* StrName */
-      GL_DEPTH_STENCIL,            /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 4                      /* BlockWidth/Height,Bytes */
+      1, 1, 8
    },
    {
-      MESA_FORMAT_Z24_UNORM_S8_UINT,          /* Name */
-      "MESA_FORMAT_Z24_UNORM_S8_UINT",        /* StrName */
-      GL_DEPTH_STENCIL,            /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 24, 8,              /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 4                      /* BlockWidth/Height,Bytes */
+      MESA_FORMAT_RGBX_UNORM16,
+      "MESA_FORMAT_RGBX_UNORM16",
+      GL_RGB,
+      GL_UNSIGNED_NORMALIZED,
+      16, 16, 16, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 8
    },
    {
-      MESA_FORMAT_Z_UNORM16,             /* Name */
-      "MESA_FORMAT_Z_UNORM16",           /* StrName */
+      MESA_FORMAT_Z_UNORM16,       /* Name */
+      "MESA_FORMAT_Z_UNORM16",     /* StrName */
       GL_DEPTH_COMPONENT,          /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
@@ -457,232 +541,326 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_Z24_UNORM_X8_UINT,          /* Name */
-      "MESA_FORMAT_Z24_UNORM_X8_UINT",        /* StrName */
+      MESA_FORMAT_Z_UNORM32,       /* Name */
+      "MESA_FORMAT_Z_UNORM32",     /* StrName */
       GL_DEPTH_COMPONENT,          /* BaseFormat */
       GL_UNSIGNED_NORMALIZED,      /* DataType */
       0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
+      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
       1, 1, 4                      /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_X8Z24_UNORM,          /* Name */
-      "MESA_FORMAT_X8Z24_UNORM",        /* StrName */
-      GL_DEPTH_COMPONENT,          /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
+      MESA_FORMAT_S_UINT8,         /* Name */
+      "MESA_FORMAT_S_UINT8",       /* StrName */
+      GL_STENCIL_INDEX,            /* BaseFormat */
+      GL_UNSIGNED_INT,             /* DataType */
       0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 24, 0,              /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 4                      /* BlockWidth/Height,Bytes */
-   },
-   {
-      MESA_FORMAT_Z_UNORM32,             /* Name */
-      "MESA_FORMAT_Z_UNORM32",           /* StrName */
-      GL_DEPTH_COMPONENT,          /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 4                      /* BlockWidth/Height,Bytes */
+      0, 0, 0, 0, 8,               /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 1                      /* BlockWidth/Height,Bytes */
    },
+
+   /* Packed signed/normalized formats */
    {
-      MESA_FORMAT_S_UINT8,              /* Name */
-      "MESA_FORMAT_S_UINT8",            /* StrName */
-      GL_STENCIL_INDEX,            /* BaseFormat */
-      GL_UNSIGNED_INT,             /* DataType */
-      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 8,               /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 1                      /* BlockWidth/Height,Bytes */
+      MESA_FORMAT_A8B8G8R8_SNORM,
+      "MESA_FORMAT_A8B8G8R8_SNORM",
+      GL_RGBA,
+      GL_SIGNED_NORMALIZED,
+      8, 8, 8, 8,
+      0, 0, 0, 0, 0,
+      1, 1, 4
    },
    {
-      MESA_FORMAT_BGR_SRGB8,
-      "MESA_FORMAT_BGR_SRGB8",
+      MESA_FORMAT_X8B8G8R8_SNORM,
+      "MESA_FORMAT_X8B8G8R8_SNORM",
       GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
+      GL_SIGNED_NORMALIZED,
       8, 8, 8, 0,
       0, 0, 0, 0, 0,
-      1, 1, 3
+      1, 1, 4                       /* 4 bpp, but no alpha */
    },
    {
-      MESA_FORMAT_A8B8G8R8_SRGB,
-      "MESA_FORMAT_A8B8G8R8_SRGB",
+      MESA_FORMAT_R8G8B8A8_SNORM,
+      "MESA_FORMAT_R8G8B8A8_SNORM",
       GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,    
+      GL_SIGNED_NORMALIZED,
       8, 8, 8, 8,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
    {
-      MESA_FORMAT_B8G8R8A8_SRGB,
-      "MESA_FORMAT_B8G8R8A8_SRGB",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,    
-      8, 8, 8, 8,
+      MESA_FORMAT_R8G8B8X8_SNORM,
+      "MESA_FORMAT_R8G8B8X8_SNORM",
+      GL_RGB,
+      GL_SIGNED_NORMALIZED,
+      8, 8, 8, 0,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
    {
-      MESA_FORMAT_R8G8B8A8_SRGB,
-      "MESA_FORMAT_R8G8B8A8_SRGB",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,    
-      8, 8, 8, 8,
+      MESA_FORMAT_R16G16_SNORM,
+      "MESA_FORMAT_R16G16_SNORM",
+      GL_RG,
+      GL_SIGNED_NORMALIZED,
+      16, 16, 0, 0,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
    {
-      MESA_FORMAT_L_SRGB8,
-      "MESA_FORMAT_L_SRGB8",
-      GL_LUMINANCE,
-      GL_UNSIGNED_NORMALIZED,    
-      0, 0, 0, 0,
-      8, 0, 0, 0, 0,
-      1, 1, 1
+      MESA_FORMAT_G16R16_SNORM,
+      "MESA_FORMAT_G16R16_SNORM",
+      GL_RG,
+      GL_SIGNED_NORMALIZED,
+      16, 16, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
    },
    {
-      MESA_FORMAT_L8A8_SRGB,
-      "MESA_FORMAT_L8A8_SRGB",
+      MESA_FORMAT_R8G8_SNORM,
+      "MESA_FORMAT_R8G8_SNORM",
+      GL_RG,
+      GL_SIGNED_NORMALIZED,
+      8, 8, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_G8R8_SNORM,
+      "MESA_FORMAT_G8R8_SNORM",
+      GL_RG,
+      GL_SIGNED_NORMALIZED,
+      8, 8, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_L8A8_SNORM,
+      "MESA_FORMAT_L8A8_SNORM",
       GL_LUMINANCE_ALPHA,
-      GL_UNSIGNED_NORMALIZED,    
+      GL_SIGNED_NORMALIZED,
       0, 0, 0, 8,
       8, 0, 0, 0, 0,
       1, 1, 2
    },
+
+   /* Array signed/normalized formats */
    {
-      MESA_FORMAT_SRGB_DXT1,       /* Name */
-      "MESA_FORMAT_SRGB_DXT1",     /* StrName */
-      GL_RGB,                      /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
-      4, 4, 8                      /* 8 bytes per 4x4 block */
-   },
-   {
-      MESA_FORMAT_SRGBA_DXT1,
-      "MESA_FORMAT_SRGBA_DXT1",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,
-      4, 4, 4, 4,
+      MESA_FORMAT_A_SNORM8,
+      "MESA_FORMAT_A_SNORM8",
+      GL_ALPHA,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 8,
       0, 0, 0, 0, 0,
-      4, 4, 8                      /* 8 bytes per 4x4 block */
+      1, 1, 1
    },
    {
-      MESA_FORMAT_SRGBA_DXT3,
-      "MESA_FORMAT_SRGBA_DXT3",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,
-      4, 4, 4, 4,
+      MESA_FORMAT_A_SNORM16,
+      "MESA_FORMAT_A_SNORM16",
+      GL_ALPHA,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 16,
       0, 0, 0, 0, 0,
-      4, 4, 16                     /* 16 bytes per 4x4 block */
+      1, 1, 2
    },
    {
-      MESA_FORMAT_SRGBA_DXT5,
-      "MESA_FORMAT_SRGBA_DXT5",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,
-      4, 4, 4, 4,
-      0, 0, 0, 0, 0,
-      4, 4, 16                     /* 16 bytes per 4x4 block */
+      MESA_FORMAT_L_SNORM8,
+      "MESA_FORMAT_L_SNORM8",
+      GL_LUMINANCE,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      8, 0, 0, 0, 0,
+      1, 1, 1
    },
-
    {
-      MESA_FORMAT_RGB_FXT1,
-      "MESA_FORMAT_RGB_FXT1",
-      GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
-      4, 4, 4, 0,                  /* approx Red/Green/BlueBits */
-      0, 0, 0, 0, 0,
-      8, 4, 16                     /* 16 bytes per 8x4 block */
+      MESA_FORMAT_L_SNORM16,
+      "MESA_FORMAT_L_SNORM16",
+      GL_LUMINANCE,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      16, 0, 0, 0, 0,
+      1, 1, 2
    },
    {
-      MESA_FORMAT_RGBA_FXT1,
-      "MESA_FORMAT_RGBA_FXT1",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,
-      4, 4, 4, 1,                  /* approx Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 0,
-      8, 4, 16                     /* 16 bytes per 8x4 block */
+      MESA_FORMAT_I_SNORM8,
+      "MESA_FORMAT_I_SNORM8",
+      GL_INTENSITY,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      0, 8, 0, 0, 0,
+      1, 1, 1
    },
-
    {
-      MESA_FORMAT_RGB_DXT1,        /* Name */
-      "MESA_FORMAT_RGB_DXT1",      /* StrName */
-      GL_RGB,                      /* BaseFormat */
-      GL_UNSIGNED_NORMALIZED,      /* DataType */
-      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
-      4, 4, 8                      /* 8 bytes per 4x4 block */
+      MESA_FORMAT_I_SNORM16,
+      "MESA_FORMAT_I_SNORM16",
+      GL_INTENSITY,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      0, 16, 0, 0, 0,
+      1, 1, 2
    },
    {
-      MESA_FORMAT_RGBA_DXT1,
-      "MESA_FORMAT_RGBA_DXT1",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,    
-      4, 4, 4, 4,
-      0, 0, 0, 0, 0,
-      4, 4, 8                      /* 8 bytes per 4x4 block */
+      MESA_FORMAT_R_SNORM8,         /* Name */
+      "MESA_FORMAT_R_SNORM8",       /* StrName */
+      GL_RED,                       /* BaseFormat */
+      GL_SIGNED_NORMALIZED,         /* DataType */
+      8, 0, 0, 0,                   /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 0, 0,                /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 1                       /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_RGBA_DXT3,
-      "MESA_FORMAT_RGBA_DXT3",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,    
-      4, 4, 4, 4,
+      MESA_FORMAT_R_SNORM16,
+      "MESA_FORMAT_R_SNORM16",
+      GL_RED,
+      GL_SIGNED_NORMALIZED,
+      16, 0, 0, 0,
       0, 0, 0, 0, 0,
-      4, 4, 16                     /* 16 bytes per 4x4 block */
+      1, 1, 2
    },
    {
-      MESA_FORMAT_RGBA_DXT5,
-      "MESA_FORMAT_RGBA_DXT5",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,    
-      4, 4, 4, 4,
-      0, 0, 0, 0, 0,
-      4, 4, 16                     /* 16 bytes per 4x4 block */
+      MESA_FORMAT_LA_SNORM16,
+      "MESA_FORMAT_LA_SNORM16",
+      GL_LUMINANCE_ALPHA,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 16,
+      16, 0, 0, 0, 0,
+      1, 1, 4
    },
    {
-      MESA_FORMAT_RGBA_FLOAT32,
-      "MESA_FORMAT_RGBA_FLOAT32",
-      GL_RGBA,
-      GL_FLOAT,
-      32, 32, 32, 32,
+      MESA_FORMAT_RGB_SNORM16,
+      "MESA_FORMAT_RGB_SNORM16",
+      GL_RGB,
+      GL_SIGNED_NORMALIZED,
+      16, 16, 16, 0,
       0, 0, 0, 0, 0,
-      1, 1, 16
+      1, 1, 6
    },
    {
-      MESA_FORMAT_RGBA_FLOAT16,
-      "MESA_FORMAT_RGBA_FLOAT16",
+      MESA_FORMAT_RGBA_SNORM16,
+      "MESA_FORMAT_RGBA_SNORM16",
       GL_RGBA,
-      GL_FLOAT,
+      GL_SIGNED_NORMALIZED,
       16, 16, 16, 16,
       0, 0, 0, 0, 0,
       1, 1, 8
    },
    {
-      MESA_FORMAT_RGB_FLOAT32,
-      "MESA_FORMAT_RGB_FLOAT32",
+      MESA_FORMAT_RGBX_SNORM16,
+      "MESA_FORMAT_RGBX_SNORM16",
       GL_RGB,
-      GL_FLOAT,
-      32, 32, 32, 0,
+      GL_SIGNED_NORMALIZED,
+      16, 16, 16, 0,
       0, 0, 0, 0, 0,
-      1, 1, 12
+      1, 1, 8
    },
+
+   /* Packed sRGB formats */
    {
-      MESA_FORMAT_RGB_FLOAT16,
-      "MESA_FORMAT_RGB_FLOAT16",
-      GL_RGB,
-      GL_FLOAT,
-      16, 16, 16, 0,
+      MESA_FORMAT_A8B8G8R8_SRGB,
+      "MESA_FORMAT_A8B8G8R8_SRGB",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,    
+      8, 8, 8, 8,
       0, 0, 0, 0, 0,
-      1, 1, 6
+      1, 1, 4
    },
    {
-      MESA_FORMAT_A_FLOAT32,
-      "MESA_FORMAT_A_FLOAT32",
-      GL_ALPHA,
+      MESA_FORMAT_B8G8R8A8_SRGB,
+      "MESA_FORMAT_B8G8R8A8_SRGB",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,    
+      8, 8, 8, 8,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_B8G8R8X8_SRGB,
+      "MESA_FORMAT_B8G8R8X8_SRGB",
+      GL_RGB,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_R8G8B8A8_SRGB,
+      "MESA_FORMAT_R8G8B8A8_SRGB",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,    
+      8, 8, 8, 8,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_R8G8B8X8_SRGB,
+      "MESA_FORMAT_R8G8B8X8_SRGB",
+      GL_RGB,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_L8A8_SRGB,
+      "MESA_FORMAT_L8A8_SRGB",
+      GL_LUMINANCE_ALPHA,
+      GL_UNSIGNED_NORMALIZED,    
+      0, 0, 0, 8,
+      8, 0, 0, 0, 0,
+      1, 1, 2
+   },
+
+   /* Array sRGB formats */
+   {
+      MESA_FORMAT_L_SRGB8,
+      "MESA_FORMAT_L_SRGB8",
+      GL_LUMINANCE,
+      GL_UNSIGNED_NORMALIZED,    
+      0, 0, 0, 0,
+      8, 0, 0, 0, 0,
+      1, 1, 1
+   },
+   {
+      MESA_FORMAT_BGR_SRGB8,
+      "MESA_FORMAT_BGR_SRGB8",
+      GL_RGB,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 3
+   },
+
+   /* Packed float formats */
+   {
+      MESA_FORMAT_R9G9B9E5_FLOAT,
+      "MESA_FORMAT_RGB9_E5",
+      GL_RGB,
       GL_FLOAT,
-      0, 0, 0, 32,
+      9, 9, 9, 0,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
+   {
+      MESA_FORMAT_R11G11B10_FLOAT,
+      "MESA_FORMAT_R11G11B10_FLOAT",
+      GL_RGB,
+      GL_FLOAT,
+      11, 11, 10, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_Z32_FLOAT_S8X24_UINT,   /* Name */
+      "MESA_FORMAT_Z32_FLOAT_S8X24_UINT", /* StrName */
+      GL_DEPTH_STENCIL,                   /* BaseFormat */
+      /* DataType here is used to answer GL_TEXTURE_DEPTH_TYPE queries, and is
+       * never used for stencil because stencil is always GL_UNSIGNED_INT.
+       */
+      GL_FLOAT,                    /* DataType */
+      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 32, 8,              /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 8                      /* BlockWidth/Height,Bytes */
+   },
+
+   /* Array float formats */
    {
       MESA_FORMAT_A_FLOAT16,
       "MESA_FORMAT_A_FLOAT16",
@@ -693,12 +871,12 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2
    },
    {
-      MESA_FORMAT_L_FLOAT32,
-      "MESA_FORMAT_L_FLOAT32",
-      GL_LUMINANCE,
+      MESA_FORMAT_A_FLOAT32,
+      "MESA_FORMAT_A_FLOAT32",
+      GL_ALPHA,
       GL_FLOAT,
-      0, 0, 0, 0,
-      32, 0, 0, 0, 0,
+      0, 0, 0, 32,
+      0, 0, 0, 0, 0,
       1, 1, 4
    },
    {
@@ -711,13 +889,13 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2
    },
    {
-      MESA_FORMAT_LA_FLOAT32,
-      "MESA_FORMAT_LA_FLOAT32",
-      GL_LUMINANCE_ALPHA,
+      MESA_FORMAT_L_FLOAT32,
+      "MESA_FORMAT_L_FLOAT32",
+      GL_LUMINANCE,
       GL_FLOAT,
-      0, 0, 0, 32,
+      0, 0, 0, 0,
       32, 0, 0, 0, 0,
-      1, 1, 8
+      1, 1, 4
    },
    {
       MESA_FORMAT_LA_FLOAT16,
@@ -728,6 +906,24 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       16, 0, 0, 0, 0,
       1, 1, 4
    },
+   {
+      MESA_FORMAT_LA_FLOAT32,
+      "MESA_FORMAT_LA_FLOAT32",
+      GL_LUMINANCE_ALPHA,
+      GL_FLOAT,
+      0, 0, 0, 32,
+      32, 0, 0, 0, 0,
+      1, 1, 8
+   },
+   {
+      MESA_FORMAT_I_FLOAT16,
+      "MESA_FORMAT_I_FLOAT16",
+      GL_INTENSITY,
+      GL_FLOAT,
+      0, 0, 0, 0,
+      0, 16, 0, 0, 0,
+      1, 1, 2
+   },
    {
       MESA_FORMAT_I_FLOAT32,
       "MESA_FORMAT_I_FLOAT32",
@@ -738,12 +934,12 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 4
    },
    {
-      MESA_FORMAT_I_FLOAT16,
-      "MESA_FORMAT_I_FLOAT16",
-      GL_INTENSITY,
+      MESA_FORMAT_R_FLOAT16,
+      "MESA_FORMAT_R_FLOAT16",
+      GL_RED,
       GL_FLOAT,
-      0, 0, 0, 0,
-      0, 16, 0, 0, 0,
+      16, 0, 0, 0,
+      0, 0, 0, 0, 0,
       1, 1, 2
    },
    {
@@ -756,13 +952,13 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 4
    },
    {
-      MESA_FORMAT_R_FLOAT16,
-      "MESA_FORMAT_R_FLOAT16",
-      GL_RED,
+      MESA_FORMAT_RG_FLOAT16,
+      "MESA_FORMAT_RG_FLOAT16",
+      GL_RG,
       GL_FLOAT,
-      16, 0, 0, 0,
+      16, 16, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 2
+      1, 1, 4
    },
    {
       MESA_FORMAT_RG_FLOAT32,
@@ -774,17 +970,90 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 8
    },
    {
-      MESA_FORMAT_RG_FLOAT16,
-      "MESA_FORMAT_RG_FLOAT16",
-      GL_RG,
+      MESA_FORMAT_RGB_FLOAT16,
+      "MESA_FORMAT_RGB_FLOAT16",
+      GL_RGB,
       GL_FLOAT,
-      16, 16, 0, 0,
+      16, 16, 16, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 6
+   },
+   {
+      MESA_FORMAT_RGB_FLOAT32,
+      "MESA_FORMAT_RGB_FLOAT32",
+      GL_RGB,
+      GL_FLOAT,
+      32, 32, 32, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 12
+   },
+   {
+      MESA_FORMAT_RGBA_FLOAT16,
+      "MESA_FORMAT_RGBA_FLOAT16",
+      GL_RGBA,
+      GL_FLOAT,
+      16, 16, 16, 16,
+      0, 0, 0, 0, 0,
+      1, 1, 8
+   },
+   {
+      MESA_FORMAT_RGBA_FLOAT32,
+      "MESA_FORMAT_RGBA_FLOAT32",
+      GL_RGBA,
+      GL_FLOAT,
+      32, 32, 32, 32,
+      0, 0, 0, 0, 0,
+      1, 1, 16
+   },
+   {
+      MESA_FORMAT_RGBX_FLOAT16,
+      "MESA_FORMAT_RGBX_FLOAT16",
+      GL_RGB,
+      GL_FLOAT,
+      16, 16, 16, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 8
+   },
+   {
+      MESA_FORMAT_RGBX_FLOAT32,
+      "MESA_FORMAT_RGBX_FLOAT32",
+      GL_RGB,
+      GL_FLOAT,
+      32, 32, 32, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 16
+   },
+   {
+      MESA_FORMAT_Z_FLOAT32,       /* Name */
+      "MESA_FORMAT_Z_FLOAT32",     /* StrName */
+      GL_DEPTH_COMPONENT,          /* BaseFormat */
+      GL_FLOAT,                    /* DataType */
+      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
+      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
+      1, 1, 4                      /* BlockWidth/Height,Bytes */
+   },
+
+   /* Packed signed/unsigned non-normalized integer formats */
+   {
+      MESA_FORMAT_B10G10R10A2_UINT,
+      "MESA_FORMAT_B10G10R10A2_UINT",
+      GL_RGBA,
+      GL_UNSIGNED_INT,
+      10, 10, 10, 2,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_R10G10B10A2_UINT,
+      "MESA_FORMAT_R10G10B10A2_UINT",
+      GL_RGBA,
+      GL_UNSIGNED_INT,
+      10, 10, 10, 2,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
 
-   /* unnormalized signed int formats */
-   /* unnormalized unsigned int formats */
+   /* Array signed/unsigned non-normalized integer formats */
    {
       MESA_FORMAT_A_UINT8,
       "MESA_FORMAT_A_UINT8",
@@ -1001,42 +1270,41 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       32, 0, 0, 0, 0,
       1, 1, 8
    },
-
    {
-      MESA_FORMAT_R_SINT8,
-      "MESA_FORMAT_R_SINT8",
+      MESA_FORMAT_R_UINT8,
+      "MESA_FORMAT_R_UINT8",
       GL_RED,
-      GL_INT,
+      GL_UNSIGNED_INT,
       8, 0, 0, 0,
       0, 0, 0, 0, 0,
       1, 1, 1
    },
    {
-      MESA_FORMAT_RG_SINT8,
-      "MESA_FORMAT_RG_SINT8",
-      GL_RG,
-      GL_INT,
-      8, 8, 0, 0,
+      MESA_FORMAT_R_UINT16,
+      "MESA_FORMAT_R_UINT16",
+      GL_RED,
+      GL_UNSIGNED_INT,
+      16, 0, 0, 0,
       0, 0, 0, 0, 0,
       1, 1, 2
    },
    {
-      MESA_FORMAT_RGB_SINT8,
-      "MESA_FORMAT_RGB_SINT8",
-      GL_RGB,
-      GL_INT,
-      8, 8, 8, 0,
+      MESA_FORMAT_R_UINT32,
+      "MESA_FORMAT_R_UINT32",
+      GL_RED,
+      GL_UNSIGNED_INT,
+      32, 0, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 3
+      1, 1, 4
    },
    {
-      MESA_FORMAT_RGBA_SINT8,
-      "MESA_FORMAT_RGBA_SINT8",
-      GL_RGBA,
+      MESA_FORMAT_R_SINT8,
+      "MESA_FORMAT_R_SINT8",
+      GL_RED,
       GL_INT,
-      8, 8, 8, 8,
+      8, 0, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 4
+      1, 1, 1
    },
    {
       MESA_FORMAT_R_SINT16,
@@ -1048,85 +1316,67 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2
    },
    {
-      MESA_FORMAT_RG_SINT16,
-      "MESA_FORMAT_RG_SINT16",
-      GL_RG,
+      MESA_FORMAT_R_SINT32,
+      "MESA_FORMAT_R_SINT32",
+      GL_RED,
       GL_INT,
-      16, 16, 0, 0,
+      32, 0, 0, 0,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
    {
-      MESA_FORMAT_RGB_SINT16,
-      "MESA_FORMAT_RGB_SINT16",
-      GL_RGB,
-      GL_INT,
-      16, 16, 16, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 6
-   },
-   {
-      MESA_FORMAT_RGBA_SINT16,
-      "MESA_FORMAT_RGBA_SINT16",
-      GL_RGBA,
-      GL_INT,
-      16, 16, 16, 16,
+      MESA_FORMAT_RG_UINT8,
+      "MESA_FORMAT_RG_UINT8",
+      GL_RG,
+      GL_UNSIGNED_INT,
+      8, 8, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 8
+      1, 1, 2
    },
    {
-      MESA_FORMAT_R_SINT32,
-      "MESA_FORMAT_R_SINT32",
-      GL_RED,
-      GL_INT,
-      32, 0, 0, 0,
+      MESA_FORMAT_RG_UINT16,
+      "MESA_FORMAT_RG_UINT16",
+      GL_RG,
+      GL_UNSIGNED_INT,
+      16, 16, 0, 0,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
    {
-      MESA_FORMAT_RG_SINT32,
-      "MESA_FORMAT_RG_SINT32",
+      MESA_FORMAT_RG_UINT32,
+      "MESA_FORMAT_RG_UINT32",
       GL_RG,
-      GL_INT,
+      GL_UNSIGNED_INT,
       32, 32, 0, 0,
       0, 0, 0, 0, 0,
       1, 1, 8
    },
    {
-      MESA_FORMAT_RGB_SINT32,
-      "MESA_FORMAT_RGB_SINT32",
-      GL_RGB,
+      MESA_FORMAT_RG_SINT8,
+      "MESA_FORMAT_RG_SINT8",
+      GL_RG,
       GL_INT,
-      32, 32, 32, 0,
+      8, 8, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 12
+      1, 1, 2
    },
    {
-      MESA_FORMAT_RGBA_SINT32,
-      "MESA_FORMAT_RGBA_SINT32",
-      GL_RGBA,
+      MESA_FORMAT_RG_SINT16,
+      "MESA_FORMAT_RG_SINT16",
+      GL_RG,
       GL_INT,
-      32, 32, 32, 32,
-      0, 0, 0, 0, 0,
-      1, 1, 16
-   },
-   {
-      MESA_FORMAT_R_UINT8,
-      "MESA_FORMAT_R_UINT8",
-      GL_RED,
-      GL_UNSIGNED_INT,
-      8, 0, 0, 0,
+      16, 16, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 1
+      1, 1, 4
    },
    {
-      MESA_FORMAT_RG_UINT8,
-      "MESA_FORMAT_RG_UINT8",
+      MESA_FORMAT_RG_SINT32,
+      "MESA_FORMAT_RG_SINT32",
       GL_RG,
-      GL_UNSIGNED_INT,
-      8, 8, 0, 0,
+      GL_INT,
+      32, 32, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 2
+      1, 1, 8
    },
    {
       MESA_FORMAT_RGB_UINT8,
@@ -1138,77 +1388,68 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 3
    },
    {
-      MESA_FORMAT_RGBA_UINT8,
-      "MESA_FORMAT_RGBA_UINT8",
-      GL_RGBA,
+      MESA_FORMAT_RGB_UINT16,
+      "MESA_FORMAT_RGB_UINT16",
+      GL_RGB,
       GL_UNSIGNED_INT,
-      8, 8, 8, 8,
+      16, 16, 16, 0,
       0, 0, 0, 0, 0,
-      1, 1, 4
+      1, 1, 6
    },
    {
-      MESA_FORMAT_R_UINT16,
-      "MESA_FORMAT_R_UINT16",
-      GL_RED,
+      MESA_FORMAT_RGB_UINT32,
+      "MESA_FORMAT_RGB_UINT32",
+      GL_RGB,
       GL_UNSIGNED_INT,
-      16, 0, 0, 0,
+      32, 32, 32, 0,
       0, 0, 0, 0, 0,
-      1, 1, 2
+      1, 1, 12
    },
    {
-      MESA_FORMAT_RG_UINT16,
-      "MESA_FORMAT_RG_UINT16",
-      GL_RG,
-      GL_UNSIGNED_INT,
-      16, 16, 0, 0,
+      MESA_FORMAT_RGB_SINT8,
+      "MESA_FORMAT_RGB_SINT8",
+      GL_RGB,
+      GL_INT,
+      8, 8, 8, 0,
       0, 0, 0, 0, 0,
-      1, 1, 4
+      1, 1, 3
    },
    {
-      MESA_FORMAT_RGB_UINT16,
-      "MESA_FORMAT_RGB_UINT16",
+      MESA_FORMAT_RGB_SINT16,
+      "MESA_FORMAT_RGB_SINT16",
       GL_RGB,
-      GL_UNSIGNED_INT,
+      GL_INT,
       16, 16, 16, 0,
       0, 0, 0, 0, 0,
       1, 1, 6
    },
    {
-      MESA_FORMAT_RGBA_UINT16,
-      "MESA_FORMAT_RGBA_UINT16",
-      GL_RGBA,
-      GL_UNSIGNED_INT,
-      16, 16, 16, 16,
+      MESA_FORMAT_RGB_SINT32,
+      "MESA_FORMAT_RGB_SINT32",
+      GL_RGB,
+      GL_INT,
+      32, 32, 32, 0,
       0, 0, 0, 0, 0,
-      1, 1, 8
+      1, 1, 12
    },
    {
-      MESA_FORMAT_R_UINT32,
-      "MESA_FORMAT_R_UINT32",
-      GL_RED,
+      MESA_FORMAT_RGBA_UINT8,
+      "MESA_FORMAT_RGBA_UINT8",
+      GL_RGBA,
       GL_UNSIGNED_INT,
-      32, 0, 0, 0,
+      8, 8, 8, 8,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
    {
-      MESA_FORMAT_RG_UINT32,
-      "MESA_FORMAT_RG_UINT32",
-      GL_RG,
+      MESA_FORMAT_RGBA_UINT16,
+      "MESA_FORMAT_RGBA_UINT16",
+      GL_RGBA,
       GL_UNSIGNED_INT,
-      32, 32, 0, 0,
+      16, 16, 16, 16,
       0, 0, 0, 0, 0,
       1, 1, 8
    },
-   {
-      MESA_FORMAT_RGB_UINT32,
-      "MESA_FORMAT_RGB_UINT32",
-      GL_RGB,
-      GL_UNSIGNED_INT,
-      32, 32, 32, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 12
-   },
    {
       MESA_FORMAT_RGBA_UINT32,
       "MESA_FORMAT_RGBA_UINT32",
@@ -1218,595 +1459,359 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       0, 0, 0, 0, 0,
       1, 1, 16
    },
-
-
    {
-      MESA_FORMAT_DUDV8,
-      "MESA_FORMAT_DUDV8",
-      GL_DUDV_ATI,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 0,
+      MESA_FORMAT_RGBA_SINT8,
+      "MESA_FORMAT_RGBA_SINT8",
+      GL_RGBA,
+      GL_INT,
+      8, 8, 8, 8,
       0, 0, 0, 0, 0,
-      1, 1, 2
+      1, 1, 4
    },
-
-   /* Signed 8 bits / channel */
    {
-      MESA_FORMAT_R_SNORM8,        /* Name */
-      "MESA_FORMAT_R_SNORM8",      /* StrName */
-      GL_RED,                       /* BaseFormat */
-      GL_SIGNED_NORMALIZED,         /* DataType */
-      8, 0, 0, 0,                   /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 0, 0,                /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 1                       /* BlockWidth/Height,Bytes */
+      MESA_FORMAT_RGBA_SINT16,
+      "MESA_FORMAT_RGBA_SINT16",
+      GL_RGBA,
+      GL_INT,
+      16, 16, 16, 16,
+      0, 0, 0, 0, 0,
+      1, 1, 8
    },
    {
-      MESA_FORMAT_R8G8_SNORM,
-      "MESA_FORMAT_R8G8_SNORM",
-      GL_RG,
-      GL_SIGNED_NORMALIZED,
-      8, 8, 0, 0,
+      MESA_FORMAT_RGBA_SINT32,
+      "MESA_FORMAT_RGBA_SINT32",
+      GL_RGBA,
+      GL_INT,
+      32, 32, 32, 32,
       0, 0, 0, 0, 0,
-      1, 1, 2
+      1, 1, 16
    },
    {
-      MESA_FORMAT_X8B8G8R8_SNORM,
-      "MESA_FORMAT_X8B8G8R8_SNORM",
+      MESA_FORMAT_RGBX_UINT8,
+      "MESA_FORMAT_RGBX_UINT8",
       GL_RGB,
-      GL_SIGNED_NORMALIZED,
+      GL_UNSIGNED_INT,
       8, 8, 8, 0,
       0, 0, 0, 0, 0,
-      1, 1, 4                       /* 4 bpp, but no alpha */
+      1, 1, 4
    },
    {
-      MESA_FORMAT_A8B8G8R8_SNORM,
-      "MESA_FORMAT_A8B8G8R8_SNORM",
-      GL_RGBA,
-      GL_SIGNED_NORMALIZED,
-      8, 8, 8, 8,
+      MESA_FORMAT_RGBX_UINT16,
+      "MESA_FORMAT_RGBX_UINT16",
+      GL_RGB,
+      GL_UNSIGNED_INT,
+      16, 16, 16, 0,
       0, 0, 0, 0, 0,
-      1, 1, 4
+      1, 1, 8
    },
    {
-      MESA_FORMAT_R8G8B8A8_SNORM,
-      "MESA_FORMAT_R8G8B8A8_SNORM",
-      GL_RGBA,
-      GL_SIGNED_NORMALIZED,
-      8, 8, 8, 8,
+      MESA_FORMAT_RGBX_UINT32,
+      "MESA_FORMAT_RGBX_UINT32",
+      GL_RGB,
+      GL_UNSIGNED_INT,
+      32, 32, 32, 0,
       0, 0, 0, 0, 0,
-      1, 1, 4
+      1, 1, 16
    },
-
-   /* Signed 16 bits / channel */
    {
-      MESA_FORMAT_R_SNORM16,
-      "MESA_FORMAT_R_SNORM16",
-      GL_RED,
-      GL_SIGNED_NORMALIZED,
-      16, 0, 0, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 2
-   },
-   {
-      MESA_FORMAT_R16G16_SNORM,
-      "MESA_FORMAT_R16G16_SNORM",
-      GL_RG,
-      GL_SIGNED_NORMALIZED,
-      16, 16, 0, 0,
+      MESA_FORMAT_RGBX_SINT8,
+      "MESA_FORMAT_RGBX_SINT8",
+      GL_RGB,
+      GL_INT,
+      8, 8, 8, 0,
       0, 0, 0, 0, 0,
       1, 1, 4
    },
    {
-      MESA_FORMAT_RGB_SNORM16,
-      "MESA_FORMAT_RGB_SNORM16",
+      MESA_FORMAT_RGBX_SINT16,
+      "MESA_FORMAT_RGBX_SINT16",
       GL_RGB,
-      GL_SIGNED_NORMALIZED,
+      GL_INT,
       16, 16, 16, 0,
       0, 0, 0, 0, 0,
-      1, 1, 6
-   },
-   {
-      MESA_FORMAT_RGBA_SNORM16,
-      "MESA_FORMAT_RGBA_SNORM16",
-      GL_RGBA,
-      GL_SIGNED_NORMALIZED,
-      16, 16, 16, 16,
-      0, 0, 0, 0, 0,
       1, 1, 8
    },
    {
-      MESA_FORMAT_RGBA_UNORM16,
-      "MESA_FORMAT_RGBA_UNORM16",
-      GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,
-      16, 16, 16, 16,
-      0, 0, 0, 0, 0,
-      1, 1, 8
-   },
-   {
-     MESA_FORMAT_R_RGTC1_UNORM,
-     "MESA_FORMAT_R_RGTC1_UNORM",
-     GL_RED,
-     GL_UNSIGNED_NORMALIZED,
-     8, 0, 0, 0,
-     0, 0, 0, 0, 0,
-     4, 4, 8                     /* 8 bytes per 4x4 block */
-   },
-   {
-     MESA_FORMAT_R_RGTC1_SNORM,
-     "MESA_FORMAT_R_RGTC1_SNORM",
-     GL_RED,
-     GL_SIGNED_NORMALIZED,
-     8, 0, 0, 0,
-     0, 0, 0, 0, 0,
-     4, 4, 8                     /* 8 bytes per 4x4 block */
-   },
-   {
-     MESA_FORMAT_RG_RGTC2_UNORM,
-     "MESA_FORMAT_RG_RGTC2_UNORM",
-     GL_RG,
-     GL_UNSIGNED_NORMALIZED,
-     8, 8, 0, 0,
-     0, 0, 0, 0, 0,
-     4, 4, 16                     /* 16 bytes per 4x4 block */
-   },
-   {
-     MESA_FORMAT_RG_RGTC2_SNORM,
-     "MESA_FORMAT_RG_RGTC2_SNORM",
-     GL_RG,
-     GL_SIGNED_NORMALIZED,
-     8, 8, 0, 0,
-     0, 0, 0, 0, 0,
-     4, 4, 16                     /* 16 bytes per 4x4 block */
-   },
-   {
-     MESA_FORMAT_L_LATC1_UNORM,
-     "MESA_FORMAT_L_LATC1_UNORM",
-     GL_LUMINANCE,
-     GL_UNSIGNED_NORMALIZED,
-     0, 0, 0, 0,
-     4, 0, 0, 0, 0,
-     4, 4, 8                     /* 8 bytes per 4x4 block */
-   },
-   {
-     MESA_FORMAT_L_LATC1_SNORM,
-     "MESA_FORMAT_L_LATC1_SNORM",
-     GL_LUMINANCE,
-     GL_SIGNED_NORMALIZED,
-     0, 0, 0, 0,
-     4, 0, 0, 0, 0,
-     4, 4, 8                     /* 8 bytes per 4x4 block */
-   },
-   {
-     MESA_FORMAT_LA_LATC2_UNORM,
-     "MESA_FORMAT_LA_LATC2_UNORM",
-     GL_LUMINANCE_ALPHA,
-     GL_UNSIGNED_NORMALIZED,
-     0, 0, 0, 4,
-     4, 0, 0, 0, 0,
-     4, 4, 16                     /* 16 bytes per 4x4 block */
-   },
-   {
-     MESA_FORMAT_LA_LATC2_SNORM,
-     "MESA_FORMAT_LA_LATC2_SNORM",
-     GL_LUMINANCE_ALPHA,
-     GL_SIGNED_NORMALIZED,
-     0, 0, 0, 4,
-     4, 0, 0, 0, 0,
-     4, 4, 16                     /* 16 bytes per 4x4 block */
-   },
-
-   {
-      MESA_FORMAT_ETC1_RGB8,
-      "MESA_FORMAT_ETC1_RGB8",
+      MESA_FORMAT_RGBX_SINT32,
+      "MESA_FORMAT_RGBX_SINT32",
       GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 0,
+      GL_INT,
+      32, 32, 32, 0,
       0, 0, 0, 0, 0,
-      4, 4, 8                     /* 8 bytes per 4x4 block */
+      1, 1, 16
    },
 
+   /* DXT compressed formats */
    {
-      MESA_FORMAT_ETC2_RGB8,
-      "MESA_FORMAT_ETC2_RGB8",
-      GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 0,
-      0, 0, 0, 0, 0,
-      4, 4, 8                     /* 8 bytes per 4x4 block */
+      MESA_FORMAT_RGB_DXT1,        /* Name */
+      "MESA_FORMAT_RGB_DXT1",      /* StrName */
+      GL_RGB,                      /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,      /* DataType */
+      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
+      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
+      4, 4, 8                      /* 8 bytes per 4x4 block */
    },
-
    {
-      MESA_FORMAT_ETC2_SRGB8,
-      "MESA_FORMAT_ETC2_SRGB8",
-      GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 0,
+      MESA_FORMAT_RGBA_DXT1,
+      "MESA_FORMAT_RGBA_DXT1",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,    
+      4, 4, 4, 4,
       0, 0, 0, 0, 0,
-      4, 4, 8                     /* 8 bytes per 4x4 block */
+      4, 4, 8                      /* 8 bytes per 4x4 block */
    },
-
    {
-      MESA_FORMAT_ETC2_RGBA8_EAC,
-      "MESA_FORMAT_ETC2_RGBA8_EAC",
+      MESA_FORMAT_RGBA_DXT3,
+      "MESA_FORMAT_RGBA_DXT3",
       GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 8,
+      GL_UNSIGNED_NORMALIZED,    
+      4, 4, 4, 4,
       0, 0, 0, 0, 0,
-      4, 4, 16                    /* 16 bytes per 4x4 block */
+      4, 4, 16                     /* 16 bytes per 4x4 block */
    },
-
    {
-      MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC,
-      "MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC",
+      MESA_FORMAT_RGBA_DXT5,
+      "MESA_FORMAT_RGBA_DXT5",
       GL_RGBA,
-      GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 8,
+      GL_UNSIGNED_NORMALIZED,    
+      4, 4, 4, 4,
       0, 0, 0, 0, 0,
-      4, 4, 16                    /* 16 bytes per 4x4 block */
+      4, 4, 16                     /* 16 bytes per 4x4 block */
    },
 
+   /* DXT sRGB compressed formats */
    {
-      MESA_FORMAT_ETC2_R11_EAC,
-      "MESA_FORMAT_ETC2_R11_EAC",
-      GL_RED,
-      GL_UNSIGNED_NORMALIZED,
-      11, 0, 0, 0,
-      0, 0, 0, 0, 0,
-      4, 4, 8                    /* 8 bytes per 4x4 block */
+      MESA_FORMAT_SRGB_DXT1,       /* Name */
+      "MESA_FORMAT_SRGB_DXT1",     /* StrName */
+      GL_RGB,                      /* BaseFormat */
+      GL_UNSIGNED_NORMALIZED,      /* DataType */
+      4, 4, 4, 0,                  /* approx Red/Green/Blue/AlphaBits */
+      0, 0, 0, 0, 0,               /* Lum/Int/Index/Depth/StencilBits */
+      4, 4, 8                      /* 8 bytes per 4x4 block */
    },
-
    {
-      MESA_FORMAT_ETC2_RG11_EAC,
-      "MESA_FORMAT_ETC2_RG11_EAC",
-      GL_RG,
+      MESA_FORMAT_SRGBA_DXT1,
+      "MESA_FORMAT_SRGBA_DXT1",
+      GL_RGBA,
       GL_UNSIGNED_NORMALIZED,
-      11, 11, 0, 0,
-      0, 0, 0, 0, 0,
-      4, 4, 16                    /* 16 bytes per 4x4 block */
-   },
-
-   {
-      MESA_FORMAT_ETC2_SIGNED_R11_EAC,
-      "MESA_FORMAT_ETC2_SIGNED_R11_EAC",
-      GL_RED,
-      GL_SIGNED_NORMALIZED,
-      11, 0, 0, 0,
-      0, 0, 0, 0, 0,
-      4, 4, 8                    /* 8 bytes per 4x4 block */
-   },
-
-   {
-      MESA_FORMAT_ETC2_SIGNED_RG11_EAC,
-      "MESA_FORMAT_ETC2_SIGNED_RG11_EAC",
-      GL_RG,
-      GL_SIGNED_NORMALIZED,
-      11, 11, 0, 0,
+      4, 4, 4, 4,
       0, 0, 0, 0, 0,
-      4, 4, 16                    /* 16 bytes per 4x4 block */
+      4, 4, 8                      /* 8 bytes per 4x4 block */
    },
-
    {
-      MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1,
-      "MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1",
+      MESA_FORMAT_SRGBA_DXT3,
+      "MESA_FORMAT_SRGBA_DXT3",
       GL_RGBA,
       GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 1,
+      4, 4, 4, 4,
       0, 0, 0, 0, 0,
-      4, 4, 8                     /* 8 bytes per 4x4 block */
+      4, 4, 16                     /* 16 bytes per 4x4 block */
    },
-
    {
-      MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1,
-      "MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1",
+      MESA_FORMAT_SRGBA_DXT5,
+      "MESA_FORMAT_SRGBA_DXT5",
       GL_RGBA,
       GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 1,
+      4, 4, 4, 4,
       0, 0, 0, 0, 0,
-      4, 4, 8                     /* 8 bytes per 4x4 block */
+      4, 4, 16                     /* 16 bytes per 4x4 block */
    },
 
-   /* Signed formats from EXT_texture_snorm that are not in GL3.1 */
-   {
-      MESA_FORMAT_A_SNORM8,
-      "MESA_FORMAT_A_SNORM8",
-      GL_ALPHA,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 8,
-      0, 0, 0, 0, 0,
-      1, 1, 1
-   },
-   {
-      MESA_FORMAT_L_SNORM8,
-      "MESA_FORMAT_L_SNORM8",
-      GL_LUMINANCE,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 0,
-      8, 0, 0, 0, 0,
-      1, 1, 1
-   },
-   {
-      MESA_FORMAT_L8A8_SNORM,
-      "MESA_FORMAT_L8A8_SNORM",
-      GL_LUMINANCE_ALPHA,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 8,
-      8, 0, 0, 0, 0,
-      1, 1, 2
-   },
-   {
-      MESA_FORMAT_I_SNORM8,
-      "MESA_FORMAT_I_SNORM8",
-      GL_INTENSITY,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 0,
-      0, 8, 0, 0, 0,
-      1, 1, 1
-   },
-   {
-      MESA_FORMAT_A_SNORM16,
-      "MESA_FORMAT_A_SNORM16",
-      GL_ALPHA,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 16,
-      0, 0, 0, 0, 0,
-      1, 1, 2
-   },
-   {
-      MESA_FORMAT_L_SNORM16,
-      "MESA_FORMAT_L_SNORM16",
-      GL_LUMINANCE,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 0,
-      16, 0, 0, 0, 0,
-      1, 1, 2
-   },
-   {
-      MESA_FORMAT_LA_SNORM16,
-      "MESA_FORMAT_LA_SNORM16",
-      GL_LUMINANCE_ALPHA,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 16,
-      16, 0, 0, 0, 0,
-      1, 1, 4
-   },
-   {
-      MESA_FORMAT_I_SNORM16,
-      "MESA_FORMAT_I_SNORM16",
-      GL_INTENSITY,
-      GL_SIGNED_NORMALIZED,
-      0, 0, 0, 0,
-      0, 16, 0, 0, 0,
-      1, 1, 2
-   },
+   /* FXT1 compressed formats */
    {
-      MESA_FORMAT_R9G9B9E5_FLOAT,
-      "MESA_FORMAT_RGB9_E5",
-      GL_RGB,
-      GL_FLOAT,
-      9, 9, 9, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
-   },
-   {
-      MESA_FORMAT_R11G11B10_FLOAT,
-      "MESA_FORMAT_R11G11B10_FLOAT",
+      MESA_FORMAT_RGB_FXT1,
+      "MESA_FORMAT_RGB_FXT1",
       GL_RGB,
-      GL_FLOAT,
-      11, 11, 10, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
-   },
-   /* ARB_depth_buffer_float */
-   {
-      MESA_FORMAT_Z_FLOAT32,       /* Name */
-      "MESA_FORMAT_Z_FLOAT32",     /* StrName */
-      GL_DEPTH_COMPONENT,          /* BaseFormat */
-      GL_FLOAT,                    /* DataType */
-      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 32, 0,              /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 4                      /* BlockWidth/Height,Bytes */
-   },
-   {
-      MESA_FORMAT_Z32_FLOAT_S8X24_UINT, /* Name */
-      "MESA_FORMAT_Z32_FLOAT_S8X24_UINT", /* StrName */
-      GL_DEPTH_STENCIL,            /* BaseFormat */
-      /* DataType here is used to answer GL_TEXTURE_DEPTH_TYPE queries, and is
-       * never used for stencil because stencil is always GL_UNSIGNED_INT.
-       */
-      GL_FLOAT,                    /* DataType */
-      0, 0, 0, 0,                  /* Red/Green/Blue/AlphaBits */
-      0, 0, 0, 32, 8,              /* Lum/Int/Index/Depth/StencilBits */
-      1, 1, 8                      /* BlockWidth/Height,Bytes */
-   },
-   {
-      MESA_FORMAT_B10G10R10A2_UINT,
-      "MESA_FORMAT_B10G10R10A2_UINT",
-      GL_RGBA,
-      GL_UNSIGNED_INT,
-      10, 10, 10, 2,
+      GL_UNSIGNED_NORMALIZED,
+      4, 4, 4, 0,                  /* approx Red/Green/BlueBits */
       0, 0, 0, 0, 0,
-      1, 1, 4
+      8, 4, 16                     /* 16 bytes per 8x4 block */
    },
    {
-      MESA_FORMAT_R10G10B10A2_UINT,
-      "MESA_FORMAT_R10G10B10A2_UINT",
+      MESA_FORMAT_RGBA_FXT1,
+      "MESA_FORMAT_RGBA_FXT1",
       GL_RGBA,
-      GL_UNSIGNED_INT,
-      10, 10, 10, 2,
-      0, 0, 0, 0, 0,
-      1, 1, 4
-   },
-   {
-      MESA_FORMAT_B4G4R4X4_UNORM,
-      "MESA_FORMAT_B4G4R4X4_UNORM",
-      GL_RGB,
       GL_UNSIGNED_NORMALIZED,
-      4, 4, 4, 0,
+      4, 4, 4, 1,                  /* approx Red/Green/Blue/AlphaBits */
       0, 0, 0, 0, 0,
-      1, 1, 2
+      8, 4, 16                     /* 16 bytes per 8x4 block */
    },
+
+   /* RGTC compressed formats */
    {
-      MESA_FORMAT_B5G5R5X1_UNORM,
-      "MESA_FORMAT_B5G5R5X1_UNORM",
-      GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
-      5, 5, 5, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 2
+     MESA_FORMAT_R_RGTC1_UNORM,
+     "MESA_FORMAT_R_RGTC1_UNORM",
+     GL_RED,
+     GL_UNSIGNED_NORMALIZED,
+     8, 0, 0, 0,
+     0, 0, 0, 0, 0,
+     4, 4, 8                     /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_R8G8B8X8_SNORM,
-      "MESA_FORMAT_R8G8B8X8_SNORM",
-      GL_RGB,
-      GL_SIGNED_NORMALIZED,
-      8, 8, 8, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
+     MESA_FORMAT_R_RGTC1_SNORM,
+     "MESA_FORMAT_R_RGTC1_SNORM",
+     GL_RED,
+     GL_SIGNED_NORMALIZED,
+     8, 0, 0, 0,
+     0, 0, 0, 0, 0,
+     4, 4, 8                     /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_R8G8B8X8_SRGB,
-      "MESA_FORMAT_R8G8B8X8_SRGB",
-      GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
+     MESA_FORMAT_RG_RGTC2_UNORM,
+     "MESA_FORMAT_RG_RGTC2_UNORM",
+     GL_RG,
+     GL_UNSIGNED_NORMALIZED,
+     8, 8, 0, 0,
+     0, 0, 0, 0, 0,
+     4, 4, 16                     /* 16 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_RGBX_UINT8,
-      "MESA_FORMAT_RGBX_UINT8",
-      GL_RGB,
-      GL_UNSIGNED_INT,
-      8, 8, 8, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
+     MESA_FORMAT_RG_RGTC2_SNORM,
+     "MESA_FORMAT_RG_RGTC2_SNORM",
+     GL_RG,
+     GL_SIGNED_NORMALIZED,
+     8, 8, 0, 0,
+     0, 0, 0, 0, 0,
+     4, 4, 16                     /* 16 bytes per 4x4 block */
    },
+
+   /* LATC1/2 compressed formats */
    {
-      MESA_FORMAT_RGBX_SINT8,
-      "MESA_FORMAT_RGBX_SINT8",
-      GL_RGB,
-      GL_INT,
-      8, 8, 8, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
+     MESA_FORMAT_L_LATC1_UNORM,
+     "MESA_FORMAT_L_LATC1_UNORM",
+     GL_LUMINANCE,
+     GL_UNSIGNED_NORMALIZED,
+     0, 0, 0, 0,
+     4, 0, 0, 0, 0,
+     4, 4, 8                     /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_B10G10R10X2_UNORM,
-      "MESA_FORMAT_B10G10R10X2_UNORM",
-      GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
-      10, 10, 10, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 4
+     MESA_FORMAT_L_LATC1_SNORM,
+     "MESA_FORMAT_L_LATC1_SNORM",
+     GL_LUMINANCE,
+     GL_SIGNED_NORMALIZED,
+     0, 0, 0, 0,
+     4, 0, 0, 0, 0,
+     4, 4, 8                     /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_RGBX_UNORM16,
-      "MESA_FORMAT_RGBX_UNORM16",
-      GL_RGB,
-      GL_UNSIGNED_NORMALIZED,
-      16, 16, 16, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 8
+     MESA_FORMAT_LA_LATC2_UNORM,
+     "MESA_FORMAT_LA_LATC2_UNORM",
+     GL_LUMINANCE_ALPHA,
+     GL_UNSIGNED_NORMALIZED,
+     0, 0, 0, 4,
+     4, 0, 0, 0, 0,
+     4, 4, 16                     /* 16 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_RGBX_SNORM16,
-      "MESA_FORMAT_RGBX_SNORM16",
-      GL_RGB,
-      GL_SIGNED_NORMALIZED,
-      16, 16, 16, 0,
-      0, 0, 0, 0, 0,
-      1, 1, 8
+     MESA_FORMAT_LA_LATC2_SNORM,
+     "MESA_FORMAT_LA_LATC2_SNORM",
+     GL_LUMINANCE_ALPHA,
+     GL_SIGNED_NORMALIZED,
+     0, 0, 0, 4,
+     4, 0, 0, 0, 0,
+     4, 4, 16                     /* 16 bytes per 4x4 block */
    },
+
+   /* ETC1/2 compressed formats */
    {
-      MESA_FORMAT_RGBX_FLOAT16,
-      "MESA_FORMAT_RGBX_FLOAT16",
+      MESA_FORMAT_ETC1_RGB8,
+      "MESA_FORMAT_ETC1_RGB8",
       GL_RGB,
-      GL_FLOAT,
-      16, 16, 16, 0,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 0,
       0, 0, 0, 0, 0,
-      1, 1, 8
+      4, 4, 8                     /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_RGBX_UINT16,
-      "MESA_FORMAT_RGBX_UINT16",
+      MESA_FORMAT_ETC2_RGB8,
+      "MESA_FORMAT_ETC2_RGB8",
       GL_RGB,
-      GL_UNSIGNED_INT,
-      16, 16, 16, 0,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 0,
       0, 0, 0, 0, 0,
-      1, 1, 8
+      4, 4, 8                     /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_RGBX_SINT16,
-      "MESA_FORMAT_RGBX_SINT16",
+      MESA_FORMAT_ETC2_SRGB8,
+      "MESA_FORMAT_ETC2_SRGB8",
       GL_RGB,
-      GL_INT,
-      16, 16, 16, 0,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 0,
       0, 0, 0, 0, 0,
-      1, 1, 8
+      4, 4, 8                     /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_RGBX_FLOAT32,
-      "MESA_FORMAT_RGBX_FLOAT32",
-      GL_RGB,
-      GL_FLOAT,
-      32, 32, 32, 0,
+      MESA_FORMAT_ETC2_RGBA8_EAC,
+      "MESA_FORMAT_ETC2_RGBA8_EAC",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 8,
       0, 0, 0, 0, 0,
-      1, 1, 16
+      4, 4, 16                    /* 16 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_RGBX_UINT32,
-      "MESA_FORMAT_RGBX_UINT32",
-      GL_RGB,
-      GL_UNSIGNED_INT,
-      32, 32, 32, 0,
+      MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC,
+      "MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 8,
       0, 0, 0, 0, 0,
-      1, 1, 16
+      4, 4, 16                    /* 16 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_RGBX_SINT32,
-      "MESA_FORMAT_RGBX_SINT32",
-      GL_RGB,
-      GL_INT,
-      32, 32, 32, 0,
+      MESA_FORMAT_ETC2_R11_EAC,
+      "MESA_FORMAT_ETC2_R11_EAC",
+      GL_RED,
+      GL_UNSIGNED_NORMALIZED,
+      11, 0, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 16
+      4, 4, 8                    /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_R10G10B10A2_UNORM,
-      "MESA_FORMAT_R10G10B10A2_UNORM",
-      GL_RGBA,
+      MESA_FORMAT_ETC2_RG11_EAC,
+      "MESA_FORMAT_ETC2_RG11_EAC",
+      GL_RG,
       GL_UNSIGNED_NORMALIZED,
-      10, 10, 10, 2,
+      11, 11, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 4
+      4, 4, 16                    /* 16 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_G8R8_SNORM,
-      "MESA_FORMAT_G8R8_SNORM",
-      GL_RG,
+      MESA_FORMAT_ETC2_SIGNED_R11_EAC,
+      "MESA_FORMAT_ETC2_SIGNED_R11_EAC",
+      GL_RED,
       GL_SIGNED_NORMALIZED,
-      8, 8, 0, 0,
+      11, 0, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 2
+      4, 4, 8                    /* 8 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_G16R16_SNORM,
-      "MESA_FORMAT_G16R16_SNORM",
+      MESA_FORMAT_ETC2_SIGNED_RG11_EAC,
+      "MESA_FORMAT_ETC2_SIGNED_RG11_EAC",
       GL_RG,
       GL_SIGNED_NORMALIZED,
-      16, 16, 0, 0,
+      11, 11, 0, 0,
       0, 0, 0, 0, 0,
-      1, 1, 4
+      4, 4, 16                    /* 16 bytes per 4x4 block */
    },
    {
-      MESA_FORMAT_B8G8R8X8_SRGB,
-      "MESA_FORMAT_B8G8R8X8_SRGB",
-      GL_RGB,
+      MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1,
+      "MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1",
+      GL_RGBA,
       GL_UNSIGNED_NORMALIZED,
-      8, 8, 8, 0,
+      8, 8, 8, 1,
       0, 0, 0, 0, 0,
-      1, 1, 4
+      4, 4, 8                     /* 8 bytes per 4x4 block */
+   },
+   {
+      MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1,
+      "MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1",
+      GL_RGBA,
+      GL_UNSIGNED_NORMALIZED,
+      8, 8, 8, 1,
+      0, 0, 0, 0, 0,
+      4, 4, 8                     /* 8 bytes per 4x4 block */
    },
 };
 
@@ -2030,6 +2035,15 @@ _mesa_is_format_signed(mesa_format format)
    }
 }
 
+/**
+ * Is the given format an integer format?
+ */
+GLboolean
+_mesa_is_format_integer(mesa_format format)
+{
+   const struct gl_format_info *info = _mesa_get_format_info(format);
+   return (info->DataType == GL_INT || info->DataType == GL_UNSIGNED_INT);
+}
 
 /**
  * Return color encoding for given format.
@@ -2201,6 +2215,35 @@ _mesa_format_num_components(mesa_format format)
 }
 
 
+/**
+ * Returns true if a color format has data stored in the R/G/B/A channels,
+ * given an index from 0 to 3.
+ */
+bool
+_mesa_format_has_color_component(mesa_format format, int component)
+{
+   const struct gl_format_info *info = _mesa_get_format_info(format);
+
+   assert(info->BaseFormat != GL_DEPTH_COMPONENT &&
+          info->BaseFormat != GL_DEPTH_STENCIL &&
+          info->BaseFormat != GL_STENCIL_INDEX);
+
+   switch (component) {
+   case 0:
+      return (info->RedBits + info->IntensityBits + info->LuminanceBits) > 0;
+   case 1:
+      return (info->GreenBits + info->IntensityBits + info->LuminanceBits) > 0;
+   case 2:
+      return (info->BlueBits + info->IntensityBits + info->LuminanceBits) > 0;
+   case 3:
+      return (info->AlphaBits + info->IntensityBits) > 0;
+   default:
+      assert(!"Invalid color component: must be 0..3");
+      return false;
+   }
+}
+
+
 /**
  * Return number of bytes needed to store an image of the given size
  * in the given format.
@@ -2513,7 +2556,7 @@ _mesa_format_to_type_and_comps(mesa_format format,
       *comps = 1;
       return;
 
-   case MESA_FORMAT_X8Z24_UNORM:
+   case MESA_FORMAT_X8_UINT_Z24_UNORM:
       *datatype = GL_UNSIGNED_INT;
       *comps = 1;
       return;
@@ -3119,9 +3162,9 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
    case MESA_FORMAT_L_UNORM16:
       return format == GL_LUMINANCE && type == GL_UNSIGNED_SHORT && !swapBytes;
    case MESA_FORMAT_I_UNORM8:
-      return format == GL_INTENSITY && type == GL_UNSIGNED_BYTE;
+      return format == GL_RED && type == GL_UNSIGNED_BYTE;
    case MESA_FORMAT_I_UNORM16:
-      return format == GL_INTENSITY && type == GL_UNSIGNED_SHORT && !swapBytes;
+      return format == GL_RED && type == GL_UNSIGNED_SHORT && !swapBytes;
 
    case MESA_FORMAT_YCBCR:
       return format == GL_YCBCR_MESA &&
@@ -3155,7 +3198,7 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
    case MESA_FORMAT_S8_UINT_Z24_UNORM:
       return format == GL_DEPTH_STENCIL && type == GL_UNSIGNED_INT_24_8 &&
          !swapBytes;
-   case MESA_FORMAT_X8Z24_UNORM:
+   case MESA_FORMAT_X8_UINT_Z24_UNORM:
    case MESA_FORMAT_Z24_UNORM_S8_UINT:
       return GL_FALSE;
 
@@ -3213,9 +3256,9 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
       return format == GL_LUMINANCE_ALPHA && type == GL_HALF_FLOAT && !swapBytes;
 
    case MESA_FORMAT_I_FLOAT32:
-      return format == GL_INTENSITY && type == GL_FLOAT && !swapBytes;
+      return format == GL_RED && type == GL_FLOAT && !swapBytes;
    case MESA_FORMAT_I_FLOAT16:
-      return format == GL_INTENSITY && type == GL_HALF_FLOAT && !swapBytes;
+      return format == GL_RED && type == GL_HALF_FLOAT && !swapBytes;
 
    case MESA_FORMAT_R_FLOAT32:
       return format == GL_RED && type == GL_FLOAT && !swapBytes;
@@ -3243,13 +3286,17 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
       return format == GL_ALPHA_INTEGER && type == GL_INT && !swapBytes;
 
    case MESA_FORMAT_I_UINT8:
+      return format == GL_RED_INTEGER && type == GL_UNSIGNED_BYTE;
    case MESA_FORMAT_I_UINT16:
+      return format == GL_RED_INTEGER && type == GL_UNSIGNED_SHORT && !swapBytes;
    case MESA_FORMAT_I_UINT32:
+      return format == GL_RED_INTEGER && type == GL_UNSIGNED_INT && !swapBytes;
    case MESA_FORMAT_I_SINT8:
+      return format == GL_RED_INTEGER && type == GL_BYTE;
    case MESA_FORMAT_I_SINT16:
+      return format == GL_RED_INTEGER && type == GL_SHORT && !swapBytes;
    case MESA_FORMAT_I_SINT32:
-      /* GL_INTENSITY_INTEGER_EXT doesn't exist. */
-      return GL_FALSE;
+      return format == GL_RED_INTEGER && type == GL_INT && !swapBytes;
 
    case MESA_FORMAT_L_UINT8:
       return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_BYTE;
@@ -3416,7 +3463,7 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
       return format == GL_LUMINANCE_ALPHA && type == GL_BYTE &&
              littleEndian && !swapBytes;
    case MESA_FORMAT_I_SNORM8:
-      return format == GL_INTENSITY && type == GL_BYTE;
+      return format == GL_RED && type == GL_BYTE;
    case MESA_FORMAT_A_SNORM16:
       return format == GL_ALPHA && type == GL_SHORT && !swapBytes;
    case MESA_FORMAT_L_SNORM16:
@@ -3425,7 +3472,7 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
       return format == GL_LUMINANCE_ALPHA && type == GL_SHORT &&
              littleEndian && !swapBytes;
    case MESA_FORMAT_I_SNORM16:
-      return format == GL_INTENSITY && type == GL_SHORT && littleEndian &&
+      return format == GL_RED && type == GL_SHORT && littleEndian &&
              !swapBytes;
 
    case MESA_FORMAT_B10G10R10A2_UINT: