util: Pixel format database.
authorJosé Fonseca <jfonseca@vmware.com>
Sun, 26 Jul 2009 22:50:00 +0000 (23:50 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Sat, 29 Aug 2009 08:21:15 +0000 (09:21 +0100)
There are some inconsistencies in pipe_format, but above all, there
simply aren't enough bits in an enum to conveniently store all
information about a pixel format we need to be able to dynamically
generate pixel packing/unpacking code.

src/gallium/auxiliary/util/Makefile
src/gallium/auxiliary/util/SConscript
src/gallium/auxiliary/util/u_format.c [new file with mode: 0644]
src/gallium/auxiliary/util/u_format.csv [new file with mode: 0644]
src/gallium/auxiliary/util/u_format.h [new file with mode: 0644]
src/gallium/auxiliary/util/u_format_table.c [new file with mode: 0644]
src/gallium/auxiliary/util/u_format_table.py [new file with mode: 0755]

index 6a8eb73e84a34bb61e36163f0f5b718b3d817b8d..003aa05cb9a4768f86302a24f0ac96da4c9c2349 100644 (file)
@@ -10,6 +10,8 @@ C_SOURCES = \
        u_blit.c \
        u_cache.c \
        u_draw_quad.c \
+       u_format.c \
+       u_format_table.c \
        u_gen_mipmap.c \
        u_handle_table.c \
        u_hash_table.c \
index fb142eebca8e42a79b71a2d56fa5f80f1a30b27b..bd1af4e4731b0d16a04e7ba271d6f810c5e2fcef 100644 (file)
@@ -12,6 +12,8 @@ util = env.ConvenienceLibrary(
                'u_debug_stack.c',
                'u_debug_symbol.c',
                'u_draw_quad.c',
+               'u_format.c',
+               'u_format_table.c',
                'u_gen_mipmap.c',
                'u_handle_table.c',
                'u_hash.c',
diff --git a/src/gallium/auxiliary/util/u_format.c b/src/gallium/auxiliary/util/u_format.c
new file mode 100644 (file)
index 0000000..98ea13b
--- /dev/null
@@ -0,0 +1,46 @@
+/**************************************************************************
+ *
+ * Copyright 2009 Vmware, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+
+#include "u_format.h"
+
+
+const struct util_format_description *
+util_format_description(enum pipe_format format)
+{
+   const struct util_format_description *desc = util_format_description_table;
+
+   while(TRUE) {
+      if(desc->format == format)
+         return desc;
+
+      if(desc->format == PIPE_FORMAT_NONE)
+         return NULL;
+
+      ++desc;
+   };
+}
diff --git a/src/gallium/auxiliary/util/u_format.csv b/src/gallium/auxiliary/util/u_format.csv
new file mode 100644 (file)
index 0000000..bf8f6ad
--- /dev/null
@@ -0,0 +1,99 @@
+PIPE_FORMAT_A8R8G8B8_UNORM        , rgba, 1, 1, un8 , un8 , un8 , un8 , zyxw, 
+PIPE_FORMAT_X8R8G8B8_UNORM        , rgba, 1, 1, un8 , un8 , un8 , un8 , zyx1, 
+PIPE_FORMAT_B8G8R8A8_UNORM        , rgba, 1, 1, un8 , un8 , un8 , un8 , xyzw, 
+PIPE_FORMAT_B8G8R8X8_UNORM        , rgba, 1, 1, un8 , un8 , un8 , un8 , xyz1, 
+PIPE_FORMAT_A1R5G5B5_UNORM        , rgba, 1, 1, un5 , un5 , un5 , un1 , wxyz, 
+PIPE_FORMAT_A4R4G4B4_UNORM        , rgba, 1, 1, un4 , un4 , un4 , un4 , wxyz, 
+PIPE_FORMAT_R5G6B5_UNORM          , rgba, 1, 1, un5 , un6 , un5 ,     , zyx1, 
+PIPE_FORMAT_A2B10G10R10_UNORM     , rgba, 1, 1, un10, un10, un10, un2 , wzyx, 
+PIPE_FORMAT_L8_UNORM              , rgba, 1, 1, un8 ,     ,     ,     , xxx1, 
+PIPE_FORMAT_A8_UNORM              , rgba, 1, 1, un8 ,     ,     ,     , 000x, 
+PIPE_FORMAT_I8_UNORM              , rgba, 1, 1, un8 ,     ,     ,     , xxxx, 
+PIPE_FORMAT_A8L8_UNORM            , rgba, 1, 1, un8 , un8 ,     ,     , xxxy, 
+PIPE_FORMAT_L16_UNORM             , rgba, 1, 1, un16,     ,     ,     , xxx1, 
+PIPE_FORMAT_Z16_UNORM             , zs  , 1, 1, un16,     ,     ,     , x0__, 
+PIPE_FORMAT_Z32_UNORM             , zs  , 1, 1, un32,     ,     ,     , x0__, 
+PIPE_FORMAT_Z32_FLOAT             , zs  , 1, 1, f32 ,     ,     ,     , x0__, 
+PIPE_FORMAT_S8Z24_UNORM           , zs  , 1, 1, un8 , un24,     ,     , yx__, 
+PIPE_FORMAT_Z24S8_UNORM           , zs  , 1, 1, un24, un8 ,     ,     , xy__, 
+PIPE_FORMAT_X8Z24_UNORM           , zs  , 1, 1, un8 , un24,     ,     , y0__, 
+PIPE_FORMAT_Z24X8_UNORM           , zs  , 1, 1, un24, un8 ,     ,     , x0__, 
+PIPE_FORMAT_S8_UNORM              , zs  , 1, 1, un8 ,     ,     ,     , 0x__, 
+PIPE_FORMAT_R64_FLOAT             , rgba, 1, 1, f64 ,     ,     ,     , x001, 
+PIPE_FORMAT_R64G64_FLOAT          , rgba, 1, 1, f64 , f64 ,     ,     , xy01, 
+PIPE_FORMAT_R64G64B64_FLOAT       , rgba, 1, 1, f64 , f64 , f64 ,     , xyz1, 
+PIPE_FORMAT_R64G64B64A64_FLOAT    , rgba, 1, 1, f64 , f64 , f64 , f64 , xyzw, 
+PIPE_FORMAT_R32_FLOAT             , rgba, 1, 1, f32 ,     ,     ,     , x001, 
+PIPE_FORMAT_R32G32_FLOAT          , rgba, 1, 1, f32 , f32 ,     ,     , xy01, 
+PIPE_FORMAT_R32G32B32_FLOAT       , rgba, 1, 1, f32 , f32 , f32 ,     , xyz1, 
+PIPE_FORMAT_R32G32B32A32_FLOAT    , rgba, 1, 1, f32 , f32 , f32 , f32 , xyzw, 
+PIPE_FORMAT_R32_UNORM             , rgba, 1, 1, un32,     ,     ,     , x001, 
+PIPE_FORMAT_R32G32_UNORM          , rgba, 1, 1, un32, un32,     ,     , xy01, 
+PIPE_FORMAT_R32G32B32_UNORM       , rgba, 1, 1, un32, un32, un32,     , xyz1, 
+PIPE_FORMAT_R32G32B32A32_UNORM    , rgba, 1, 1, un32, un32, un32, un32, xyzw, 
+PIPE_FORMAT_R32_USCALED           , rgba, 1, 1, u32 ,     ,     ,     , x001, 
+PIPE_FORMAT_R32G32_USCALED        , rgba, 1, 1, u32 , u32 ,     ,     , xy01, 
+PIPE_FORMAT_R32G32B32_USCALED     , rgba, 1, 1, u32 , u32 , u32 ,     , xyz1, 
+PIPE_FORMAT_R32G32B32A32_USCALED  , rgba, 1, 1, u32 , u32 , u32 , u32 , xyzw, 
+PIPE_FORMAT_R32_SNORM             , rgba, 1, 1, sn32,     ,     ,     , x001, 
+PIPE_FORMAT_R32G32_SNORM          , rgba, 1, 1, sn32, sn32,     ,     , xy01, 
+PIPE_FORMAT_R32G32B32_SNORM       , rgba, 1, 1, sn32, sn32, sn32,     , xyz1, 
+PIPE_FORMAT_R32G32B32A32_SNORM    , rgba, 1, 1, sn32, sn32, sn32, sn32, xyzw, 
+PIPE_FORMAT_R32_SSCALED           , rgba, 1, 1, s32 ,     ,     ,     , x001, 
+PIPE_FORMAT_R32G32_SSCALED        , rgba, 1, 1, s32 , s32 ,     ,     , xy01, 
+PIPE_FORMAT_R32G32B32_SSCALED     , rgba, 1, 1, s32 , s32 , s32 ,     , xyz1, 
+PIPE_FORMAT_R32G32B32A32_SSCALED  , rgba, 1, 1, s32 , s32 , s32 , s32 , xyzw, 
+PIPE_FORMAT_R16_UNORM             , rgba, 1, 1, un16,     ,     ,     , x001, 
+PIPE_FORMAT_R16G16_UNORM          , rgba, 1, 1, un16, un16,     ,     , xy01, 
+PIPE_FORMAT_R16G16B16_UNORM       , rgba, 1, 1, un16, un16, un16,     , xyz1, 
+PIPE_FORMAT_R16G16B16A16_UNORM    , rgba, 1, 1, un16, un16, un16, un16, xyzw, 
+PIPE_FORMAT_R16_USCALED           , rgba, 1, 1, u16 ,     ,     ,     , x001, 
+PIPE_FORMAT_R16G16_USCALED        , rgba, 1, 1, u16 , u16 ,     ,     , xy01, 
+PIPE_FORMAT_R16G16B16_USCALED     , rgba, 1, 1, u16 , u16 , u16 ,     , xyz1, 
+PIPE_FORMAT_R16G16B16A16_USCALED  , rgba, 1, 1, u16 , u16 , u16 , u16 , xyzw, 
+PIPE_FORMAT_R16_SNORM             , rgba, 1, 1, sn16,     ,     ,     , x001, 
+PIPE_FORMAT_R16G16_SNORM          , rgba, 1, 1, sn16, sn16,     ,     , xy01, 
+PIPE_FORMAT_R16G16B16_SNORM       , rgba, 1, 1, sn16, sn16, sn16,     , xyz1, 
+PIPE_FORMAT_R16G16B16A16_SNORM    , rgba, 1, 1, sn16, sn16, sn16, sn16, xyzw, 
+PIPE_FORMAT_R16_SSCALED           , rgba, 1, 1, s16 ,     ,     ,     , x001, 
+PIPE_FORMAT_R16G16_SSCALED        , rgba, 1, 1, s16 , s16 ,     ,     , xy01, 
+PIPE_FORMAT_R16G16B16_SSCALED     , rgba, 1, 1, s16 , s16 , s16 ,     , xyz1, 
+PIPE_FORMAT_R16G16B16A16_SSCALED  , rgba, 1, 1, s16 , s16 , s16 , s16 , xyzw, 
+PIPE_FORMAT_R8_UNORM              , rgba, 1, 1, un8 ,     ,     ,     , x001, 
+PIPE_FORMAT_R8G8_UNORM            , rgba, 1, 1, un8 , un8 ,     ,     , xy01, 
+PIPE_FORMAT_R8G8B8_UNORM          , rgba, 1, 1, un8 , un8 , un8 ,     , xyz1, 
+PIPE_FORMAT_R8G8B8A8_UNORM        , rgba, 1, 1, un8 , un8 , un8 , un8 , xyzw, 
+PIPE_FORMAT_R8G8B8X8_UNORM        , rgba, 1, 1, un8 , un8 , un8 , un8 , xyz1, 
+PIPE_FORMAT_R8_USCALED            , rgba, 1, 1, u8  ,     ,     ,     , x001, 
+PIPE_FORMAT_R8G8_USCALED          , rgba, 1, 1, u8  , u8  ,     ,     , xy01, 
+PIPE_FORMAT_R8G8B8_USCALED        , rgba, 1, 1, u8  , u8  , u8  ,     , xyz1, 
+PIPE_FORMAT_R8G8B8A8_USCALED      , rgba, 1, 1, u8  , u8  , u8  , u8  , xyzw, 
+PIPE_FORMAT_R8G8B8X8_USCALED      , rgba, 1, 1, u8  , u8  , u8  , u8  , xyz1, 
+PIPE_FORMAT_R8_SNORM              , rgba, 1, 1, sn8 ,     ,     ,     , x001, 
+PIPE_FORMAT_R8G8_SNORM            , rgba, 1, 1, sn8 , sn8 ,     ,     , xy01, 
+PIPE_FORMAT_R8G8B8_SNORM          , rgba, 1, 1, sn8 , sn8 , sn8 ,     , xyz1, 
+PIPE_FORMAT_R8G8B8A8_SNORM        , rgba, 1, 1, sn8 , sn8 , sn8 , sn8 , xyzw, 
+PIPE_FORMAT_R8G8B8X8_SNORM        , rgba, 1, 1, sn8 , sn8 , sn8 , sn8 , xyz1, 
+PIPE_FORMAT_B6G5R5_SNORM          , rgba, 1, 1, sn5 , sn5 , sn6 ,     , zyx1, 
+PIPE_FORMAT_A8B8G8R8_SNORM        , rgba, 1, 1, sn8 , sn8 , sn8 , sn8 , zyxw, 
+PIPE_FORMAT_X8B8G8R8_SNORM        , rgba, 1, 1, sn8 , sn8 , sn8 , sn8 , zyx1, 
+PIPE_FORMAT_R8_SSCALED            , rgba, 1, 1, s8  ,     ,     ,     , x001, 
+PIPE_FORMAT_R8G8_SSCALED          , rgba, 1, 1, s8  , s8  ,     ,     , xy01, 
+PIPE_FORMAT_R8G8B8_SSCALED        , rgba, 1, 1, s8  , s8  , s8  ,     , xyz1, 
+PIPE_FORMAT_R8G8B8A8_SSCALED      , rgba, 1, 1, s8  , s8  , s8  , s8  , xyzw, 
+PIPE_FORMAT_R8G8B8X8_SSCALED      , rgba, 1, 1, s8  , s8  , s8  , s8  , xyz1, 
+PIPE_FORMAT_R32_FIXED             , rgba, 1, 1, h32 ,     ,     ,     , x001, 
+PIPE_FORMAT_R32G32_FIXED          , rgba, 1, 1, h32 , h32 ,     ,     , xy01, 
+PIPE_FORMAT_R32G32B32_FIXED       , rgba, 1, 1, h32 , h32 , h32 ,     , xyz1, 
+PIPE_FORMAT_R32G32B32A32_FIXED    , rgba, 1, 1, h32 , h32 , h32 , h32 , xyzw, 
+PIPE_FORMAT_L8_SRGB               , rgba, 1, 1, u8  ,     ,     ,     , xxx1, srgb 
+PIPE_FORMAT_A8L8_SRGB             , rgba, 1, 1, u8  , u8  ,     ,     , xxxy, srgb 
+PIPE_FORMAT_R8G8B8_SRGB           , rgba, 1, 1, u8  , u8  , u8  ,     , xyz1, srgb 
+PIPE_FORMAT_R8G8B8A8_SRGB         , rgba, 1, 1, u8  , u8  , u8  , u8  , xyzw, srgb 
+PIPE_FORMAT_R8G8B8X8_SRGB         , rgba, 1, 1, u8  , u8  , u8  , u8  , xyz1, srgb 
+PIPE_FORMAT_A8R8G8B8_SRGB         , rgba, 1, 1, u8  , u8  , u8  , u8  , wxyz, srgb 
+PIPE_FORMAT_X8R8G8B8_SRGB         , rgba, 1, 1, u8  , u8  , u8  , u8  , 1xyz, srgb 
+PIPE_FORMAT_B8G8R8A8_SRGB         , rgba, 1, 1, u8  , u8  , u8  , u8  , zyxw, srgb 
+PIPE_FORMAT_B8G8R8X8_SRGB         , rgba, 1, 1, u8  , u8  , u8  , u8  , zyx1, srgb 
+PIPE_FORMAT_X8UB8UG8SR8S_NORM     , rgba, 1, 1, sn8 , sn8 , un8 , x8  , 1zyx,
+PIPE_FORMAT_B6UG5SR5S_NORM        , rgba, 1, 1, sn5 , sn5 , un6 ,     , xyz1, 
diff --git a/src/gallium/auxiliary/util/u_format.h b/src/gallium/auxiliary/util/u_format.h
new file mode 100644 (file)
index 0000000..2d7730f
--- /dev/null
@@ -0,0 +1,111 @@
+/**************************************************************************
+ *
+ * Copyright 2009 Vmware, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+
+#ifndef U_FORMAT_H
+#define U_FORMAT_H
+
+
+#include "pipe/p_format.h"
+
+
+enum util_format_layout {
+   UTIL_FORMAT_LAYOUT_RGBA = 0,
+   UTIL_FORMAT_LAYOUT_ZS = 1,
+   UTIL_FORMAT_LAYOUT_YUV = 2,
+   UTIL_FORMAT_LAYOUT_DXT = 3
+};
+
+
+struct util_format_block
+{
+   /** Block width in pixels */
+   unsigned width;
+   
+   /** Block height in pixels */
+   unsigned height;
+
+   /** Block size in bytes */
+   unsigned bits;
+};
+
+
+enum util_format_type {
+   UTIL_FORMAT_TYPE_VOID = 0,
+   UTIL_FORMAT_TYPE_UNSIGNED = 1,
+   UTIL_FORMAT_TYPE_SIGNED = 2,
+   UTIL_FORMAT_TYPE_FIXED = 3,
+   UTIL_FORMAT_TYPE_FLOAT = 4
+};
+
+
+enum util_format_swizzle {
+   UTIL_FORMAT_SWIZZLE_X = 0,
+   UTIL_FORMAT_SWIZZLE_Y = 1,
+   UTIL_FORMAT_SWIZZLE_Z = 2,
+   UTIL_FORMAT_SWIZZLE_W = 3,
+   UTIL_FORMAT_SWIZZLE_0 = 4,
+   UTIL_FORMAT_SWIZZLE_1 = 5,
+   UTIL_FORMAT_SWIZZLE_NONE = 6
+};
+
+
+enum util_format_colorspace {
+   UTIL_FORMAT_COLORSPACE_RGB = 0,
+   UTIL_FORMAT_COLORSPACE_SRGB = 1
+};
+
+
+struct util_format_channel_description
+{
+   unsigned type:6;
+   unsigned normalized:1;
+   unsigned size:9;
+};
+
+
+struct util_format_description
+{
+   enum pipe_format format;
+   const char *name;
+   struct util_format_block block;
+   enum util_format_layout layout;
+   struct util_format_channel_description channel[4];
+   unsigned char swizzle[4];
+   enum util_format_colorspace colorspace;
+};
+
+
+extern const struct util_format_description 
+util_format_description_table[];
+
+
+const struct util_format_description *
+util_format_description(enum pipe_format format);
+
+
+#endif /* ! U_FORMAT_H */
diff --git a/src/gallium/auxiliary/util/u_format_table.c b/src/gallium/auxiliary/util/u_format_table.c
new file mode 100644 (file)
index 0000000..84e91b4
--- /dev/null
@@ -0,0 +1,1925 @@
+/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */
+
+/**************************************************************************
+ *
+ * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#include "u_format.h"
+
+const struct util_format_description
+util_format_description_table[] = 
+{
+   {
+      PIPE_FORMAT_A8R8G8B8_UNORM,
+      "PIPE_FORMAT_A8R8G8B8_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Z, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_X8R8G8B8_UNORM,
+      "PIPE_FORMAT_X8R8G8B8_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Z, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_B8G8R8A8_UNORM,
+      "PIPE_FORMAT_B8G8R8A8_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_B8G8R8X8_UNORM,
+      "PIPE_FORMAT_B8G8R8X8_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_A1R5G5B5_UNORM,
+      "PIPE_FORMAT_A1R5G5B5_UNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 5}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 5}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 5}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 1} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_W, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_Y, /* b */
+         UTIL_FORMAT_SWIZZLE_Z /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_A4R4G4B4_UNORM,
+      "PIPE_FORMAT_A4R4G4B4_UNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 4}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 4}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 4}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 4} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_W, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_Y, /* b */
+         UTIL_FORMAT_SWIZZLE_Z /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R5G6B5_UNORM,
+      "PIPE_FORMAT_R5G6B5_UNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 5}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 6}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 5}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Z, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_A2B10G10R10_UNORM,
+      "PIPE_FORMAT_A2B10G10R10_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 10}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 10}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 10}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 2} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_W, /* r */
+         UTIL_FORMAT_SWIZZLE_Z, /* g */
+         UTIL_FORMAT_SWIZZLE_Y, /* b */
+         UTIL_FORMAT_SWIZZLE_X /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_L8_UNORM,
+      "PIPE_FORMAT_L8_UNORM",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_A8_UNORM,
+      "PIPE_FORMAT_A8_UNORM",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_0, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_X /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_I8_UNORM,
+      "PIPE_FORMAT_I8_UNORM",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_X /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_A8L8_UNORM,
+      "PIPE_FORMAT_A8L8_UNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_Y /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_L16_UNORM,
+      "PIPE_FORMAT_L16_UNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_Z16_UNORM,
+      "PIPE_FORMAT_Z16_UNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_ZS,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* z */
+         UTIL_FORMAT_SWIZZLE_0, /* s */
+         UTIL_FORMAT_SWIZZLE_NONE, /* ignored */
+         UTIL_FORMAT_SWIZZLE_NONE /* ignored */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_Z32_UNORM,
+      "PIPE_FORMAT_Z32_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_ZS,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* z */
+         UTIL_FORMAT_SWIZZLE_0, /* s */
+         UTIL_FORMAT_SWIZZLE_NONE, /* ignored */
+         UTIL_FORMAT_SWIZZLE_NONE /* ignored */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_Z32_FLOAT,
+      "PIPE_FORMAT_Z32_FLOAT",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_ZS,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* z */
+         UTIL_FORMAT_SWIZZLE_0, /* s */
+         UTIL_FORMAT_SWIZZLE_NONE, /* ignored */
+         UTIL_FORMAT_SWIZZLE_NONE /* ignored */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_S8Z24_UNORM,
+      "PIPE_FORMAT_S8Z24_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_ZS,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 24}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Y, /* z */
+         UTIL_FORMAT_SWIZZLE_X, /* s */
+         UTIL_FORMAT_SWIZZLE_NONE, /* ignored */
+         UTIL_FORMAT_SWIZZLE_NONE /* ignored */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_Z24S8_UNORM,
+      "PIPE_FORMAT_Z24S8_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_ZS,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 24}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* z */
+         UTIL_FORMAT_SWIZZLE_Y, /* s */
+         UTIL_FORMAT_SWIZZLE_NONE, /* ignored */
+         UTIL_FORMAT_SWIZZLE_NONE /* ignored */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_X8Z24_UNORM,
+      "PIPE_FORMAT_X8Z24_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_ZS,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 24}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Y, /* z */
+         UTIL_FORMAT_SWIZZLE_0, /* s */
+         UTIL_FORMAT_SWIZZLE_NONE, /* ignored */
+         UTIL_FORMAT_SWIZZLE_NONE /* ignored */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_Z24X8_UNORM,
+      "PIPE_FORMAT_Z24X8_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_ZS,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 24}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* z */
+         UTIL_FORMAT_SWIZZLE_0, /* s */
+         UTIL_FORMAT_SWIZZLE_NONE, /* ignored */
+         UTIL_FORMAT_SWIZZLE_NONE /* ignored */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_S8_UNORM,
+      "PIPE_FORMAT_S8_UNORM",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_ZS,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_0, /* z */
+         UTIL_FORMAT_SWIZZLE_X, /* s */
+         UTIL_FORMAT_SWIZZLE_NONE, /* ignored */
+         UTIL_FORMAT_SWIZZLE_NONE /* ignored */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R64_FLOAT,
+      "PIPE_FORMAT_R64_FLOAT",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R64G64_FLOAT,
+      "PIPE_FORMAT_R64G64_FLOAT",
+      {1, 1, 128}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* x */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R64G64B64_FLOAT,
+      "PIPE_FORMAT_R64G64B64_FLOAT",
+      {1, 1, 192}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* x */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* y */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R64G64B64A64_FLOAT,
+      "PIPE_FORMAT_R64G64B64A64_FLOAT",
+      {1, 1, 256}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* x */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* y */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64}, /* z */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 64} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32_FLOAT,
+      "PIPE_FORMAT_R32_FLOAT",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32_FLOAT,
+      "PIPE_FORMAT_R32G32_FLOAT",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32_FLOAT,
+      "PIPE_FORMAT_R32G32B32_FLOAT",
+      {1, 1, 96}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32A32_FLOAT,
+      "PIPE_FORMAT_R32G32B32A32_FLOAT",
+      {1, 1, 128}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_FLOAT, FALSE, 32} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32_UNORM,
+      "PIPE_FORMAT_R32_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32_UNORM,
+      "PIPE_FORMAT_R32G32_UNORM",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32_UNORM,
+      "PIPE_FORMAT_R32G32B32_UNORM",
+      {1, 1, 96}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32A32_UNORM,
+      "PIPE_FORMAT_R32G32B32A32_UNORM",
+      {1, 1, 128}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 32} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32_USCALED,
+      "PIPE_FORMAT_R32_USCALED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32_USCALED,
+      "PIPE_FORMAT_R32G32_USCALED",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32_USCALED,
+      "PIPE_FORMAT_R32G32B32_USCALED",
+      {1, 1, 96}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32A32_USCALED,
+      "PIPE_FORMAT_R32G32B32A32_USCALED",
+      {1, 1, 128}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 32} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32_SNORM,
+      "PIPE_FORMAT_R32_SNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32_SNORM,
+      "PIPE_FORMAT_R32G32_SNORM",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32_SNORM,
+      "PIPE_FORMAT_R32G32B32_SNORM",
+      {1, 1, 96}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32A32_SNORM,
+      "PIPE_FORMAT_R32G32B32A32_SNORM",
+      {1, 1, 128}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 32} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32_SSCALED,
+      "PIPE_FORMAT_R32_SSCALED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32_SSCALED,
+      "PIPE_FORMAT_R32G32_SSCALED",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32_SSCALED,
+      "PIPE_FORMAT_R32G32B32_SSCALED",
+      {1, 1, 96}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32A32_SSCALED,
+      "PIPE_FORMAT_R32G32B32A32_SSCALED",
+      {1, 1, 128}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 32} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16_UNORM,
+      "PIPE_FORMAT_R16_UNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16_UNORM,
+      "PIPE_FORMAT_R16G16_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16B16_UNORM,
+      "PIPE_FORMAT_R16G16B16_UNORM",
+      {1, 1, 48}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16B16A16_UNORM,
+      "PIPE_FORMAT_R16G16B16A16_UNORM",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 16} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16_USCALED,
+      "PIPE_FORMAT_R16_USCALED",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16_USCALED,
+      "PIPE_FORMAT_R16G16_USCALED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16B16_USCALED,
+      "PIPE_FORMAT_R16G16B16_USCALED",
+      {1, 1, 48}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16B16A16_USCALED,
+      "PIPE_FORMAT_R16G16B16A16_USCALED",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 16} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16_SNORM,
+      "PIPE_FORMAT_R16_SNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16_SNORM,
+      "PIPE_FORMAT_R16G16_SNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16B16_SNORM,
+      "PIPE_FORMAT_R16G16B16_SNORM",
+      {1, 1, 48}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16B16A16_SNORM,
+      "PIPE_FORMAT_R16G16B16A16_SNORM",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 16} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16_SSCALED,
+      "PIPE_FORMAT_R16_SSCALED",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16_SSCALED,
+      "PIPE_FORMAT_R16G16_SSCALED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16B16_SSCALED,
+      "PIPE_FORMAT_R16G16B16_SSCALED",
+      {1, 1, 48}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R16G16B16A16_SSCALED,
+      "PIPE_FORMAT_R16G16B16A16_SSCALED",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 16} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8_UNORM,
+      "PIPE_FORMAT_R8_UNORM",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8_UNORM,
+      "PIPE_FORMAT_R8G8_UNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8_UNORM,
+      "PIPE_FORMAT_R8G8B8_UNORM",
+      {1, 1, 24}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8A8_UNORM,
+      "PIPE_FORMAT_R8G8B8A8_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8X8_UNORM,
+      "PIPE_FORMAT_R8G8B8X8_UNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8_USCALED,
+      "PIPE_FORMAT_R8_USCALED",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8_USCALED,
+      "PIPE_FORMAT_R8G8_USCALED",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8_USCALED,
+      "PIPE_FORMAT_R8G8B8_USCALED",
+      {1, 1, 24}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8A8_USCALED,
+      "PIPE_FORMAT_R8G8B8A8_USCALED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8X8_USCALED,
+      "PIPE_FORMAT_R8G8B8X8_USCALED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8_SNORM,
+      "PIPE_FORMAT_R8_SNORM",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8_SNORM,
+      "PIPE_FORMAT_R8G8_SNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8_SNORM,
+      "PIPE_FORMAT_R8G8B8_SNORM",
+      {1, 1, 24}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8A8_SNORM,
+      "PIPE_FORMAT_R8G8B8A8_SNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8X8_SNORM,
+      "PIPE_FORMAT_R8G8B8X8_SNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_B6G5R5_SNORM,
+      "PIPE_FORMAT_B6G5R5_SNORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 5}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 5}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 6}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Z, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_A8B8G8R8_SNORM,
+      "PIPE_FORMAT_A8B8G8R8_SNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Z, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_X8B8G8R8_SNORM,
+      "PIPE_FORMAT_X8B8G8R8_SNORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Z, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8_SSCALED,
+      "PIPE_FORMAT_R8_SSCALED",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8_SSCALED,
+      "PIPE_FORMAT_R8G8_SSCALED",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8_SSCALED,
+      "PIPE_FORMAT_R8G8B8_SSCALED",
+      {1, 1, 24}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8A8_SSCALED,
+      "PIPE_FORMAT_R8G8B8A8_SSCALED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8X8_SSCALED,
+      "PIPE_FORMAT_R8G8B8X8_SSCALED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_SIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32_FIXED,
+      "PIPE_FORMAT_R32_FIXED",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_0, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32_FIXED,
+      "PIPE_FORMAT_R32G32_FIXED",
+      {1, 1, 64}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_0, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32_FIXED,
+      "PIPE_FORMAT_R32G32B32_FIXED",
+      {1, 1, 96}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R32G32B32A32_FIXED,
+      "PIPE_FORMAT_R32G32B32A32_FIXED",
+      {1, 1, 128}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* x */
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* y */
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32}, /* z */
+         {UTIL_FORMAT_TYPE_FIXED, FALSE, 32} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_L8_SRGB,
+      "PIPE_FORMAT_L8_SRGB",
+      {1, 1, 8}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_A8L8_SRGB,
+      "PIPE_FORMAT_A8L8_SRGB",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_Y /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8_SRGB,
+      "PIPE_FORMAT_R8G8B8_SRGB",
+      {1, 1, 24}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8A8_SRGB,
+      "PIPE_FORMAT_R8G8B8A8_SRGB",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_R8G8B8X8_SRGB,
+      "PIPE_FORMAT_R8G8B8X8_SRGB",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_A8R8G8B8_SRGB,
+      "PIPE_FORMAT_A8R8G8B8_SRGB",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_W, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_Y, /* b */
+         UTIL_FORMAT_SWIZZLE_Z /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_X8R8G8B8_SRGB,
+      "PIPE_FORMAT_X8R8G8B8_SRGB",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_1, /* r */
+         UTIL_FORMAT_SWIZZLE_X, /* g */
+         UTIL_FORMAT_SWIZZLE_Y, /* b */
+         UTIL_FORMAT_SWIZZLE_Z /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_B8G8R8A8_SRGB,
+      "PIPE_FORMAT_B8G8R8A8_SRGB",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Z, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_W /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_B8G8R8X8_SRGB,
+      "PIPE_FORMAT_B8G8R8X8_SRGB",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_UNSIGNED, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_Z, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_X, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_X8UB8UG8SR8S_NORM,
+      "PIPE_FORMAT_X8UB8UG8SR8S_NORM",
+      {1, 1, 32}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 8}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 8}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 8} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_1, /* r */
+         UTIL_FORMAT_SWIZZLE_Z, /* g */
+         UTIL_FORMAT_SWIZZLE_Y, /* b */
+         UTIL_FORMAT_SWIZZLE_X /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_B6UG5SR5S_NORM,
+      "PIPE_FORMAT_B6UG5SR5S_NORM",
+      {1, 1, 16}, /* block */
+      UTIL_FORMAT_LAYOUT_RGBA,
+      {
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 5}, /* x */
+         {UTIL_FORMAT_TYPE_SIGNED, TRUE, 5}, /* y */
+         {UTIL_FORMAT_TYPE_UNSIGNED, TRUE, 6}, /* z */
+         {UTIL_FORMAT_TYPE_VOID, FALSE, 0} /* w */
+      },
+      {
+         UTIL_FORMAT_SWIZZLE_X, /* r */
+         UTIL_FORMAT_SWIZZLE_Y, /* g */
+         UTIL_FORMAT_SWIZZLE_Z, /* b */
+         UTIL_FORMAT_SWIZZLE_1 /* a */
+      },
+      UTIL_FORMAT_COLORSPACE_RGB,
+   },
+   {
+      PIPE_FORMAT_NONE,
+      "PIPE_FORMAT_NONE",
+      {0, 0, 0},
+      0,
+      {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
+      {0, 0, 0, 0},
+      0
+   },
+};
diff --git a/src/gallium/auxiliary/util/u_format_table.py b/src/gallium/auxiliary/util/u_format_table.py
new file mode 100755 (executable)
index 0000000..e94fbbe
--- /dev/null
@@ -0,0 +1,212 @@
+#!/usr/bin/env python
+
+'''
+/**************************************************************************
+ *
+ * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+'''
+
+
+import sys
+
+
+UNSIGNED, SIGNED, FIXED, FLOAT = 'u', 's', 'h', 'f'
+
+
+class Type:
+    
+    def __init__(self, kind, norm, size):
+        self.kind = kind
+        self.norm = norm
+        self.size = size
+
+    def __str__(self):
+        s = str(self.kind)
+        if norm:
+            s += 'n'
+        s += str(self.size)
+        return s
+
+
+SCALED, NORM, SRGB = 'scaled', 'norm', 'srgb'
+
+
+class Format:
+
+    def __init__(self, name, layout, block_width, block_height, in_types, out_swizzle, colorspace):
+        self.name = name
+        self.layout = layout
+        self.block_width = block_width
+        self.block_height = block_height
+        self.in_types = in_types
+        self.out_swizzle = out_swizzle
+        self.name = name
+        self.colorspace = colorspace
+
+    def __str__(self):
+        return self.name
+
+    def block_size(self):
+        size = 0
+        for type in self.in_types:
+            size += type.size
+        return size
+
+
+def parse(filename):
+    stream = open(filename)
+    formats = []
+    for line in stream:
+        line = line.rstrip()
+        fields = [field.strip() for field in line.split(',')]
+        name = fields[0]
+        layout = fields[1]
+        block_width, block_height = map(int, fields[2:4])
+        in_types = []
+        for field in fields[4:8]:
+            if field:
+                kind = field[0]
+                if field[1] == 'n':
+                    norm = True
+                    size = int(field[2:])
+                else:
+                    norm = False
+                    size = int(field[1:])
+            else:
+                kind = ''
+                norm = False
+                size = 0
+            in_type = Type(kind, norm, size)
+            in_types.append(in_type)
+        out_swizzle = fields[8]
+        colorspace = fields[9]
+        formats.append(Format(name, layout, block_width, block_height, in_types, out_swizzle, colorspace))
+    return formats
+
+
+def layout_map(layout):
+    return 'UTIL_FORMAT_LAYOUT_' + str(layout).upper()
+
+
+layout_channels_map = {
+    'rgba': 'rgba',
+    'zs': 'zs',
+    'yuv': ['y1', 'y2', 'u', 'v'],
+    'dxt': []
+}
+
+
+kind_map = {
+    '': "UTIL_FORMAT_TYPE_VOID",
+    'x': "UTIL_FORMAT_TYPE_VOID",
+    UNSIGNED: "UTIL_FORMAT_TYPE_UNSIGNED",
+    SIGNED: "UTIL_FORMAT_TYPE_SIGNED",
+    FIXED: "UTIL_FORMAT_TYPE_FIXED",
+    FLOAT: "UTIL_FORMAT_TYPE_FLOAT",
+}
+
+
+def bool_map(value):
+    if value:
+        return "TRUE"
+    else:
+        return "FALSE"
+
+
+swizzle_map = {
+    'x': "UTIL_FORMAT_SWIZZLE_X",
+    'y': "UTIL_FORMAT_SWIZZLE_Y",
+    'z': "UTIL_FORMAT_SWIZZLE_Z",
+    'w': "UTIL_FORMAT_SWIZZLE_W",
+    '0': "UTIL_FORMAT_SWIZZLE_0",
+    '1': "UTIL_FORMAT_SWIZZLE_1",
+    '_': "UTIL_FORMAT_SWIZZLE_NONE",
+}
+
+
+def write_format_table(formats):
+    print '/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */'
+    print
+    # This will print the copyright message on the top of this file
+    print __doc__.strip()
+    print
+    print '#include "u_format.h"'
+    print
+    print 'const struct util_format_description'
+    print 'util_format_description_table[] = '
+    print "{"
+    for format in formats:
+        print "   {"
+        print "      %s," % (format.name,)
+        print "      \"%s\"," % (format.name,)
+        print "      {%u, %u, %u}, /* block */" % (format.block_width, format.block_height, format.block_size())
+        print "      %s," % (layout_map(format.layout),)
+        print "      {"
+        for i in range(4):
+            type = format.in_types[i]
+            if i < 3:
+                sep = ","
+            else:
+                sep = ""
+            print "         {%s, %s, %u}%s /* %s */" % (kind_map[type.kind], bool_map(type.norm), type.size, sep, "xyzw"[i])
+        print "      },"
+        print "      {"
+        for i in range(4):
+            swizzle = format.out_swizzle[i]
+            if i < 3:
+                sep = ","
+            else:
+                sep = ""
+            try:
+                comment = layout_channels_map[format.layout][i]
+            except:
+                comment = 'ignored'
+            print "         %s%s /* %s */" % (swizzle_map[swizzle], sep, comment)
+        print "      },"
+        print "      UTIL_FORMAT_COLORSPACE_RGB,"
+        print "   },"
+    print "   {"
+    print "      PIPE_FORMAT_NONE,"
+    print "      \"PIPE_FORMAT_NONE\","
+    print "      {0, 0, 0},"
+    print "      0,"
+    print "      {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},"
+    print "      {0, 0, 0, 0},"
+    print "      0"
+    print "   },"
+    print "};"
+
+
+def main():
+
+    formats = []
+    for arg in sys.argv[1:]:
+        formats.extend(parse(arg))
+    write_format_table(formats)
+
+
+if __name__ == '__main__':
+    main()