diff --git a/icd/intel/format.c b/icd/intel/format.c
index 41d9aae..0a704c4 100644
--- a/icd/intel/format.c
+++ b/icd/intel/format.c
@@ -395,7 +395,7 @@
                                   GEN6_FORMAT_BC7_UNORM_SRGB, },
 };
 
-static int intel_format_translate_color(XGL_FORMAT format)
+int intel_format_translate_color(XGL_FORMAT format)
 {
     int fmt;
 
diff --git a/icd/intel/format.h b/icd/intel/format.h
index c3399b6..a4c949f 100644
--- a/icd/intel/format.h
+++ b/icd/intel/format.h
@@ -27,6 +27,21 @@
 
 #include "intel.h"
 
+static inline bool intel_format_is_depth(XGL_FORMAT format)
+{
+    return (format.numericFormat == XGL_NUM_FMT_DS &&
+            (format.channelFormat == XGL_CH_FMT_R16 ||
+             format.channelFormat == XGL_CH_FMT_R32));
+}
+
+static inline bool intel_format_is_stencil(XGL_FORMAT format)
+{
+   return (format.numericFormat == XGL_NUM_FMT_DS &&
+           format.channelFormat == XGL_CH_FMT_R8);
+}
+
+int intel_format_translate_color(XGL_FORMAT format);
+
 XGL_RESULT XGLAPI intelGetFormatInfo(
     XGL_DEVICE                                  device,
     XGL_FORMAT                                  format,
diff --git a/icd/intel/intel.h b/icd/intel/intel.h
index 5c70a2f..125c6f9 100644
--- a/icd/intel/intel.h
+++ b/icd/intel/intel.h
@@ -34,6 +34,7 @@
 #include <xglDbg.h>
 
 #include "icd.h"
+#include "icd-format.h"
 #include "icd-utils.h"
 
 #define INTEL_API_VERSION XGL_MAKE_VERSION(0, 22, 0)
diff --git a/icd/intel/layout.c b/icd/intel/layout.c
index 71a0de9..337b282 100644
--- a/icd/intel/layout.c
+++ b/icd/intel/layout.c
@@ -26,6 +26,7 @@
  */
 
 #include "dev.h"
+#include "format.h"
 #include "gpu.h"
 #include "layout.h"
 
@@ -581,8 +582,7 @@
     *
     * GEN6 does not support compact spacing otherwise.
     */
-   layout->full_layers = !(layout->format.channelFormat == XGL_CH_FMT_R8 &&
-                           layout->format.numericFormat == XGL_NUM_FMT_DS);
+   layout->full_layers = !intel_format_is_stencil(layout->format);
 }
 
 static void
@@ -634,88 +634,11 @@
    }
 
    layout->format = format;
+   layout->block_width = icd_format_get_block_width(format);
+   layout->block_height = layout->block_width;
+   layout->block_size = icd_format_get_size(format);
 
-   layout->block_width = 1;
-   layout->block_height = 1;
-   layout->block_size = 1;
-   params->compressed = false;
-
-   switch (format.channelFormat) {
-   case XGL_CH_FMT_UNDEFINED:
-       break;
-   case XGL_CH_FMT_R4G4:
-       layout->block_size = 1;
-       break;
-   case XGL_CH_FMT_R4G4B4A4:
-       layout->block_size = 2;
-       break;
-   case XGL_CH_FMT_R5G6B5:
-   case XGL_CH_FMT_B5G6R5:
-   case XGL_CH_FMT_R5G5B5A1:
-       layout->block_size = 2;
-       break;
-   case XGL_CH_FMT_R8:
-       layout->block_size = 1;
-       break;
-   case XGL_CH_FMT_R8G8:
-       layout->block_size = 2;
-       break;
-   case XGL_CH_FMT_R8G8B8A8:
-   case XGL_CH_FMT_B8G8R8A8:
-   case XGL_CH_FMT_R10G11B11:
-   case XGL_CH_FMT_R11G11B10:
-   case XGL_CH_FMT_R10G10B10A2:
-       layout->block_size = 4;
-       break;
-   case XGL_CH_FMT_R16:
-       layout->block_size = 2;
-       break;
-   case XGL_CH_FMT_R16G16:
-       layout->block_size = 4;
-       break;
-   case XGL_CH_FMT_R16G16B16A16:
-       layout->block_size = 8;
-       break;
-   case XGL_CH_FMT_R32:
-       layout->block_size = 4;
-       break;
-   case XGL_CH_FMT_R32G32:
-       layout->block_size = 8;
-       break;
-   case XGL_CH_FMT_R32G32B32:
-       layout->block_size = 12;
-       break;
-   case XGL_CH_FMT_R32G32B32A32:
-       layout->block_size = 16;
-       break;
-   case XGL_CH_FMT_R16G8:
-       layout->block_size = 3;
-       break;
-   case XGL_CH_FMT_R32G8:
-       layout->block_size = 5;
-       break;
-   case XGL_CH_FMT_R9G9B9E5:
-       layout->block_size = 4;
-       break;
-   case XGL_CH_FMT_BC1:
-   case XGL_CH_FMT_BC2:
-   case XGL_CH_FMT_BC3:
-   case XGL_CH_FMT_BC4:
-   case XGL_CH_FMT_BC5:
-   case XGL_CH_FMT_BC6U:
-   case XGL_CH_FMT_BC6S:
-   case XGL_CH_FMT_BC7:
-       layout->block_width = 4;
-       layout->block_height = 4;
-       layout->block_size =
-           (format.channelFormat == XGL_CH_FMT_BC1 ||
-            format.channelFormat == XGL_CH_FMT_BC4) ? 8 : 16;
-       params->compressed = true;
-       break;
-   default:
-       assert(!"unknown format");
-       break;
-   }
+   params->compressed = icd_format_is_compressed(format);
 }
 
 static bool
@@ -789,7 +712,7 @@
    if (!(info->usage & XGL_IMAGE_USAGE_DEPTH_STENCIL_BIT))
       return false;
 
-   if (info->format.channelFormat == XGL_CH_FMT_R8)
+   if (!intel_format_is_depth(info->format))
       return false;
 
    if (intel_gpu_gen(params->gpu) >= INTEL_GEN(7)) {
@@ -951,8 +874,7 @@
          align_h = 32;
          break;
       default:
-         if (layout->format.channelFormat == XGL_CH_FMT_R8 &&
-             layout->format.numericFormat == XGL_NUM_FMT_DS) {
+         if (intel_format_is_stencil(layout->format)) {
             /*
              * From the Sandy Bridge PRM, volume 1 part 2, page 22:
              *
