diff --git a/icd/intel/shader.c b/icd/intel/shader.c
index 41a157e..92d889a 100644
--- a/icd/intel/shader.c
+++ b/icd/intel/shader.c
@@ -30,6 +30,58 @@
 #include "shader.h"
 #include "compiler/shader/compiler_interface.h"
 
+static void shader_module_destroy(struct intel_obj *obj)
+{
+    struct intel_shader_module *sm = intel_shader_module_from_obj(obj);
+
+    free(sm->code);
+    sm->code = 0;
+    intel_base_destroy(&sm->obj.base);
+}
+
+static VkResult shader_module_create(struct intel_dev *dev,
+                                     const VkShaderModuleCreateInfo *info,
+                                     struct intel_shader_module **sm_ret)
+{
+    const struct icd_spv_header *spv =
+        (const struct icd_spv_header *) info->pCode;
+    struct intel_shader_module *sm;
+
+    sm = (struct intel_shader_module *) intel_base_create(&dev->base.handle,
+            sizeof(*sm), dev->base.dbg, VK_OBJECT_TYPE_SHADER_MODULE, info, 0);
+    if (!sm)
+        return VK_ERROR_OUT_OF_HOST_MEMORY;
+
+    if (info->codeSize < sizeof(*spv))
+        return VK_ERROR_INVALID_MEMORY_SIZE;
+    if (spv->magic != ICD_SPV_MAGIC)
+        return VK_ERROR_BAD_SHADER_CODE;
+
+    sm->code_size = info->codeSize;
+    sm->code = malloc(info->codeSize);
+    if (!sm->code) {
+        shader_module_destroy(&sm->obj);
+        return VK_ERROR_OUT_OF_HOST_MEMORY;
+    }
+
+    memcpy(sm->code, info->pCode, info->codeSize);
+    sm->obj.destroy = shader_module_destroy;
+
+    *sm_ret = sm;
+
+    return VK_SUCCESS;
+}
+
+ICD_EXPORT VkResult VKAPI vkCreateShaderModule(
+    VkDevice                                    device,
+    const VkShaderModuleCreateInfo*             pCreateInfo,
+    VkShaderModule*                             pShaderModule)
+{
+    struct intel_dev *dev = intel_dev(device);
+
+    return shader_module_create(dev, pCreateInfo, (struct intel_shader_module **) pShaderModule);
+}
+
 static void shader_destroy(struct intel_obj *obj)
 {
     struct intel_shader *sh = intel_shader_from_obj(obj);
@@ -43,8 +95,6 @@
                                 const VkShaderCreateInfo *info,
                                 struct intel_shader **sh_ret)
 {
-    const struct icd_spv_header *spv =
-        (const struct icd_spv_header *) info->pCode;
     struct intel_shader *sh;
 
     sh = (struct intel_shader *) intel_base_create(&dev->base.handle,
@@ -52,12 +102,9 @@
     if (!sh)
         return VK_ERROR_OUT_OF_HOST_MEMORY;
 
-    if (info->codeSize < sizeof(*spv))
-        return VK_ERROR_INVALID_MEMORY_SIZE;
-    if (spv->magic != ICD_SPV_MAGIC)
-        return VK_ERROR_BAD_SHADER_CODE;
+    struct intel_shader_module *sm = intel_shader_module(info->module);
 
-    sh->ir = shader_create_ir(dev->gpu, info->pCode, info->codeSize);
+    sh->ir = shader_create_ir(dev->gpu, sm->code, sm->code_size);
     if (!sh->ir) {
         shader_destroy(&sh->obj);
         return VK_ERROR_BAD_SHADER_CODE;
diff --git a/icd/intel/shader.h b/icd/intel/shader.h
index badf33e..c3e83ea 100644
--- a/icd/intel/shader.h
+++ b/icd/intel/shader.h
@@ -50,4 +50,22 @@
     return (struct intel_shader *) obj;
 }
 
+struct intel_shader_module {
+    struct intel_obj obj;
+
+    /* content is just a copy of the SPIRV image */
+    uint32_t code_size;
+    void *code;
+};
+
+static inline struct intel_shader_module *intel_shader_module(VkShaderModule shaderModule)
+{
+    return (struct intel_shader_module *) shaderModule;
+}
+
+static inline struct intel_shader_module *intel_shader_module_from_obj(struct intel_obj *obj)
+{
+    return (struct intel_shader_module *)obj;
+}
+
 #endif /* SHADER_H */
