Add missing barrier before host access in draw tests

There is a missing barrier between in utilities for reading images,
between device write access and host read access.

Components: Vulkan

VK-GL-CTS Issue: 2401

Affects: dEQP-VK.draw.*

Change-Id: I7a8ec444b790c4afbf80f798222912398dfb818e
diff --git a/external/vulkancts/modules/vulkan/draw/vktDrawImageObjectUtil.cpp b/external/vulkancts/modules/vulkan/draw/vktDrawImageObjectUtil.cpp
index 66a1d5d..4cd1a11 100644
--- a/external/vulkancts/modules/vulkan/draw/vktDrawImageObjectUtil.cpp
+++ b/external/vulkancts/modules/vulkan/draw/vktDrawImageObjectUtil.cpp
@@ -348,6 +348,24 @@
 		};
 
 		m_vk.cmdCopyImageToBuffer(*copyCmdBuffer, object(), layout, stagingResource->object(), 1, &region);
+
+		// pipeline barrier for accessing the staging buffer from HOST
+		{
+			const vk::VkBufferMemoryBarrier memoryBarrier =
+			{
+				vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
+				DE_NULL,
+				vk::VK_ACCESS_TRANSFER_WRITE_BIT,
+				vk::VK_ACCESS_HOST_READ_BIT,
+				VK_QUEUE_FAMILY_IGNORED,
+				VK_QUEUE_FAMILY_IGNORED,
+				stagingResource->object(),
+				0u,
+				VK_WHOLE_SIZE
+			};
+			m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0u, 0u, DE_NULL, 1u, &memoryBarrier, 0u, DE_NULL);
+		}
+
 		endCommandBuffer(m_vk, *copyCmdBuffer);
 
 		submitCommandsAndWait(m_vk, m_device, queue, copyCmdBuffer.get());
@@ -437,6 +455,31 @@
 		vk::VkImageCopy region = { { (vk::VkImageAspectFlags)aspect, mipLevel, arrayElement, 1}, offset, { (vk::VkImageAspectFlags)aspect, 0, 0, 1}, zeroOffset, {(deUint32)width, (deUint32)height, (deUint32)depth} };
 
 		m_vk.cmdCopyImage(*copyCmdBuffer, object(), layout, stagingResource->object(), vk::VK_IMAGE_LAYOUT_GENERAL, 1, &region);
+
+		// pipeline barrier for accessing the staging image from HOST
+		{
+			const vk::VkImageMemoryBarrier memoryBarrier =
+			{
+				vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
+				DE_NULL,
+				vk::VK_ACCESS_TRANSFER_WRITE_BIT,
+				vk::VK_ACCESS_HOST_READ_BIT,
+				vk::VK_IMAGE_LAYOUT_GENERAL,
+				vk::VK_IMAGE_LAYOUT_GENERAL,
+				VK_QUEUE_FAMILY_IGNORED,
+				VK_QUEUE_FAMILY_IGNORED,
+				stagingResource->object(),
+				{
+					static_cast<vk::VkImageAspectFlags>(aspect),
+					0u,
+					1u,
+					0u,
+					1u
+				}
+			};
+			m_vk.cmdPipelineBarrier(*copyCmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_HOST_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &memoryBarrier);
+		}
+
 		endCommandBuffer(m_vk, *copyCmdBuffer);
 
 		submitCommandsAndWait(m_vk, m_device, queue, copyCmdBuffer.get());