icd: Support for command pools
diff --git a/icd/intel/cmd.c b/icd/intel/cmd.c
index 80a622f..b3eee0c 100644
--- a/icd/intel/cmd.c
+++ b/icd/intel/cmd.c
@@ -263,8 +263,9 @@
 {
     int pipeline_select;
     struct intel_cmd *cmd;
+    struct intel_cmd_pool *pool = intel_cmd_pool(info->cmdPool);
 
-    switch (info->queueNodeIndex) {
+    switch (pool->queue_family_index) {
     case INTEL_GPU_ENGINE_3D:
         pipeline_select = GEN6_PIPELINE_SELECT_DW0_SELECT_3D;
         break;
@@ -437,10 +438,73 @@
         return VK_ERROR_UNKNOWN;
 }
 
+static void pool_destroy(struct intel_obj *obj)
+{
+    struct intel_cmd_pool *cmd_pool = intel_cmd_pool_from_obj(obj);
+
+    intel_cmd_pool_destroy(cmd_pool);
+}
+
+VkResult intel_cmd_pool_create(struct intel_dev *dev,
+                            const VkCmdPoolCreateInfo *info,
+                            struct intel_cmd_pool **cmd_pool_ret)
+{
+    struct intel_cmd_pool *cmd_pool;
+
+    cmd_pool = (struct intel_cmd_pool *) intel_base_create(&dev->base.handle,
+            sizeof(*cmd_pool), dev->base.dbg, VK_OBJECT_TYPE_CMD_POOL, info, 0);
+    if (!cmd_pool)
+        return VK_ERROR_OUT_OF_HOST_MEMORY;
+
+    cmd_pool->obj.destroy = pool_destroy;
+
+    cmd_pool->dev = dev;
+    cmd_pool->queue_family_index = info->queueFamilyIndex;
+    cmd_pool->create_flags = info->flags;
+
+    *cmd_pool_ret = cmd_pool;
+
+    return VK_SUCCESS;
+}
+
+void intel_cmd_pool_destroy(struct intel_cmd_pool *cmd_pool)
+{
+    //cmd_reset(cmd);
+    //intel_free(cmd, cmd->relocs);
+    //intel_base_destroy(&cmd->obj.base);
+}
+
+ICD_EXPORT VkResult VKAPI vkCreateCommandPool(
+    VkDevice                                    device,
+    const VkCmdPoolCreateInfo*                  pCreateInfo,
+    VkCmdPool*                                  pCmdPool)
+{
+    struct intel_dev *dev = intel_dev(device);
+
+    return intel_cmd_pool_create(dev, pCreateInfo,
+            (struct intel_cmd_pool **) pCmdPool);
+}
+
+ICD_EXPORT VkResult VKAPI vkDestroyCommandPool(
+    VkDevice                                    device,
+    VkCmdPool                                   cmdPool)
+{
+    return VK_SUCCESS;
+}
+
+ICD_EXPORT VkResult VKAPI vkResetCommandPool(
+    VkDevice                                    device,
+    VkCmdPool                                   cmdPool,
+    VkCmdPoolResetFlags                         flags)
+{
+    // TODO
+    return VK_SUCCESS;
+}
+
 ICD_EXPORT VkResult VKAPI vkCreateCommandBuffer(
     VkDevice                                  device,
-    const VkCmdBufferCreateInfo*           pCreateInfo,
-    VkCmdBuffer*                             pCmdBuffer)
+    const VkCmdBufferCreateInfo*              pCreateInfo,
+    VkCmdBuffer*                              pCmdBuffer)
 {
     struct intel_dev *dev = intel_dev(device);
 
@@ -476,7 +540,8 @@
 }
 
 ICD_EXPORT VkResult VKAPI vkResetCommandBuffer(
-    VkCmdBuffer                              cmdBuffer)
+    VkCmdBuffer                              cmdBuffer,
+    VkCmdBufferResetFlags                    flags)
 {
     struct intel_cmd *cmd = intel_cmd(cmdBuffer);