tests: On init, specify if buffer is src or dst
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index 04d5969..9c301ec 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -545,7 +545,7 @@
     vk_testing::Buffer buf;
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
 
-    buf.init(dev_, 20, reqs);
+    buf.init_as_dst(dev_, 20, reqs);
 
     cmd_.begin();
     vkCmdFillBuffer(cmd_.obj(), buf.obj(), 0, 4, 0x11111111);
@@ -569,7 +569,7 @@
     vk_testing::Buffer buf;
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
 
-    buf.init(dev_, size, reqs);
+    buf.init_as_dst(dev_, size, reqs);
 
     cmd_.begin();
     vkCmdFillBuffer(cmd_.obj(), buf.obj(), 0, size / 2, 0x11111111);
@@ -592,7 +592,7 @@
     vk_testing::Buffer buf;
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
 
-    buf.init(dev_, 64, reqs);
+    buf.init_as_dst(dev_, 64, reqs);
 
     cmd_.begin();
     vkCmdFillBuffer(cmd_.obj(), buf.obj(), 0, 48, 0x11111111);
@@ -618,7 +618,8 @@
 
     cmd_.begin();
     for (int i = 0; i < ARRAY_SIZE(bufs); i++) {
-        bufs[i].init(dev_, size, reqs);
+
+        bufs[i].init_as_dst(dev_, size, reqs);
         vkCmdFillBuffer(cmd_.obj(), bufs[i].obj(), 0, size, 0x11111111);
         size <<= 1;
     }
@@ -646,12 +647,12 @@
     vk_testing::Buffer src, dst;
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
 
-    src.init(dev_, 4, reqs);
+    src.init_as_src(dev_, 4, reqs);
     uint32_t *data = static_cast<uint32_t *>(src.map());
     data[0] = 0x11111111;
     src.unmap();
 
-    dst.init(dev_, 4, reqs);
+    dst.init_as_dst(dev_, 4, reqs);
 
     cmd_.begin();
     VkBufferCopy region = {};
@@ -672,14 +673,14 @@
     vk_testing::Buffer src, dst;
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
 
-    src.init(dev_, size, reqs);
+    src.init_as_src(dev_, size, reqs);
     uint32_t *data = static_cast<uint32_t *>(src.map());
     VkDeviceSize offset;
     for (offset = 0; offset < size; offset += 4)
         data[offset / 4] = offset;
     src.unmap();
 
-    dst.init(dev_, size, reqs);
+    dst.init_as_dst(dev_, size, reqs);
 
     cmd_.begin();
     VkBufferCopy region = {};
@@ -716,13 +717,13 @@
     vk_testing::Buffer src, dst;
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
 
-    src.init(dev_, 256, reqs);
+    src.init_as_src(dev_, 256, reqs);
     uint8_t *data = static_cast<uint8_t *>(src.map());
     for (int i = 0; i < 256; i++)
         data[i] = i;
     src.unmap();
 
-    dst.init(dev_, 1024, reqs);
+    dst.init_as_dst(dev_, 1024, reqs);
 
     cmd_.begin();
     vkCmdCopyBuffer(cmd_.obj(), src.obj(), dst.obj(), ARRAY_SIZE(regions), regions);
@@ -790,7 +791,7 @@
     ASSERT_VK_SUCCESS(err);
 
     for (int i = 0; i < ARRAY_SIZE(bufs); i++) {
-        bufs[i].init(dev_, 4, reqs);
+        bufs[i].init_as_src_and_dst(dev_, 4, reqs);
 
         uint32_t *data = static_cast<uint32_t *>(bufs[i].map());
         data[0] = 0x22222222 * (i + 1);
@@ -889,7 +890,7 @@
         vk_testing::Buffer in_buf;
         VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
 
-        in_buf.init(dev_, checker.buffer_size(), reqs);
+        in_buf.init_as_src(dev_, checker.buffer_size(), reqs);
         checker.fill(in_buf);
 
         // copy in and tile
@@ -913,7 +914,7 @@
 
         vk_testing::Buffer out_buf;
         VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
-        out_buf.init(dev_, checker.buffer_size(), reqs);
+        out_buf.init_as_dst(dev_, checker.buffer_size(), reqs);
 
         // copy out and linearize
         cmd_.begin();
@@ -950,7 +951,7 @@
         VkMemoryPropertyFlags image_reqs =
             (img_info.tiling == VK_IMAGE_TILING_LINEAR)?VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT:0;
 
-        buf.init(dev_, checker.buffer_size(), buffer_reqs);
+        buf.init_as_src(dev_, checker.buffer_size(), buffer_reqs);
         checker.fill(buf);
 
         img.init(dev_, img_info, image_reqs);
@@ -1023,7 +1024,7 @@
         img.init(dev_, img_info, image_reqs);
         fill_src(img, checker);
 
-        buf.init(dev_, checker.buffer_size(), buffer_reqs);
+        buf.init_as_dst(dev_, checker.buffer_size(), buffer_reqs);
 
         cmd_.begin();
         vkCmdCopyImageToBuffer(cmd_.obj(),
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index d6b7ab5..32642fb 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -861,7 +861,7 @@
 
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
     const size_t allocationSize = constantCount * constantSize;
-    init(*m_device, allocationSize, reqs);
+    init_as_src_and_dst(*m_device, allocationSize, reqs);
 
     void *pData = map();
     memcpy(pData, data, allocationSize);
@@ -976,7 +976,7 @@
 
     const size_t allocationSize = numIndexes * m_stride;
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
-    init(*m_device, allocationSize, reqs);
+    init_as_src_and_dst(*m_device, allocationSize, reqs);
 
     void *pData = map();
     memcpy(pData, data, allocationSize);
diff --git a/tests/vktestbinding.h b/tests/vktestbinding.h
index dd9de33..18fe4f0 100644
--- a/tests/vktestbinding.h
+++ b/tests/vktestbinding.h
@@ -374,7 +374,9 @@
     // vkCreateBuffer()
     void init(const Device &dev, const VkBufferCreateInfo &info);
     void init(const Device &dev, VkDeviceSize size) { init(dev, create_info(size, 0)); }
-    void init(const Device &dev, VkDeviceSize size, VkMemoryPropertyFlags &reqs) { init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT), reqs); }
+    void init_as_src(const Device &dev, VkDeviceSize size, VkMemoryPropertyFlags &reqs) { init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT), reqs); }
+    void init_as_dst(const Device &dev, VkDeviceSize size, VkMemoryPropertyFlags &reqs) { init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT), reqs); }
+    void init_as_src_and_dst(const Device &dev, VkDeviceSize size, VkMemoryPropertyFlags &reqs) { init(dev, create_info(size, VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT | VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT), reqs); }
     void init(const Device &dev, const VkBufferCreateInfo &info, VkMemoryPropertyFlags &reqs);
     void init_no_mem(const Device &dev, const VkBufferCreateInfo &info);
 
diff --git a/tests/vktestframework.cpp b/tests/vktestframework.cpp
index be39d2d..fb5ded6 100644
--- a/tests/vktestframework.cpp
+++ b/tests/vktestframework.cpp
@@ -462,8 +462,7 @@
     }
 
     VkMemoryPropertyFlags flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
-    flags |= VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT;
-    buf.init(m_device, (VkDeviceSize)m_display_image->m_data_size, flags);
+    buf.init_as_src(m_device, (VkDeviceSize)m_display_image->m_data_size, flags);
     dest_ptr = buf.map();
     memcpy(dest_ptr, m_display_image->m_data, m_display_image->m_data_size);
     buf.unmap();