tests: Add method to set image layout
diff --git a/tests/xglrenderframework.cpp b/tests/xglrenderframework.cpp
index 0c29355..5c02fdd 100644
--- a/tests/xglrenderframework.cpp
+++ b/tests/xglrenderframework.cpp
@@ -486,14 +486,34 @@
m_imageInfo.layout = image_layout;
}
+void XglImage::SetLayout(XGL_IMAGE_ASPECT aspect,
+ XGL_IMAGE_LAYOUT image_layout)
+{
+ XGL_RESULT err;
+ XglCommandBufferObj cmd_buf(m_device);
+
+ /* Build command buffer to set image layout in the driver */
+ err = cmd_buf.BeginCommandBuffer();
+ assert(!err);
+
+ SetLayout(&cmd_buf, aspect, image_layout);
+
+ err = cmd_buf.EndCommandBuffer();
+ assert(!err);
+
+ cmd_buf.QueueCommandBuffer();
+}
+
bool XglImage::IsCompatible(XGL_FLAGS usage, XGL_FLAGS features)
{
if ((usage & XGL_IMAGE_USAGE_SHADER_ACCESS_READ_BIT) &&
!(features & XGL_FORMAT_IMAGE_SHADER_READ_BIT))
return false;
+
if ((usage & XGL_IMAGE_USAGE_SHADER_ACCESS_WRITE_BIT) &&
!(features & XGL_FORMAT_IMAGE_SHADER_WRITE_BIT))
return false;
+
return true;
}
@@ -552,7 +572,11 @@
xgl_testing::Image::init(*m_device, imageCreateInfo);
- m_imageInfo.layout = XGL_IMAGE_LAYOUT_UNDEFINED;
+ if (usage & XGL_IMAGE_USAGE_SHADER_ACCESS_READ_BIT) {
+ SetLayout(XGL_IMAGE_ASPECT_COLOR, XGL_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
+ } else {
+ SetLayout(XGL_IMAGE_ASPECT_COLOR, XGL_IMAGE_LAYOUT_GENERAL);
+ }
}
XGL_RESULT XglImage::MapMemory(void** ptr)
@@ -613,17 +637,8 @@
err = cmd_buf.EndCommandBuffer();
assert(!err);
- /*
- * Tell driver about memory references made in this command buffer
- * Note: Since this command buffer only has a PipelineBarrier
- * command there really aren't any memory refs to worry about.
- */
- cmd_buf.mem_ref_mgr.EmitAddMemoryRefs(m_device->m_queue);
-
cmd_buf.QueueCommandBuffer();
- cmd_buf.mem_ref_mgr.EmitRemoveMemoryRefs(m_device->m_queue);
-
return XGL_SUCCESS;
}