icd: Support for command pools
diff --git a/tests/init.cpp b/tests/init.cpp
index d298fc1..57bf875 100644
--- a/tests/init.cpp
+++ b/tests/init.cpp
@@ -490,6 +490,7 @@
 {
     VkResult err;
     VkCmdBufferCreateInfo info = {};
+    VkCmdPool cmdPool;
     VkCmdBuffer cmdBuffer;
 
 //    typedef struct VkCmdBufferCreateInfo_
@@ -500,12 +501,21 @@
 //        VkFlags                               flags;
 //    } VkCmdBufferCreateInfo;
 
+    VkCmdPoolCreateInfo cmd_pool_info;
+    cmd_pool_info.sType = VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO,
+    cmd_pool_info.pNext = NULL,
+    cmd_pool_info.queueFamilyIndex = graphics_queue_node_index;
+    cmd_pool_info.flags = 0,
+    err = vkCreateCommandPool(device(), &cmd_pool_info, &cmdPool);
+    ASSERT_VK_SUCCESS(err) << "vkCreateCommandPool failed";
+
     info.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO;
-    info.queueNodeIndex = graphics_queue_node_index;
+    info.cmdPool = cmdPool;
     err = vkCreateCommandBuffer(device(), &info, &cmdBuffer);
     ASSERT_VK_SUCCESS(err) << "vkCreateCommandBuffer failed";
 
     ASSERT_VK_SUCCESS(vkDestroyCommandBuffer(device(), cmdBuffer));
+    ASSERT_VK_SUCCESS(vkDestroyCommandPool(device(), cmdPool));
 }
 
 TEST_F(VkTest, TestCommandBuffer) {
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 6a593f0..ab00a9b 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -370,7 +370,7 @@
 
     m_errorMonitor->ClearState();
     // Introduce failure by calling begin again before checking fence
-    vkResetCommandBuffer(cmdBuffer.handle());
+    vkResetCommandBuffer(cmdBuffer.handle(), 0);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
     ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an err after calling ResetCommandBuffer on an active Command Buffer";
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 3af63b4..a35befe 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -150,6 +150,7 @@
     if (m_stateDepthStencil) vkDestroyDynamicDepthStencilState(device(), m_stateDepthStencil);
     if (m_stateRaster) vkDestroyDynamicRasterState(device(), m_stateRaster);
     if (m_cmdBuffer) vkDestroyCommandBuffer(device(), m_cmdBuffer);
+    if (m_cmdPool) vkDestroyCommandPool(device(), m_cmdPool);
     if (m_framebuffer) vkDestroyFramebuffer(device(), m_framebuffer);
     if (m_renderPass) vkDestroyRenderPass(device(), m_renderPass);
 
@@ -207,10 +208,15 @@
     err = vkCreateDynamicDepthStencilState( device(), &depthStencil, &m_stateDepthStencil );
     ASSERT_VK_SUCCESS( err );
 
-    VkCmdBufferCreateInfo cmdInfo = {};
+    VkCmdPoolCreateInfo cmd_pool_info;
+    cmd_pool_info.sType = VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO,
+    cmd_pool_info.pNext = NULL,
+    cmd_pool_info.queueFamilyIndex = m_device->graphics_queue_node_index_;
+    cmd_pool_info.flags = 0,
+    err = vkCreateCommandPool(device(), &cmd_pool_info, &m_cmdPool);
+    assert(!err);
 
-    cmdInfo.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO;
-    cmdInfo.queueNodeIndex = m_device->graphics_queue_node_index_;
+    VkCmdBufferCreateInfo cmdInfo = vk_testing::CmdBuffer::create_info(m_cmdPool);
 
     err = vkCreateCommandBuffer(device(), &cmdInfo, &m_cmdBuffer);
     ASSERT_VK_SUCCESS(err) << "vkCreateCommandBuffer failed";
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index 34ef824..d00185a 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -103,6 +103,7 @@
     VkPhysicalDevice                    objs[16];
     uint32_t                            gpu_count;
     VkDeviceObj                        *m_device;
+    VkCmdPool                           m_cmdPool;
     VkCmdBuffer                         m_cmdBuffer;
     VkRenderPass                        m_renderPass;
     VkFramebuffer                       m_framebuffer;
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index 2f21733..7d62c77 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -859,9 +859,9 @@
     EXPECT(vkEndCommandBuffer(handle()) == VK_SUCCESS);
 }
 
-void CmdBuffer::reset()
+void CmdBuffer::reset(VkCmdBufferResetFlags flags)
 {
-    EXPECT(vkResetCommandBuffer(handle()) == VK_SUCCESS);
+    EXPECT(vkResetCommandBuffer(handle(), flags) == VK_SUCCESS);
 }
 
 }; // namespace vk_testing
diff --git a/tests/vktestbinding.h b/tests/vktestbinding.h
index 2a30ea9..82340d6 100644
--- a/tests/vktestbinding.h
+++ b/tests/vktestbinding.h
@@ -594,9 +594,10 @@
     // vkEndCommandBuffer()
     // vkResetCommandBuffer()
     void end();
-    void reset();
+    void reset(VkCmdBufferResetFlags flags);
+    void reset() { reset(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES); }
 
-    static VkCmdBufferCreateInfo create_info(uint32_t queueNodeIndex);
+    static VkCmdBufferCreateInfo create_info(VkCmdPool pool);
 
 private:
     VkDevice dev_handle_;
@@ -803,11 +804,11 @@
     return copy;
 }
 
-inline VkCmdBufferCreateInfo CmdBuffer::create_info(uint32_t queueNodeIndex)
+inline VkCmdBufferCreateInfo CmdBuffer::create_info(VkCmdPool pool)
 {
     VkCmdBufferCreateInfo info = {};
     info.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO;
-    info.queueNodeIndex = queueNodeIndex;
+    info.cmdPool = pool;
     return info;
 }