diff --git a/include/xgl.h b/include/xgl.h
index 1452433..9520190 100644
--- a/include/xgl.h
+++ b/include/xgl.h
@@ -54,7 +54,7 @@
 #include "xglPlatform.h"
 
 // XGL API version supported by this file
-#define XGL_API_VERSION XGL_MAKE_VERSION(0, 30, 7)
+#define XGL_API_VERSION XGL_MAKE_VERSION(0, 30, 8)
 
 #ifdef __cplusplus
 extern "C"
@@ -800,65 +800,6 @@
 // ------------------------------------------------------------------------------------------------
 // XGL format definitions
 
-typedef enum _XGL_CHANNEL_FORMAT
-{
-    XGL_CH_FMT_UNDEFINED                                    = 0,
-    XGL_CH_FMT_R4G4                                         = 1,
-    XGL_CH_FMT_R4G4B4A4                                     = 2,
-    XGL_CH_FMT_R5G6B5                                       = 3,
-    XGL_CH_FMT_B5G6R5                                       = 4,
-    XGL_CH_FMT_R5G5B5A1                                     = 5,
-    XGL_CH_FMT_R8                                           = 6,
-    XGL_CH_FMT_R8G8                                         = 7,
-    XGL_CH_FMT_R8G8B8A8                                     = 8,
-    XGL_CH_FMT_B8G8R8A8                                     = 9,
-    XGL_CH_FMT_R10G11B11                                    = 10,
-    XGL_CH_FMT_R11G11B10                                    = 11,
-    XGL_CH_FMT_R10G10B10A2                                  = 12,
-    XGL_CH_FMT_R16                                          = 13,
-    XGL_CH_FMT_R16G16                                       = 14,
-    XGL_CH_FMT_R16G16B16A16                                 = 15,
-    XGL_CH_FMT_R32                                          = 16,
-    XGL_CH_FMT_R32G32                                       = 17,
-    XGL_CH_FMT_R32G32B32                                    = 18,
-    XGL_CH_FMT_R32G32B32A32                                 = 19,
-    XGL_CH_FMT_R16G8                                        = 20,
-    XGL_CH_FMT_R32G8                                        = 21,
-    XGL_CH_FMT_R9G9B9E5                                     = 22,
-    XGL_CH_FMT_BC1                                          = 23,
-    XGL_CH_FMT_BC2                                          = 24,
-    XGL_CH_FMT_BC3                                          = 25,
-    XGL_CH_FMT_BC4                                          = 26,
-    XGL_CH_FMT_BC5                                          = 27,
-    XGL_CH_FMT_BC6U                                         = 28,
-    XGL_CH_FMT_BC6S                                         = 29,
-    XGL_CH_FMT_BC7                                          = 30,
-    XGL_CH_FMT_R8G8B8                                       = 31,
-    XGL_CH_FMT_R16G16B16                                    = 32,
-    XGL_CH_FMT_B10G10R10A2                                  = 33,
-    XGL_CH_FMT_R64                                          = 34, // Optional
-    XGL_CH_FMT_R64G64                                       = 35, // Optional
-    XGL_CH_FMT_R64G64B64                                    = 36, // Optional
-    XGL_CH_FMT_R64G64B64A64                                 = 37, // Optional
-    XGL_MAX_CH_FMT                                          = XGL_CH_FMT_R64G64B64A64,
-    XGL_MAX_ENUM(_XGL_CHANNEL_FORMAT)
-} XGL_CHANNEL_FORMAT;
-
-typedef enum _XGL_NUM_FORMAT
-{
-    XGL_NUM_FMT_UNDEFINED                                   = 0,
-    XGL_NUM_FMT_UNORM                                       = 1,
-    XGL_NUM_FMT_SNORM                                       = 2,
-    XGL_NUM_FMT_UINT                                        = 3,
-    XGL_NUM_FMT_SINT                                        = 4,
-    XGL_NUM_FMT_FLOAT                                       = 5,
-    XGL_NUM_FMT_SRGB                                        = 6,
-    XGL_NUM_FMT_DS                                          = 7,
-    XGL_NUM_FMT_USCALED                                     = 8,
-    XGL_NUM_FMT_SSCALED                                     = 9,
-    XGL_MAX_NUM_FMT                                         = XGL_NUM_FMT_SSCALED,
-    XGL_MAX_ENUM(_XGL_NUM_FORMAT)
-} XGL_NUM_FORMAT;
 
 typedef enum _XGL_VERTEX_INPUT_STEP_RATE
 {
@@ -872,14 +813,180 @@
     XGL_MAX_ENUM(_XGL_VERTEX_INPUT_STEP_RATE)
 } XGL_VERTEX_INPUT_STEP_RATE;
 
-typedef struct _XGL_FORMAT
+typedef enum _XGL_FORMAT
 {
-    XGL_CHANNEL_FORMAT  channelFormat;
-    XGL_NUM_FORMAT      numericFormat;
+    XGL_FMT_UNDEFINED                                       = 0x00000000,
+    XGL_FMT_R4G4_UNORM                                      = 0x00000001,
+    XGL_FMT_R4G4_USCALED                                    = 0x00000002,
+    XGL_FMT_R4G4B4A4_UNORM                                  = 0x00000003,
+    XGL_FMT_R4G4B4A4_USCALED                                = 0x00000004,
+    XGL_FMT_R5G6B5_UNORM                                    = 0x00000005,
+    XGL_FMT_R5G6B5_USCALED                                  = 0x00000006,
+    XGL_FMT_R5G5B5A1_UNORM                                  = 0x00000007,
+    XGL_FMT_R5G5B5A1_USCALED                                = 0x00000008,
+    XGL_FMT_R8_UNORM                                        = 0x00000009,
+    XGL_FMT_R8_SNORM                                        = 0x0000000A,
+    XGL_FMT_R8_USCALED                                      = 0x0000000B,
+    XGL_FMT_R8_SSCALED                                      = 0x0000000C,
+    XGL_FMT_R8_UINT                                         = 0x0000000D,
+    XGL_FMT_R8_SINT                                         = 0x0000000E,
+    XGL_FMT_R8_SRGB                                         = 0x0000000F,
+    XGL_FMT_R8G8_UNORM                                      = 0x00000010,
+    XGL_FMT_R8G8_SNORM                                      = 0x00000011,
+    XGL_FMT_R8G8_USCALED                                    = 0x00000012,
+    XGL_FMT_R8G8_SSCALED                                    = 0x00000013,
+    XGL_FMT_R8G8_UINT                                       = 0x00000014,
+    XGL_FMT_R8G8_SINT                                       = 0x00000015,
+    XGL_FMT_R8G8_SRGB                                       = 0x00000016,
+    XGL_FMT_R8G8B8_UNORM                                    = 0x00000017,
+    XGL_FMT_R8G8B8_SNORM                                    = 0x00000018,
+    XGL_FMT_R8G8B8_USCALED                                  = 0x00000019,
+    XGL_FMT_R8G8B8_SSCALED                                  = 0x0000001A,
+    XGL_FMT_R8G8B8_UINT                                     = 0x0000001B,
+    XGL_FMT_R8G8B8_SINT                                     = 0x0000001C,
+    XGL_FMT_R8G8B8_SRGB                                     = 0x0000001D,
+    XGL_FMT_R8G8B8A8_UNORM                                  = 0x0000001E,
+    XGL_FMT_R8G8B8A8_SNORM                                  = 0x0000001F,
+    XGL_FMT_R8G8B8A8_USCALED                                = 0x00000020,
+    XGL_FMT_R8G8B8A8_SSCALED                                = 0x00000021,
+    XGL_FMT_R8G8B8A8_UINT                                   = 0x00000022,
+    XGL_FMT_R8G8B8A8_SINT                                   = 0x00000023,
+    XGL_FMT_R8G8B8A8_SRGB                                   = 0x00000024,
+    XGL_FMT_R10G10B10A2_UNORM                               = 0x00000025,
+    XGL_FMT_R10G10B10A2_SNORM                               = 0x00000026,
+    XGL_FMT_R10G10B10A2_USCALED                             = 0x00000027,
+    XGL_FMT_R10G10B10A2_SSCALED                             = 0x00000028,
+    XGL_FMT_R10G10B10A2_UINT                                = 0x00000029,
+    XGL_FMT_R10G10B10A2_SINT                                = 0x0000002A,
+    XGL_FMT_R16_UNORM                                       = 0x0000002B,
+    XGL_FMT_R16_SNORM                                       = 0x0000002C,
+    XGL_FMT_R16_USCALED                                     = 0x0000002D,
+    XGL_FMT_R16_SSCALED                                     = 0x0000002E,
+    XGL_FMT_R16_UINT                                        = 0x0000002F,
+    XGL_FMT_R16_SINT                                        = 0x00000030,
+    XGL_FMT_R16_SFLOAT                                      = 0x00000031,
+    XGL_FMT_R16G16_UNORM                                    = 0x00000032,
+    XGL_FMT_R16G16_SNORM                                    = 0x00000033,
+    XGL_FMT_R16G16_USCALED                                  = 0x00000034,
+    XGL_FMT_R16G16_SSCALED                                  = 0x00000035,
+    XGL_FMT_R16G16_UINT                                     = 0x00000036,
+    XGL_FMT_R16G16_SINT                                     = 0x00000037,
+    XGL_FMT_R16G16_SFLOAT                                   = 0x00000038,
+    XGL_FMT_R16G16B16_UNORM                                 = 0x00000039,
+    XGL_FMT_R16G16B16_SNORM                                 = 0x0000003A,
+    XGL_FMT_R16G16B16_USCALED                               = 0x0000003B,
+    XGL_FMT_R16G16B16_SSCALED                               = 0x0000003C,
+    XGL_FMT_R16G16B16_UINT                                  = 0x0000003D,
+    XGL_FMT_R16G16B16_SINT                                  = 0x0000003E,
+    XGL_FMT_R16G16B16_SFLOAT                                = 0x0000003F,
+    XGL_FMT_R16G16B16A16_UNORM                              = 0x00000040,
+    XGL_FMT_R16G16B16A16_SNORM                              = 0x00000041,
+    XGL_FMT_R16G16B16A16_USCALED                            = 0x00000042,
+    XGL_FMT_R16G16B16A16_SSCALED                            = 0x00000043,
+    XGL_FMT_R16G16B16A16_UINT                               = 0x00000044,
+    XGL_FMT_R16G16B16A16_SINT                               = 0x00000045,
+    XGL_FMT_R16G16B16A16_SFLOAT                             = 0x00000046,
+    XGL_FMT_R32_UINT                                        = 0x00000047,
+    XGL_FMT_R32_SINT                                        = 0x00000048,
+    XGL_FMT_R32_SFLOAT                                      = 0x00000049,
+    XGL_FMT_R32G32_UINT                                     = 0x0000004A,
+    XGL_FMT_R32G32_SINT                                     = 0x0000004B,
+    XGL_FMT_R32G32_SFLOAT                                   = 0x0000004C,
+    XGL_FMT_R32G32B32_UINT                                  = 0x0000004D,
+    XGL_FMT_R32G32B32_SINT                                  = 0x0000004E,
+    XGL_FMT_R32G32B32_SFLOAT                                = 0x0000004F,
+    XGL_FMT_R32G32B32A32_UINT                               = 0x00000050,
+    XGL_FMT_R32G32B32A32_SINT                               = 0x00000051,
+    XGL_FMT_R32G32B32A32_SFLOAT                             = 0x00000052,
+    XGL_FMT_R64_SFLOAT                                      = 0x00000053,
+    XGL_FMT_R64G64_SFLOAT                                   = 0x00000054,
+    XGL_FMT_R64G64B64_SFLOAT                                = 0x00000055,
+    XGL_FMT_R64G64B64A64_SFLOAT                             = 0x00000056,
+    XGL_FMT_R11G11B10_UFLOAT                                = 0x00000057,
+    XGL_FMT_R9G9B9E5_UFLOAT                                 = 0x00000058,
+    XGL_FMT_D16_UNORM                                       = 0x00000059,
+    XGL_FMT_D24_UNORM                                       = 0x0000005A,
+    XGL_FMT_D32_SFLOAT                                      = 0x0000005B,
+    XGL_FMT_S8_UINT                                         = 0x0000005C,
+    XGL_FMT_D16_UNORM_S8_UINT                               = 0x0000005D,
+    XGL_FMT_D24_UNORM_S8_UINT                               = 0x0000005E,
+    XGL_FMT_D32_SFLOAT_S8_UINT                              = 0x0000005F,
+    XGL_FMT_BC1_UNORM                                       = 0x00000060,
+    XGL_FMT_BC1_SRGB                                        = 0x00000061,
+    XGL_FMT_BC2_UNORM                                       = 0x00000062,
+    XGL_FMT_BC2_SRGB                                        = 0x00000063,
+    XGL_FMT_BC3_UNORM                                       = 0x00000064,
+    XGL_FMT_BC3_SRGB                                        = 0x00000065,
+    XGL_FMT_BC4_UNORM                                       = 0x00000066,
+    XGL_FMT_BC4_SNORM                                       = 0x00000067,
+    XGL_FMT_BC5_UNORM                                       = 0x00000068,
+    XGL_FMT_BC5_SNORM                                       = 0x00000069,
+    XGL_FMT_BC6H_UFLOAT                                     = 0x0000006A,
+    XGL_FMT_BC6H_SFLOAT                                     = 0x0000006B,
+    XGL_FMT_BC7_UNORM                                       = 0x0000006C,
+    XGL_FMT_BC7_SRGB                                        = 0x0000006D,
+    XGL_FMT_ETC2_R8G8B8_UNORM                               = 0x0000006E,
+    XGL_FMT_ETC2_R8G8B8A1_UNORM                             = 0x0000006F,
+    XGL_FMT_ETC2_R8G8B8A8_UNORM                             = 0x00000070,
+    XGL_FMT_EAC_R11_UNORM                                   = 0x00000071,
+    XGL_FMT_EAC_R11_SNORM                                   = 0x00000072,
+    XGL_FMT_EAC_R11G11_UNORM                                = 0x00000073,
+    XGL_FMT_EAC_R11G11_SNORM                                = 0x00000074,
+    XGL_FMT_ASTC_4x4_UNORM                                  = 0x00000075,
+    XGL_FMT_ASTC_4x4_SRGB                                   = 0x00000076,
+    XGL_FMT_ASTC_4x5_UNORM                                  = 0x00000077,
+    XGL_FMT_ASTC_4x5_SRGB                                   = 0x00000078,
+    XGL_FMT_ASTC_5x5_UNORM                                  = 0x00000079,
+    XGL_FMT_ASTC_5x5_SRGB                                   = 0x0000007A,
+    XGL_FMT_ASTC_6x5_UNORM                                  = 0x0000007B,
+    XGL_FMT_ASTC_6x5_SRGB                                   = 0x0000007C,
+    XGL_FMT_ASTC_6x6_UNORM                                  = 0x0000007D,
+    XGL_FMT_ASTC_6x6_SRGB                                   = 0x0000007E,
+    XGL_FMT_ASTC_8x5_UNORM                                  = 0x0000007F,
+    XGL_FMT_ASTC_8x5_SRGB                                   = 0x00000080,
+    XGL_FMT_ASTC_8x6_UNORM                                  = 0x00000081,
+    XGL_FMT_ASTC_8x6_SRGB                                   = 0x00000082,
+    XGL_FMT_ASTC_8x8_UNORM                                  = 0x00000083,
+    XGL_FMT_ASTC_8x8_SRGB                                   = 0x00000084,
+    XGL_FMT_ASTC_10x5_UNORM                                 = 0x00000085,
+    XGL_FMT_ASTC_10x5_SRGB                                  = 0x00000086,
+    XGL_FMT_ASTC_10x6_UNORM                                 = 0x00000087,
+    XGL_FMT_ASTC_10x6_SRGB                                  = 0x00000088,
+    XGL_FMT_ASTC_10x8_UNORM                                 = 0x00000089,
+    XGL_FMT_ASTC_10x8_SRGB                                  = 0x0000008A,
+    XGL_FMT_ASTC_10x10_UNORM                                = 0x0000008B,
+    XGL_FMT_ASTC_10x10_SRGB                                 = 0x0000008C,
+    XGL_FMT_ASTC_12x10_UNORM                                = 0x0000008D,
+    XGL_FMT_ASTC_12x10_SRGB                                 = 0x0000008E,
+    XGL_FMT_ASTC_12x12_UNORM                                = 0x0000008F,
+    XGL_FMT_ASTC_12x12_SRGB                                 = 0x00000090,
+    XGL_FMT_B5G6R5_UNORM                                    = 0x00000091,
+    XGL_FMT_B5G6R5_USCALED                                  = 0x00000092,
+    XGL_FMT_B8G8R8_UNORM                                    = 0x00000093,
+    XGL_FMT_B8G8R8_SNORM                                    = 0x00000094,
+    XGL_FMT_B8G8R8_USCALED                                  = 0x00000095,
+    XGL_FMT_B8G8R8_SSCALED                                  = 0x00000096,
+    XGL_FMT_B8G8R8_UINT                                     = 0x00000097,
+    XGL_FMT_B8G8R8_SINT                                     = 0x00000098,
+    XGL_FMT_B8G8R8_SRGB                                     = 0x00000099,
+    XGL_FMT_B8G8R8A8_UNORM                                  = 0x0000009A,
+    XGL_FMT_B8G8R8A8_SNORM                                  = 0x0000009B,
+    XGL_FMT_B8G8R8A8_USCALED                                = 0x0000009C,
+    XGL_FMT_B8G8R8A8_SSCALED                                = 0x0000009D,
+    XGL_FMT_B8G8R8A8_UINT                                   = 0x0000009E,
+    XGL_FMT_B8G8R8A8_SINT                                   = 0x0000009F,
+    XGL_FMT_B8G8R8A8_SRGB                                   = 0x000000A0,
+    XGL_FMT_B10G10R10A2_UNORM                               = 0x000000A1,
+    XGL_FMT_B10G10R10A2_SNORM                               = 0x000000A2,
+    XGL_FMT_B10G10R10A2_USCALED                             = 0x000000A3,
+    XGL_FMT_B10G10R10A2_SSCALED                             = 0x000000A4,
+    XGL_FMT_B10G10R10A2_UINT                                = 0x000000A5,
+    XGL_FMT_B10G10R10A2_SINT                                = 0x000000A6,
 
-//    XGL_FMT_BEGIN_RANGE                                     = XGL_FMT_UNDEFINED,   ////LUGMAL
-//    XGL_FMT_END_RANGE                                       = XGL_FMT_ASTC_12x12_SRGB,
-//    XGL_NUM_FMT                                             = (XGL_FMT_END_RANGE - XGL_FMT_BEGIN_RANGE + 1),
+    XGL_FMT_BEGIN_RANGE                                     = XGL_FMT_UNDEFINED,
+    XGL_FMT_END_RANGE                                       = XGL_FMT_B10G10R10A2_SINT,
+    XGL_NUM_FMT                                             = (XGL_FMT_END_RANGE - XGL_FMT_BEGIN_RANGE + 1),
+    XGL_MAX_ENUM(_XGL_FORMAT)
 } XGL_FORMAT;
 
 // Shader stage enumerant
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index 937db9a..e734b16 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -185,14 +185,14 @@
         region.imageExtent = Image::extent(info_.extent, lv);
 
         if (info_.usage & XGL_IMAGE_USAGE_DEPTH_STENCIL_BIT) {
-            if (info_.format.channelFormat != XGL_CH_FMT_R8) {
+            if (info_.format != XGL_FMT_S8_UINT) {
                 region.imageSubresource.aspect = XGL_IMAGE_ASPECT_DEPTH;
                 regions_.push_back(region);
             }
 
-            if (info_.format.channelFormat == XGL_CH_FMT_R16G8 ||
-                info_.format.channelFormat == XGL_CH_FMT_R32G8 ||
-                info_.format.channelFormat == XGL_CH_FMT_R8) {
+            if (info_.format == XGL_FMT_D16_UNORM_S8_UINT ||
+                info_.format == XGL_FMT_D32_SFLOAT_S8_UINT ||
+                info_.format == XGL_FMT_S8_UINT) {
                 region.imageSubresource.aspect = XGL_IMAGE_ASPECT_STENCIL;
                 regions_.push_back(region);
             }
@@ -389,48 +389,178 @@
     static const struct format_info {
         XGL_SIZE size;
         XGL_UINT channel_count;
-    } format_table[XGL_MAX_CH_FMT + 1] = {
-        [XGL_CH_FMT_UNDEFINED]      = { 0,  0 },
-        [XGL_CH_FMT_R4G4]           = { 1,  2 },
-        [XGL_CH_FMT_R4G4B4A4]       = { 2,  4 },
-        [XGL_CH_FMT_R5G6B5]         = { 2,  3 },
-        [XGL_CH_FMT_B5G6R5]         = { 2,  3 },
-        [XGL_CH_FMT_R5G5B5A1]       = { 2,  4 },
-        [XGL_CH_FMT_R8]             = { 1,  1 },
-        [XGL_CH_FMT_R8G8]           = { 2,  2 },
-        [XGL_CH_FMT_R8G8B8A8]       = { 4,  4 },
-        [XGL_CH_FMT_B8G8R8A8]       = { 4,  4 },
-        [XGL_CH_FMT_R10G11B11]      = { 4,  3 },
-        [XGL_CH_FMT_R11G11B10]      = { 4,  3 },
-        [XGL_CH_FMT_R10G10B10A2]    = { 4,  4 },
-        [XGL_CH_FMT_R16]            = { 2,  1 },
-        [XGL_CH_FMT_R16G16]         = { 4,  2 },
-        [XGL_CH_FMT_R16G16B16A16]   = { 8,  4 },
-        [XGL_CH_FMT_R32]            = { 4,  1 },
-        [XGL_CH_FMT_R32G32]         = { 8,  2 },
-        [XGL_CH_FMT_R32G32B32]      = { 12, 3 },
-        [XGL_CH_FMT_R32G32B32A32]   = { 16, 4 },
-        [XGL_CH_FMT_R16G8]          = { 3,  2 },
-        [XGL_CH_FMT_R32G8]          = { 5,  2 },
-        [XGL_CH_FMT_R9G9B9E5]       = { 4,  3 },
-        [XGL_CH_FMT_BC1]            = { 8,  4 },
-        [XGL_CH_FMT_BC2]            = { 16, 4 },
-        [XGL_CH_FMT_BC3]            = { 16, 4 },
-        [XGL_CH_FMT_BC4]            = { 8,  4 },
-        [XGL_CH_FMT_BC5]            = { 16, 4 },
-        [XGL_CH_FMT_BC6U]           = { 16, 4 },
-        [XGL_CH_FMT_BC6S]           = { 16, 4 },
-        [XGL_CH_FMT_BC7]            = { 16, 4 },
-        [XGL_CH_FMT_R8G8B8]         = { 3,  3 },
-        [XGL_CH_FMT_R16G16B16]      = { 6,  3 },
-        [XGL_CH_FMT_B10G10R10A2]    = { 4,  4 },
-        [XGL_CH_FMT_R64]            = { 8,  1 },
-        [XGL_CH_FMT_R64G64]         = { 16, 2 },
-        [XGL_CH_FMT_R64G64B64]      = { 24, 3 },
-        [XGL_CH_FMT_R64G64B64A64]   = { 32, 4 },
+    } format_table[XGL_NUM_FMT] = {
+        [XGL_FMT_UNDEFINED]            = { 0,  0 },
+        [XGL_FMT_R4G4_UNORM]           = { 1,  2 },
+        [XGL_FMT_R4G4_USCALED]         = { 1,  2 },
+        [XGL_FMT_R4G4B4A4_UNORM]       = { 2,  4 },
+        [XGL_FMT_R4G4B4A4_USCALED]     = { 2,  4 },
+        [XGL_FMT_R5G6B5_UNORM]         = { 2,  3 },
+        [XGL_FMT_R5G6B5_USCALED]       = { 2,  3 },
+        [XGL_FMT_R5G5B5A1_UNORM]       = { 2,  4 },
+        [XGL_FMT_R5G5B5A1_USCALED]     = { 2,  4 },
+        [XGL_FMT_R8_UNORM]             = { 1,  1 },
+        [XGL_FMT_R8_SNORM]             = { 1,  1 },
+        [XGL_FMT_R8_USCALED]           = { 1,  1 },
+        [XGL_FMT_R8_SSCALED]           = { 1,  1 },
+        [XGL_FMT_R8_UINT]              = { 1,  1 },
+        [XGL_FMT_R8_SINT]              = { 1,  1 },
+        [XGL_FMT_R8_SRGB]              = { 1,  1 },
+        [XGL_FMT_R8G8_UNORM]           = { 2,  2 },
+        [XGL_FMT_R8G8_SNORM]           = { 2,  2 },
+        [XGL_FMT_R8G8_USCALED]         = { 2,  2 },
+        [XGL_FMT_R8G8_SSCALED]         = { 2,  2 },
+        [XGL_FMT_R8G8_UINT]            = { 2,  2 },
+        [XGL_FMT_R8G8_SINT]            = { 2,  2 },
+        [XGL_FMT_R8G8_SRGB]            = { 2,  2 },
+        [XGL_FMT_R8G8B8_UNORM]         = { 3,  3 },
+        [XGL_FMT_R8G8B8_SNORM]         = { 3,  3 },
+        [XGL_FMT_R8G8B8_USCALED]       = { 3,  3 },
+        [XGL_FMT_R8G8B8_SSCALED]       = { 3,  3 },
+        [XGL_FMT_R8G8B8_UINT]          = { 3,  3 },
+        [XGL_FMT_R8G8B8_SINT]          = { 3,  3 },
+        [XGL_FMT_R8G8B8_SRGB]          = { 3,  3 },
+        [XGL_FMT_R8G8B8A8_UNORM]       = { 4,  4 },
+        [XGL_FMT_R8G8B8A8_SNORM]       = { 4,  4 },
+        [XGL_FMT_R8G8B8A8_USCALED]     = { 4,  4 },
+        [XGL_FMT_R8G8B8A8_SSCALED]     = { 4,  4 },
+        [XGL_FMT_R8G8B8A8_UINT]        = { 4,  4 },
+        [XGL_FMT_R8G8B8A8_SINT]        = { 4,  4 },
+        [XGL_FMT_R8G8B8A8_SRGB]        = { 4,  4 },
+        [XGL_FMT_R10G10B10A2_UNORM]    = { 4,  4 },
+        [XGL_FMT_R10G10B10A2_SNORM]    = { 4,  4 },
+        [XGL_FMT_R10G10B10A2_USCALED]  = { 4,  4 },
+        [XGL_FMT_R10G10B10A2_SSCALED]  = { 4,  4 },
+        [XGL_FMT_R10G10B10A2_UINT]     = { 4,  4 },
+        [XGL_FMT_R10G10B10A2_SINT]     = { 4,  4 },
+        [XGL_FMT_R16_UNORM]            = { 2,  1 },
+        [XGL_FMT_R16_SNORM]            = { 2,  1 },
+        [XGL_FMT_R16_USCALED]          = { 2,  1 },
+        [XGL_FMT_R16_SSCALED]          = { 2,  1 },
+        [XGL_FMT_R16_UINT]             = { 2,  1 },
+        [XGL_FMT_R16_SINT]             = { 2,  1 },
+        [XGL_FMT_R16_SFLOAT]           = { 2,  1 },
+        [XGL_FMT_R16G16_UNORM]         = { 4,  2 },
+        [XGL_FMT_R16G16_SNORM]         = { 4,  2 },
+        [XGL_FMT_R16G16_USCALED]       = { 4,  2 },
+        [XGL_FMT_R16G16_SSCALED]       = { 4,  2 },
+        [XGL_FMT_R16G16_UINT]          = { 4,  2 },
+        [XGL_FMT_R16G16_SINT]          = { 4,  2 },
+        [XGL_FMT_R16G16_SFLOAT]        = { 4,  2 },
+        [XGL_FMT_R16G16B16_UNORM]      = { 6,  3 },
+        [XGL_FMT_R16G16B16_SNORM]      = { 6,  3 },
+        [XGL_FMT_R16G16B16_USCALED]    = { 6,  3 },
+        [XGL_FMT_R16G16B16_SSCALED]    = { 6,  3 },
+        [XGL_FMT_R16G16B16_UINT]       = { 6,  3 },
+        [XGL_FMT_R16G16B16_SINT]       = { 6,  3 },
+        [XGL_FMT_R16G16B16_SFLOAT]     = { 6,  3 },
+        [XGL_FMT_R16G16B16A16_UNORM]   = { 8,  4 },
+        [XGL_FMT_R16G16B16A16_SNORM]   = { 8,  4 },
+        [XGL_FMT_R16G16B16A16_USCALED] = { 8,  4 },
+        [XGL_FMT_R16G16B16A16_SSCALED] = { 8,  4 },
+        [XGL_FMT_R16G16B16A16_UINT]    = { 8,  4 },
+        [XGL_FMT_R16G16B16A16_SINT]    = { 8,  4 },
+        [XGL_FMT_R16G16B16A16_SFLOAT]  = { 8,  4 },
+        [XGL_FMT_R32_UINT]             = { 4,  1 },
+        [XGL_FMT_R32_SINT]             = { 4,  1 },
+        [XGL_FMT_R32_SFLOAT]           = { 4,  1 },
+        [XGL_FMT_R32G32_UINT]          = { 8,  2 },
+        [XGL_FMT_R32G32_SINT]          = { 8,  2 },
+        [XGL_FMT_R32G32_SFLOAT]        = { 8,  2 },
+        [XGL_FMT_R32G32B32_UINT]       = { 12, 3 },
+        [XGL_FMT_R32G32B32_SINT]       = { 12, 3 },
+        [XGL_FMT_R32G32B32_SFLOAT]     = { 12, 3 },
+        [XGL_FMT_R32G32B32A32_UINT]    = { 16, 4 },
+        [XGL_FMT_R32G32B32A32_SINT]    = { 16, 4 },
+        [XGL_FMT_R32G32B32A32_SFLOAT]  = { 16, 4 },
+        [XGL_FMT_R64_SFLOAT]           = { 8,  1 },
+        [XGL_FMT_R64G64_SFLOAT]        = { 16, 2 },
+        [XGL_FMT_R64G64B64_SFLOAT]     = { 24, 3 },
+        [XGL_FMT_R64G64B64A64_SFLOAT]  = { 32, 4 },
+        [XGL_FMT_R11G11B10_UFLOAT]     = { 4,  3 },
+        [XGL_FMT_R9G9B9E5_UFLOAT]      = { 4,  3 },
+        [XGL_FMT_D16_UNORM]            = { 2,  1 },
+        [XGL_FMT_D24_UNORM]            = { 3,  1 },
+        [XGL_FMT_D32_SFLOAT]           = { 4,  1 },
+        [XGL_FMT_S8_UINT]              = { 1,  1 },
+        [XGL_FMT_D16_UNORM_S8_UINT]    = { 3,  2 },
+        [XGL_FMT_D24_UNORM_S8_UINT]    = { 4,  2 },
+        [XGL_FMT_D32_SFLOAT_S8_UINT]   = { 4,  2 },
+        [XGL_FMT_BC1_UNORM]            = { 8,  4 },
+        [XGL_FMT_BC1_SRGB]             = { 8,  4 },
+        [XGL_FMT_BC2_UNORM]            = { 16, 4 },
+        [XGL_FMT_BC2_SRGB]             = { 16, 4 },
+        [XGL_FMT_BC3_UNORM]            = { 16, 4 },
+        [XGL_FMT_BC3_SRGB]             = { 16, 4 },
+        [XGL_FMT_BC4_UNORM]            = { 8,  4 },
+        [XGL_FMT_BC4_SNORM]            = { 8,  4 },
+        [XGL_FMT_BC5_UNORM]            = { 16, 4 },
+        [XGL_FMT_BC5_SNORM]            = { 16, 4 },
+        [XGL_FMT_BC6H_UFLOAT]          = { 16, 4 },
+        [XGL_FMT_BC6H_SFLOAT]          = { 16, 4 },
+        [XGL_FMT_BC7_UNORM]            = { 16, 4 },
+        [XGL_FMT_BC7_SRGB]             = { 16, 4 },
+        // TODO: Initialize remaining compressed formats.
+        [XGL_FMT_ETC2_R8G8B8_UNORM]    = { 0, 0 },
+        [XGL_FMT_ETC2_R8G8B8A1_UNORM]  = { 0, 0 },
+        [XGL_FMT_ETC2_R8G8B8A8_UNORM]  = { 0, 0 },
+        [XGL_FMT_EAC_R11_UNORM]        = { 0, 0 },
+        [XGL_FMT_EAC_R11_SNORM]        = { 0, 0 },
+        [XGL_FMT_EAC_R11G11_UNORM]     = { 0, 0 },
+        [XGL_FMT_EAC_R11G11_SNORM]     = { 0, 0 },
+        [XGL_FMT_ASTC_4x4_UNORM]       = { 0, 0 },
+        [XGL_FMT_ASTC_4x4_SRGB]        = { 0, 0 },
+        [XGL_FMT_ASTC_4x5_UNORM]       = { 0, 0 },
+        [XGL_FMT_ASTC_4x5_SRGB]        = { 0, 0 },
+        [XGL_FMT_ASTC_5x5_UNORM]       = { 0, 0 },
+        [XGL_FMT_ASTC_5x5_SRGB]        = { 0, 0 },
+        [XGL_FMT_ASTC_6x5_UNORM]       = { 0, 0 },
+        [XGL_FMT_ASTC_6x5_SRGB]        = { 0, 0 },
+        [XGL_FMT_ASTC_6x6_UNORM]       = { 0, 0 },
+        [XGL_FMT_ASTC_6x6_SRGB]        = { 0, 0 },
+        [XGL_FMT_ASTC_8x5_UNORM]       = { 0, 0 },
+        [XGL_FMT_ASTC_8x5_SRGB]        = { 0, 0 },
+        [XGL_FMT_ASTC_8x6_UNORM]       = { 0, 0 },
+        [XGL_FMT_ASTC_8x6_SRGB]        = { 0, 0 },
+        [XGL_FMT_ASTC_8x8_UNORM]       = { 0, 0 },
+        [XGL_FMT_ASTC_8x8_SRGB]        = { 0, 0 },
+        [XGL_FMT_ASTC_10x5_UNORM]      = { 0, 0 },
+        [XGL_FMT_ASTC_10x5_SRGB]       = { 0, 0 },
+        [XGL_FMT_ASTC_10x6_UNORM]      = { 0, 0 },
+        [XGL_FMT_ASTC_10x6_SRGB]       = { 0, 0 },
+        [XGL_FMT_ASTC_10x8_UNORM]      = { 0, 0 },
+        [XGL_FMT_ASTC_10x8_SRGB]       = { 0, 0 },
+        [XGL_FMT_ASTC_10x10_UNORM]     = { 0, 0 },
+        [XGL_FMT_ASTC_10x10_SRGB]      = { 0, 0 },
+        [XGL_FMT_ASTC_12x10_UNORM]     = { 0, 0 },
+        [XGL_FMT_ASTC_12x10_SRGB]      = { 0, 0 },
+        [XGL_FMT_ASTC_12x12_UNORM]     = { 0, 0 },
+        [XGL_FMT_ASTC_12x12_SRGB]      = { 0, 0 },
+        [XGL_FMT_B5G6R5_UNORM]         = { 2, 3 },
+        [XGL_FMT_B5G6R5_USCALED]       = { 2, 3 },
+        [XGL_FMT_B8G8R8_UNORM]         = { 3, 3 },
+        [XGL_FMT_B8G8R8_SNORM]         = { 3, 3 },
+        [XGL_FMT_B8G8R8_USCALED]       = { 3, 3 },
+        [XGL_FMT_B8G8R8_SSCALED]       = { 3, 3 },
+        [XGL_FMT_B8G8R8_UINT]          = { 3, 3 },
+        [XGL_FMT_B8G8R8_SINT]          = { 3, 3 },
+        [XGL_FMT_B8G8R8_SRGB]          = { 3, 3 },
+        [XGL_FMT_B8G8R8A8_UNORM]       = { 4, 4 },
+        [XGL_FMT_B8G8R8A8_SNORM]       = { 4, 4 },
+        [XGL_FMT_B8G8R8A8_USCALED]     = { 4, 4 },
+        [XGL_FMT_B8G8R8A8_SSCALED]     = { 4, 4 },
+        [XGL_FMT_B8G8R8A8_UINT]        = { 4, 4 },
+        [XGL_FMT_B8G8R8A8_SINT]        = { 4, 4 },
+        [XGL_FMT_B8G8R8A8_SRGB]        = { 4, 4 },
+        [XGL_FMT_B10G10R10A2_UNORM]    = { 4, 4 },
+        [XGL_FMT_B10G10R10A2_SNORM]    = { 4, 4 },
+        [XGL_FMT_B10G10R10A2_USCALED]  = { 4, 4 },
+        [XGL_FMT_B10G10R10A2_SSCALED]  = { 4, 4 },
+        [XGL_FMT_B10G10R10A2_UINT]     = { 4, 4 },
+        [XGL_FMT_B10G10R10A2_SINT]     = { 4, 4 },
     };
 
-    return format_table[format.channelFormat].size;
+    return format_table[format].size;
 }
 
 XGL_EXTENT3D get_mip_level_extent(const XGL_EXTENT3D &extent, XGL_UINT mip_level)
@@ -836,10 +966,8 @@
 protected:
     void init_test_formats(XGL_FLAGS features)
     {
-        first_linear_format_.channelFormat = XGL_CH_FMT_UNDEFINED;
-        first_linear_format_.numericFormat = XGL_NUM_FMT_UNDEFINED;
-        first_optimal_format_.channelFormat = XGL_CH_FMT_UNDEFINED;
-        first_optimal_format_.numericFormat = XGL_NUM_FMT_UNDEFINED;
+        first_linear_format_ = XGL_FMT_UNDEFINED;
+        first_optimal_format_ = XGL_FMT_UNDEFINED;
 
         for (std::vector<xgl_testing::Device::Format>::const_iterator it = dev_.formats().begin();
              it != dev_.formats().end(); it++) {
@@ -847,10 +975,10 @@
                 test_formats_.push_back(*it);
 
                 if (it->tiling == XGL_LINEAR_TILING &&
-                    first_linear_format_.channelFormat == XGL_CH_FMT_UNDEFINED)
+                    first_linear_format_ == XGL_FMT_UNDEFINED)
                     first_linear_format_ = it->format;
                 if (it->tiling == XGL_OPTIMAL_TILING &&
-                    first_optimal_format_.channelFormat == XGL_CH_FMT_UNDEFINED)
+                    first_optimal_format_ == XGL_FMT_UNDEFINED)
                     first_optimal_format_ = it->format;
             }
         }
@@ -965,6 +1093,13 @@
 {
     for (std::vector<xgl_testing::Device::Format>::const_iterator it = test_formats_.begin();
          it != test_formats_.end(); it++) {
+
+        // not sure what to do here
+        if (it->format == XGL_FMT_UNDEFINED ||
+            (it->format >= XGL_FMT_B8G8R8_UNORM &&
+             it->format <= XGL_FMT_B8G8R8_SRGB))
+            continue;
+
         XGL_IMAGE_CREATE_INFO img_info = xgl_testing::Image::create_info();
         img_info.imageType = XGL_IMAGE_2D;
         img_info.format = it->format;
@@ -1024,6 +1159,13 @@
 {
     for (std::vector<xgl_testing::Device::Format>::const_iterator it = test_formats_.begin();
          it != test_formats_.end(); it++) {
+
+        // not sure what to do here
+        if (it->format == XGL_FMT_UNDEFINED ||
+            (it->format >= XGL_FMT_B8G8R8_UNORM &&
+             it->format <= XGL_FMT_B8G8R8_SRGB))
+            continue;
+
         XGL_IMAGE_CREATE_INFO img_info = xgl_testing::Image::create_info();
         img_info.imageType = XGL_IMAGE_2D;
         img_info.format = it->format;
@@ -1096,6 +1238,13 @@
 {
     for (std::vector<xgl_testing::Device::Format>::const_iterator it = test_formats_.begin();
          it != test_formats_.end(); it++) {
+
+        // not sure what to do here
+        if (it->format == XGL_FMT_UNDEFINED ||
+            (it->format >= XGL_FMT_B8G8R8_UNORM &&
+             it->format <= XGL_FMT_B8G8R8_SRGB))
+            continue;
+
         XGL_IMAGE_CREATE_INFO img_info = xgl_testing::Image::create_info();
         img_info.imageType = XGL_IMAGE_2D;
         img_info.format = it->format;
@@ -1155,12 +1304,17 @@
     for (std::vector<xgl_testing::Device::Format>::const_iterator it = test_formats_.begin();
          it != test_formats_.end(); it++) {
         // not sure what to do here
-        if (it->format.channelFormat == XGL_CH_FMT_UNDEFINED ||
-            (it->format.channelFormat >= XGL_CH_FMT_BC1 &&
-             it->format.channelFormat <= XGL_CH_FMT_BC7) ||
-            it->format.channelFormat == XGL_CH_FMT_R64G64B64 ||
-            it->format.channelFormat == XGL_CH_FMT_R64G64B64A64 ||
-            it->format.numericFormat == XGL_NUM_FMT_DS)
+        if (it->format == XGL_FMT_UNDEFINED ||
+            (it->format >= XGL_FMT_R32G32B32_UINT &&
+             it->format <= XGL_FMT_R32G32B32_SFLOAT) ||
+            (it->format >= XGL_FMT_B8G8R8_UNORM &&
+             it->format <= XGL_FMT_B8G8R8_SRGB) ||
+            (it->format >= XGL_FMT_BC1_UNORM &&
+             it->format <= XGL_FMT_ASTC_12x12_SRGB) ||
+            (it->format >= XGL_FMT_D16_UNORM &&
+             it->format <= XGL_FMT_D32_SFLOAT_S8_UINT) ||
+            it->format == XGL_FMT_R64G64B64_SFLOAT ||
+            it->format == XGL_FMT_R64G64B64A64_SFLOAT)
             continue;
 
         XGL_IMAGE_CREATE_INFO img_info = xgl_testing::Image::create_info();
@@ -1208,23 +1362,21 @@
         std::vector<uint8_t> raw;
 
         // TODO support all formats
-        if (format.numericFormat == XGL_NUM_FMT_UNORM) {
-            switch (format.channelFormat) {
-            case XGL_CH_FMT_R8G8B8A8:
-                raw.push_back(color[0] * 255.0f);
-                raw.push_back(color[1] * 255.0f);
-                raw.push_back(color[2] * 255.0f);
-                raw.push_back(color[3] * 255.0f);
-                break;
-            case XGL_CH_FMT_B8G8R8A8:
-                raw.push_back(color[2] * 255.0f);
-                raw.push_back(color[1] * 255.0f);
-                raw.push_back(color[0] * 255.0f);
-                raw.push_back(color[3] * 255.0f);
-                break;
-            default:
-                break;
-            }
+        switch (format) {
+        case XGL_FMT_R8G8B8A8_UNORM:
+            raw.push_back(color[0] * 255.0f);
+            raw.push_back(color[1] * 255.0f);
+            raw.push_back(color[2] * 255.0f);
+            raw.push_back(color[3] * 255.0f);
+            break;
+        case XGL_FMT_B8G8R8A8_UNORM:
+            raw.push_back(color[2] * 255.0f);
+            raw.push_back(color[1] * 255.0f);
+            raw.push_back(color[0] * 255.0f);
+            raw.push_back(color[3] * 255.0f);
+            break;
+        default:
+            break;
         }
 
         return raw;
@@ -1235,23 +1387,21 @@
         std::vector<uint8_t> raw;
 
         // TODO support all formats
-        if (format.numericFormat == XGL_NUM_FMT_UNORM) {
-            switch (format.channelFormat) {
-            case XGL_CH_FMT_R8G8B8A8:
-                raw.push_back(static_cast<uint8_t>(color[0]));
-                raw.push_back(static_cast<uint8_t>(color[1]));
-                raw.push_back(static_cast<uint8_t>(color[2]));
-                raw.push_back(static_cast<uint8_t>(color[3]));
-                break;
-            case XGL_CH_FMT_B8G8R8A8:
-                raw.push_back(static_cast<uint8_t>(color[2]));
-                raw.push_back(static_cast<uint8_t>(color[1]));
-                raw.push_back(static_cast<uint8_t>(color[0]));
-                raw.push_back(static_cast<uint8_t>(color[3]));
-                break;
-            default:
-                break;
-            }
+        switch (format) {
+        case XGL_FMT_R8G8B8A8_UNORM:
+            raw.push_back(static_cast<uint8_t>(color[0]));
+            raw.push_back(static_cast<uint8_t>(color[1]));
+            raw.push_back(static_cast<uint8_t>(color[2]));
+            raw.push_back(static_cast<uint8_t>(color[3]));
+            break;
+        case XGL_FMT_B8G8R8A8_UNORM:
+            raw.push_back(static_cast<uint8_t>(color[2]));
+            raw.push_back(static_cast<uint8_t>(color[1]));
+            raw.push_back(static_cast<uint8_t>(color[0]));
+            raw.push_back(static_cast<uint8_t>(color[3]));
+            break;
+        default:
+            break;
         }
 
         return raw;
@@ -1399,13 +1549,19 @@
         const XGL_UINT32 color[4] = { 0x11111111, 0x22222222, 0x33333333, 0x44444444 };
 
         // not sure what to do here
-        if (it->format.channelFormat == XGL_CH_FMT_UNDEFINED ||
-            it->format.channelFormat == XGL_CH_FMT_R32G32B32 ||
-            it->format.channelFormat == XGL_CH_FMT_R8G8B8 ||
-            it->format.channelFormat == XGL_CH_FMT_R16G16B16 ||
-            it->format.channelFormat == XGL_CH_FMT_R64G64B64 ||
-            it->format.channelFormat == XGL_CH_FMT_R64G64B64A64 ||
-            it->format.numericFormat == XGL_NUM_FMT_DS)
+        if (it->format == XGL_FMT_UNDEFINED ||
+            (it->format >= XGL_FMT_R8G8B8_UNORM &&
+             it->format <= XGL_FMT_R8G8B8_SRGB) ||
+            (it->format >= XGL_FMT_B8G8R8_UNORM &&
+             it->format <= XGL_FMT_B8G8R8_SRGB) ||
+            (it->format >= XGL_FMT_R16G16B16_UNORM &&
+             it->format <= XGL_FMT_R16G16B16_SFLOAT) ||
+            (it->format >= XGL_FMT_R32G32B32_UINT &&
+             it->format <= XGL_FMT_R32G32B32_SFLOAT) ||
+            it->format == XGL_FMT_R64G64B64_SFLOAT ||
+            it->format == XGL_FMT_R64G64B64A64_SFLOAT ||
+            (it->format >= XGL_FMT_D16_UNORM &&
+             it->format <= XGL_FMT_D32_SFLOAT_S8_UINT))
             continue;
 
         XGL_IMAGE_CREATE_INFO img_info = xgl_testing::Image::create_info();
@@ -1438,17 +1594,17 @@
         std::vector<uint8_t> raw;
 
         // depth
-        switch (format.channelFormat) {
-        case XGL_CH_FMT_R16:
-        case XGL_CH_FMT_R16G8:
+        switch (format) {
+        case XGL_FMT_D16_UNORM:
+        case XGL_FMT_D16_UNORM_S8_UINT:
             {
                 const uint16_t unorm = depth * 65535.0f;
                 raw.push_back(unorm & 0xff);
                 raw.push_back(unorm >> 8);
             }
             break;
-        case XGL_CH_FMT_R32:
-        case XGL_CH_FMT_R32G8:
+        case XGL_FMT_D32_SFLOAT:
+        case XGL_FMT_D32_SFLOAT_S8_UINT:
             {
                 const union {
                     XGL_FLOAT depth;
@@ -1466,15 +1622,15 @@
         }
 
         // stencil
-        switch (format.channelFormat) {
-        case XGL_CH_FMT_R8:
+        switch (format) {
+        case XGL_FMT_S8_UINT:
             raw.push_back(stencil);
             break;
-        case XGL_CH_FMT_R16G8:
+        case XGL_FMT_D16_UNORM_S8_UINT:
             raw.push_back(stencil);
             raw.push_back(0);
             break;
-        case XGL_CH_FMT_R32G8:
+        case XGL_FMT_D32_SFLOAT_S8_UINT:
             raw.push_back(stencil);
             raw.push_back(0);
             raw.push_back(0);
@@ -1567,7 +1723,10 @@
     for (std::vector<xgl_testing::Device::Format>::const_iterator it = test_formats_.begin();
          it != test_formats_.end(); it++) {
         // known driver issues
-        if (it->format.channelFormat == XGL_CH_FMT_R8)
+        if (it->format == XGL_FMT_S8_UINT ||
+            it->format == XGL_FMT_D24_UNORM ||
+            it->format == XGL_FMT_D16_UNORM_S8_UINT ||
+            it->format == XGL_FMT_D24_UNORM_S8_UINT)
             continue;
 
         XGL_IMAGE_CREATE_INFO img_info = xgl_testing::Image::create_info();
diff --git a/tests/image_tests.cpp b/tests/image_tests.cpp
index 5286a9a..9c7623a 100644
--- a/tests/image_tests.cpp
+++ b/tests/image_tests.cpp
@@ -127,8 +127,7 @@
         mipCount++;
     }
 
-    fmt.channelFormat = XGL_CH_FMT_R8G8B8A8;
-    fmt.numericFormat = XGL_NUM_FMT_UINT;
+    fmt = XGL_FMT_R8G8B8A8_UINT;
     // TODO: Pick known good format rather than just expect common format
     /*
      * XXX: What should happen if given NULL HANDLE for the pData argument?
@@ -272,8 +271,7 @@
     XGL_FORMAT fmt;
     XGL_IMAGE_VIEW imageView;
 
-    fmt.channelFormat = XGL_CH_FMT_R8G8B8A8;
-    fmt.numericFormat = XGL_NUM_FMT_UINT;
+    fmt = XGL_FMT_R8G8B8A8_UINT;
 
     CreateImage(512, 256);
 
diff --git a/tests/init.cpp b/tests/init.cpp
index 4dd620c..aca08b8 100644
--- a/tests/init.cpp
+++ b/tests/init.cpp
@@ -488,8 +488,7 @@
         mipCount++;
     }
 
-    fmt.channelFormat = XGL_CH_FMT_R8G8B8A8;
-    fmt.numericFormat = XGL_NUM_FMT_UINT;
+    fmt = XGL_FMT_R8G8B8A8_UINT;
     // TODO: Pick known good format rather than just expect common format
     /*
      * XXX: What should happen if given NULL HANDLE for the pData argument?
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index c7873e9..24db85f 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -341,8 +341,7 @@
     // Clean up default state created by framework
     if (m_stateDepthStencil) xglDestroyObject(m_stateDepthStencil);
 
-    m_depth_stencil_fmt.channelFormat = XGL_CH_FMT_R16;
-    m_depth_stencil_fmt.numericFormat = XGL_NUM_FMT_DS;
+    m_depth_stencil_fmt = XGL_FMT_D16_UNORM;
 
     image.sType = XGL_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
     image.pNext = NULL;
@@ -781,12 +780,10 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(vi_attribs,2);
@@ -854,8 +851,7 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attrib;
     vi_attrib.binding = 0;                       // index into vertexBindingDescriptions
-    vi_attrib.format.channelFormat = XGL_CH_FMT_R32G32;            // format of source data
-    vi_attrib.format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attrib.format = XGL_FMT_R32G32_SFLOAT;            // format of source data
     vi_attrib.offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(&vi_attrib, 1);
@@ -967,12 +963,10 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(vi_attribs,2);
@@ -1062,12 +1056,10 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(vi_attribs,2);
@@ -1156,12 +1148,10 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(vi_attribs,2);
@@ -1260,12 +1250,10 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(vi_attribs,2);
@@ -1354,12 +1342,10 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(vi_attribs,2);
@@ -1592,12 +1578,10 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(vi_attribs,2);
@@ -1685,12 +1669,10 @@
 
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputAttribs(vi_attribs,2);
@@ -1781,8 +1763,7 @@
     ds_state.back.stencilFailOp = XGL_STENCIL_OP_KEEP;
     ds_state.back.stencilPassOp = XGL_STENCIL_OP_KEEP;
     ds_state.back.stencilFunc = XGL_COMPARE_ALWAYS;
-    ds_state.format.channelFormat = XGL_CH_FMT_R32;
-    ds_state.format.numericFormat = XGL_NUM_FMT_DS;
+    ds_state.format = XGL_FMT_D32_SFLOAT;
     ds_state.front = ds_state.back;
     pipelineobj.SetDepthStencil(&ds_state);
 
@@ -1800,12 +1781,10 @@
     // this is the current description of g_vbData
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputBindings(&vi_binding,1);
@@ -2586,12 +2565,10 @@
     // this is the current description of g_vbData
     XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION vi_attribs[2];
     vi_attribs[0].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[0].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[0].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[0].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[0].offsetInBytes = 0;                 // Offset of first element in bytes from base of vertex
     vi_attribs[1].binding = 0;                       // index into vertexBindingDescriptions
-    vi_attribs[1].format.channelFormat = XGL_CH_FMT_R32G32B32A32;            // format of source data
-    vi_attribs[1].format.numericFormat = XGL_NUM_FMT_FLOAT;
+    vi_attribs[1].format = XGL_FMT_R32G32B32A32_SFLOAT;            // format of source data
     vi_attribs[1].offsetInBytes = 16;                 // Offset of first element in bytes from base of vertex
 
     pipelineobj.AddVertexInputBindings(&vi_binding,1);
@@ -2608,8 +2585,7 @@
     ds_state.back.stencilFailOp = XGL_STENCIL_OP_KEEP;
     ds_state.back.stencilPassOp = XGL_STENCIL_OP_KEEP;
     ds_state.back.stencilFunc = XGL_COMPARE_ALWAYS;
-    ds_state.format.channelFormat = XGL_CH_FMT_R32;
-    ds_state.format.numericFormat = XGL_NUM_FMT_DS;
+    ds_state.format = XGL_FMT_D32_SFLOAT;
     ds_state.front = ds_state.back;
     pipelineobj.SetDepthStencil(&ds_state);
 
diff --git a/tests/xglrenderframework.cpp b/tests/xglrenderframework.cpp
index 77cd9bb..68f7baa 100644
--- a/tests/xglrenderframework.cpp
+++ b/tests/xglrenderframework.cpp
@@ -38,8 +38,7 @@
 {
     m_renderTargetCount = 1;
 
-    m_render_target_fmt.channelFormat = XGL_CH_FMT_R8G8B8A8;
-    m_render_target_fmt.numericFormat = XGL_NUM_FMT_UNORM;
+    m_render_target_fmt = XGL_FMT_R8G8B8A8_UNORM;
 
     m_depthStencilBinding.view = XGL_NULL_HANDLE;
 }
@@ -82,8 +81,7 @@
 {
     XGL_RESULT err;
 
-    m_render_target_fmt.channelFormat = XGL_CH_FMT_R8G8B8A8;
-    m_render_target_fmt.numericFormat = XGL_NUM_FMT_UNORM;
+    m_render_target_fmt = XGL_FMT_R8G8B8A8_UNORM;
 
     // create a raster state (solid, back-face culling)
     XGL_DYNAMIC_RS_STATE_CREATE_INFO raster = {};
@@ -372,7 +370,7 @@
         XGL_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO,
         XGL_NULL_HANDLE,
         obj(),
-        {XGL_CH_FMT_R8G8B8A8, XGL_NUM_FMT_UNORM},
+        XGL_FMT_R8G8B8A8_UNORM,
         0,
         0,
         1
@@ -396,7 +394,7 @@
 XglTextureObj::XglTextureObj(XglDevice *device)
 {
     m_device = device;
-    const XGL_FORMAT tex_format = { XGL_CH_FMT_B8G8R8A8, XGL_NUM_FMT_UNORM };
+    const XGL_FORMAT tex_format = XGL_FMT_B8G8R8A8_UNORM;
     const uint32_t tex_colors[2] = { 0xffff0000, 0xff00ff00 };
 
     memset(&m_textureViewInfo,0,sizeof(m_textureViewInfo));
@@ -632,19 +630,18 @@
 
     m_numVertices = numIndexes;
     m_indexType = indexType;
-    viewFormat.numericFormat = XGL_NUM_FMT_UINT;
     switch (indexType) {
     case XGL_INDEX_8:
         m_stride = 1;
-        viewFormat.channelFormat = XGL_CH_FMT_R8;
+        viewFormat = XGL_FMT_R8_UINT;
         break;
     case XGL_INDEX_16:
         m_stride = 2;
-        viewFormat.channelFormat = XGL_CH_FMT_R16;
+        viewFormat = XGL_FMT_R16_UINT;
         break;
     case XGL_INDEX_32:
         m_stride = 4;
-        viewFormat.channelFormat = XGL_CH_FMT_R32;
+        viewFormat = XGL_FMT_R32_UINT;
         break;
     default:
         assert(!"unknown index type");
@@ -664,8 +661,7 @@
     view_info.buffer = obj();
     view_info.viewType = XGL_BUFFER_VIEW_TYPED;
     view_info.stride = m_stride;
-    view_info.format.channelFormat = viewFormat.channelFormat;
-    view_info.format.numericFormat = viewFormat.numericFormat;
+    view_info.format = viewFormat;
     view_info.channels.r = XGL_CHANNEL_SWIZZLE_R;
     view_info.channels.g = XGL_CHANNEL_SWIZZLE_G;
     view_info.channels.b = XGL_CHANNEL_SWIZZLE_B;
@@ -782,8 +778,7 @@
 
     m_ds_state.sType = XGL_STRUCTURE_TYPE_PIPELINE_DS_STATE_CREATE_INFO;
     m_ds_state.pNext = &m_ms_state,
-    m_ds_state.format.channelFormat = XGL_CH_FMT_R32;
-    m_ds_state.format.numericFormat = XGL_NUM_FMT_DS;
+    m_ds_state.format = XGL_FMT_D32_SFLOAT;
     m_ds_state.depthTestEnable      = XGL_FALSE;
     m_ds_state.depthWriteEnable     = XGL_FALSE;
     m_ds_state.depthBoundsEnable    = XGL_FALSE;
@@ -797,8 +792,7 @@
 
     XGL_PIPELINE_CB_ATTACHMENT_STATE att = {};
     att.blendEnable = XGL_FALSE;
-    att.format.channelFormat = XGL_CH_FMT_R8G8B8A8;
-    att.format.numericFormat = XGL_NUM_FMT_UNORM;
+    att.format = XGL_FMT_R8G8B8A8_UNORM;
     att.channelWriteMask = 0xf;
     AddColorAttachment(0, &att);
 
diff --git a/tests/xgltestbinding.cpp b/tests/xgltestbinding.cpp
index 88528af..c1864a2 100644
--- a/tests/xgltestbinding.cpp
+++ b/tests/xgltestbinding.cpp
@@ -440,21 +440,18 @@
 
 void Device::init_formats()
 {
-    for (int ch = XGL_CH_FMT_UNDEFINED; ch <= XGL_MAX_CH_FMT; ch++) {
-        for (int num = XGL_NUM_FMT_UNDEFINED; num <= XGL_MAX_NUM_FMT; num++) {
-            const XGL_FORMAT fmt = { static_cast<XGL_CHANNEL_FORMAT>(ch),
-                                     static_cast<XGL_NUM_FORMAT>(num) };
-            const XGL_FORMAT_PROPERTIES props = format_properties(fmt);
+    for (int f = XGL_FMT_BEGIN_RANGE; f <= XGL_FMT_END_RANGE; f++) {
+        const XGL_FORMAT fmt = static_cast<XGL_FORMAT>(f);
+        const XGL_FORMAT_PROPERTIES props = format_properties(fmt);
 
-            if (props.linearTilingFeatures) {
-                const Format tmp = { fmt, XGL_LINEAR_TILING, props.linearTilingFeatures };
-                formats_.push_back(tmp);
-            }
+        if (props.linearTilingFeatures) {
+            const Format tmp = { fmt, XGL_LINEAR_TILING, props.linearTilingFeatures };
+            formats_.push_back(tmp);
+        }
 
-            if (props.optimalTilingFeatures) {
-                const Format tmp = { fmt, XGL_OPTIMAL_TILING, props.optimalTilingFeatures };
-                formats_.push_back(tmp);
-            }
+        if (props.optimalTilingFeatures) {
+            const Format tmp = { fmt, XGL_OPTIMAL_TILING, props.optimalTilingFeatures };
+            formats_.push_back(tmp);
         }
     }
 
