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();
