diff --git a/layers/draw_state.c b/layers/draw_state.c
index 883c78d..65a98af 100644
--- a/layers/draw_state.c
+++ b/layers/draw_state.c
@@ -122,6 +122,21 @@
 #define MAPPING_SAMPLER 0x00000004
 #define MAPPING_DS      0x00000008
 
+static char* stringSlotBinding(XGL_UINT binding)
+{
+    switch (binding)
+    {
+        case MAPPING_MEMORY:
+            return "Memory View";
+        case MAPPING_IMAGE:
+            return "Image View";
+        case MAPPING_SAMPLER:
+            return "Sampler";
+        default:
+            return "UNKNOWN DS BINDING";
+    }
+}
+
 typedef struct _DS_SLOT {
     XGL_UINT                     slot;
     XGL_DESCRIPTOR_SLOT_INFO     shaderSlotInfo[2];
@@ -326,6 +341,46 @@
     }
 }
 
+// Checks to make sure that shader mapping matches slot binding
+// Print an ERROR and return XGL_FALSE if they don't line up
+static XGL_BOOL verifyShaderSlotMapping(const XGL_UINT slot, const XGL_UINT slotBinding, const XGL_UINT shaderStage, const XGL_DESCRIPTOR_SET_SLOT_TYPE shaderMapping)
+{
+    XGL_BOOL error = XGL_FALSE;
+    switch (shaderMapping)
+    {
+        case XGL_SLOT_SHADER_RESOURCE:
+            if (MAPPING_MEMORY != slotBinding && MAPPING_IMAGE != slotBinding)
+                error = XGL_TRUE;
+            break;
+        case XGL_SLOT_SHADER_SAMPLER:
+            if (MAPPING_SAMPLER != slotBinding)
+                error = XGL_TRUE;
+            break;
+        case XGL_SLOT_VERTEX_INPUT:
+            if (MAPPING_MEMORY != slotBinding)
+                error = XGL_TRUE;
+            break;
+        case XGL_SLOT_SHADER_UAV:
+            if (MAPPING_MEMORY != slotBinding)
+                error = XGL_TRUE;
+            break;
+        case XGL_SLOT_NEXT_DESCRIPTOR_SET:
+            if (MAPPING_DS != slotBinding)
+                error = XGL_TRUE;
+            break;
+        case XGL_SLOT_UNUSED:
+            break;
+        default:
+            printf("DS ERROR : For DS slot %u, unknown shader slot mapping w/ value %u\n", slot, shaderMapping);
+            return XGL_FALSE;
+    }
+    if (XGL_TRUE == error) {
+        printf("DS ERROR : DS Slot #%u binding of %s does not match %s shader mapping of %s\n", slot, stringSlotBinding(slotBinding), (shaderStage == VS) ? "Vtx" : "Frag", string_XGL_DESCRIPTOR_SET_SLOT_TYPE(shaderMapping));
+        return XGL_FALSE;
+    }
+    return XGL_TRUE;
+}
+
 // Print details of DS config to stdout
 static void printDSConfig()
 {
@@ -351,9 +406,11 @@
                             printf("    NO VIEW MAPPED TO THIS DS SLOT\n");
                             break;
                     }
+                    // For each shader type, check its mapping
                     for (uint32_t k = 0; k < 2; k++) {
                         if (XGL_SLOT_UNUSED != pDS->dsSlot[j].shaderSlotInfo[k].slotObjectType) {
                             printf("    Shader type %s has %s slot type mapping to shaderEntityIndex %u\n", (k == 0) ? "VS" : "FS", string_XGL_DESCRIPTOR_SET_SLOT_TYPE(pDS->dsSlot[j].shaderSlotInfo[k].slotObjectType), pDS->dsSlot[j].shaderSlotInfo[k].shaderEntityIndex);
+                            verifyShaderSlotMapping(j, pDS->dsSlot[j].activeMapping, k, pDS->dsSlot[j].shaderSlotInfo[k].slotObjectType);
                         }
                     }
                 }
