tests: add CopyMemoryHazard to XglBlitTest
Copying A to B, then copying B to C. A and C should be the same.
diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index d5b6793..8347f88 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -305,6 +305,59 @@
xglFreeMemory(dst);
}
+TEST_F(XglBlitTest, CopyMemoryHazard)
+{
+ XGL_GPU_MEMORY mem[3];
+ XGL_MEMORY_COPY region;
+ XGL_MEMORY_STATE_TRANSITION transition;
+ XGL_RESULT err;
+ void *data;
+ XGL_UINT i;
+
+ ClearMemoryRefs();
+
+ for (i = 0; i < 3; i++) {
+ mem[i] = AddMemory(256, false);
+ ASSERT_NE((XGL_GPU_MEMORY) XGL_NULL_HANDLE, mem[i]);
+
+ err = xglMapMemory(mem[i], 0, &data);
+ ASSERT_XGL_SUCCESS(err);
+ ((char *) data)[0] = 5 * (i + 1);
+ xglUnmapMemory(mem[i]);
+ }
+
+ region.srcOffset = 0;
+ region.destOffset = 0;
+ region.copySize = 1;
+
+ BeginCmd();
+
+ xglCmdCopyMemory(m_cmd, mem[0], mem[1], 1, ®ion);
+
+ memset(&transition, 0, sizeof(transition));
+ transition.sType = XGL_STRUCTURE_TYPE_MEMORY_STATE_TRANSITION;
+ transition.mem = mem[1];
+ transition.oldState = XGL_MEMORY_STATE_DATA_TRANSFER;
+ transition.newState = XGL_MEMORY_STATE_DATA_TRANSFER;
+ transition.offset = region.destOffset;
+ transition.regionSize = region.copySize;
+ xglCmdPrepareMemoryRegions(m_cmd, 1, &transition);
+
+ xglCmdCopyMemory(m_cmd, mem[1], mem[2], 1, ®ion);
+
+ EndAndSubmitCmd();
+
+ err = xglMapMemory(mem[2], 0, &data);
+ ASSERT_XGL_SUCCESS(err);
+
+ ASSERT_EQ(5, ((const unsigned char *) data)[0]);
+
+ xglUnmapMemory(mem[2]);
+
+ for (i = 0; i < 3; i++)
+ xglFreeMemory(mem[i]);
+}
+
TEST_F(XglBlitTest, ClearColorImageBasic)
{
const XGL_FLOAT color[4] = { 0.0f, 1.0f, 0.0f, 1.0f };