tests: Integrate command pools into tests
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index d7d0762..e169574 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -517,7 +517,8 @@
     VkCmdBlitTest() :
         dev_(environment->default_device()),
         queue_(*dev_.graphics_queues()[0]),
-        cmd_(dev_, vk_testing::CmdBuffer::create_info(dev_.graphics_queue_node_index_))
+        pool_(dev_, vk_testing::CmdPool::create_info(dev_.graphics_queue_node_index_)),
+        cmd_(dev_, vk_testing::CmdBuffer::create_info(pool_.handle()))
     {
         // make sure every test uses a different pattern
         vk_testing::ImageChecker::hash_salt_generate();
@@ -533,6 +534,7 @@
 
     vk_testing::Device &dev_;
     vk_testing::Queue &queue_;
+    vk_testing::CmdPool pool_;
     vk_testing::CmdBuffer cmd_;
 
     std::vector<VkDeviceMemory> mem_refs_;
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index 7d62c77..39662da 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -823,6 +823,14 @@
     NON_DISPATCHABLE_HANDLE_INIT(vkCreateDynamicDepthStencilState, dev, &info);
 }
 
+NON_DISPATCHABLE_HANDLE_DTOR(CmdPool, vkDestroyCommandPool)
+
+void CmdPool::init(const Device &dev, const VkCmdPoolCreateInfo &info)
+{
+    NON_DISPATCHABLE_HANDLE_INIT(vkCreateCommandPool, dev, &info);
+}
+
+
 CmdBuffer::~CmdBuffer()
 {
     if (initialized())
diff --git a/tests/vktestbinding.h b/tests/vktestbinding.h
index 82340d6..67c592a 100644
--- a/tests/vktestbinding.h
+++ b/tests/vktestbinding.h
@@ -60,6 +60,7 @@
 class DynamicColorBlendState;
 class DynamicDepthStencilState;
 class CmdBuffer;
+class CmdPool;
 
 std::vector<VkLayerProperties> GetGlobalLayers();
 std::vector<VkExtensionProperties> GetGlobalExtensions();
@@ -577,6 +578,27 @@
     void init(const Device &dev, const VkDynamicDepthStencilStateCreateInfo &info);
 };
 
+class CmdPool : public internal::NonDispHandle<VkCmdPool> {
+public:
+    ~CmdPool();
+
+    explicit CmdPool() : NonDispHandle() {}
+    explicit CmdPool(const Device &dev, const VkCmdPoolCreateInfo &info) { init(dev, info); }
+
+    // vkCreateDynamicDepthStencilState()
+    void init(const Device &dev, const VkCmdPoolCreateInfo &info);
+
+    static VkCmdPoolCreateInfo create_info(uint32_t queue_family_index);
+};
+
+inline VkCmdPoolCreateInfo CmdPool::create_info(uint32_t queue_family_index)
+{
+    VkCmdPoolCreateInfo info = {};
+    info.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO;
+    info.queueFamilyIndex = queue_family_index;
+    return info;
+}
+
 class CmdBuffer : public internal::Handle<VkCmdBuffer> {
 public:
     ~CmdBuffer();
@@ -597,7 +619,7 @@
     void reset(VkCmdBufferResetFlags flags);
     void reset() { reset(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES); }
 
-    static VkCmdBufferCreateInfo create_info(VkCmdPool pool);
+    static VkCmdBufferCreateInfo create_info(VkCmdPool const &pool);
 
 private:
     VkDevice dev_handle_;
@@ -804,7 +826,7 @@
     return copy;
 }
 
-inline VkCmdBufferCreateInfo CmdBuffer::create_info(VkCmdPool pool)
+inline VkCmdBufferCreateInfo CmdBuffer::create_info(VkCmdPool const &pool)
 {
     VkCmdBufferCreateInfo info = {};
     info.sType = VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO;