tests: Use staging buffer for --show-images
diff --git a/tests/vktestframework.cpp b/tests/vktestframework.cpp
index 17c4c8f..5792ecf 100644
--- a/tests/vktestframework.cpp
+++ b/tests/vktestframework.cpp
@@ -341,41 +341,45 @@
void VkTestFramework::Show(const char *comment, VkImageObj *image)
{
VkResult err;
+ VkSubresourceLayout sr_layout;
+ char *ptr;
+ VkTestImageRecord record;
+ size_t data_size = sizeof(sr_layout);
+ VkImageObj displayImage(image->device());
+ VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+
+ if (!m_show_images) return;
+
+ displayImage.init(image->extent().width, image->extent().height, image->format(), 0, VK_IMAGE_TILING_LINEAR, reqs);
+ displayImage.CopyImage(*image);
const VkImageSubresource sr = {
VK_IMAGE_ASPECT_COLOR, 0, 0
};
- VkSubresourceLayout sr_layout;
- size_t data_size = sizeof(sr_layout);
- VkTestImageRecord record;
- if (!m_show_images) return;
-
- err = vkGetImageSubresourceInfo( image->device()->device(), image->image(), &sr, VK_SUBRESOURCE_INFO_TYPE_LAYOUT,
- &data_size, &sr_layout);
+ err = vkGetImageSubresourceInfo(displayImage.device()->device(), displayImage.image(), &sr,
+ VK_SUBRESOURCE_INFO_TYPE_LAYOUT,
+ &data_size, &sr_layout);
ASSERT_VK_SUCCESS( err );
ASSERT_EQ(data_size, sizeof(sr_layout));
- char *ptr;
-
- err = image->MapMemory( (void **) &ptr );
+ err = displayImage.MapMemory( (void **) &ptr );
ASSERT_VK_SUCCESS( err );
ptr += sr_layout.offset;
record.m_title.append(comment);
- record.m_width = image->width();
- record.m_height = image->height();
+ record.m_width = displayImage.width();
+ record.m_height = displayImage.height();
// TODO: Need to make this more robust to handle different image formats
- record.m_data_size = image->width()*image->height()*4;
+ record.m_data_size = displayImage.width()*displayImage.height()*4;
record.m_data = malloc(record.m_data_size);
memcpy(record.m_data, ptr, record.m_data_size);
m_images.push_back(record);
m_display_image = --m_images.end();
- err = image->UnmapMemory();
+ err = displayImage.UnmapMemory();
ASSERT_VK_SUCCESS( err );
-
}
void VkTestFramework::RecordImages(vector<VkImageObj *> images)