Fix buffer RAW hazards in MultiQueue synchronization tests

The MultiQueue tests emit barriers between command buffers for two reasons:

1. To express the data dependencies between different pipeline stages.
2. To transfer ownership of the resource between queue families.

The exclusive sharing mode tests need both of these barriers, while the
concurrent mode tests only need to describe the data dependency.

Previously, a barrier was only emitted for the exclusive tests, causing
the concurrent tests to not have a barrier expressing the data dependencies
between the pipeline stages. Now the data dependencies are described for
both the exlusive and concurrent tests, while the ownership transfer is
only performed for exclusive tests.

Affects: dEQP-VK.synchronization.op.multi_queue.*.write_*_read_*.buffer_*

Components: Vulkan
VK-GL-CTS issue: 1650

Change-Id: Ic3bc83a7dcab8686754aea5267afeb10090038d0
(cherry picked from commit 93dc8a343c7ea67a2c8ffb694b45ff44703fbe6f)
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp
index 5e13fca..8f97897 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp
@@ -252,22 +252,17 @@
 					0u, (const VkBufferMemoryBarrier*)DE_NULL, 1u, &barrier);
 		}
 	}
-	else if ((resource.getType() == RESOURCE_TYPE_BUFFER || isIndirectBuffer(resource.getType()))	&&
-			 writeFamily != readFamily																&&
-			 VK_SHARING_MODE_EXCLUSIVE == sharingMode)
+	else if (resource.getType() == RESOURCE_TYPE_BUFFER || isIndirectBuffer(resource.getType()))
 	{
-		const VkBufferMemoryBarrier barrier =
+		VkBufferMemoryBarrier barrier = makeBufferMemoryBarrier(secondQueue ? 0u : writeSync.accessMask, !secondQueue ? 0u : readSync.accessMask,
+			resource.getBuffer().handle, resource.getBuffer().offset, resource.getBuffer().size);
+
+		if (writeFamily != readFamily && VK_SHARING_MODE_EXCLUSIVE == sharingMode)
 		{
-			VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,	// VkStructureType	sType;
-			DE_NULL,									// const void*		pNext;
-			secondQueue ? 0u : writeSync.accessMask ,	// VkAccessFlags	srcAccessMask;
-			!secondQueue ? 0u : readSync.accessMask,	// VkAccessFlags	dstAccessMask;
-			writeFamily,								// deUint32			srcQueueFamilyIndex;
-			readFamily,									// deUint32			destQueueFamilyIndex;
-			resource.getBuffer().handle,				// VkBuffer			buffer;
-			resource.getBuffer().offset,				// VkDeviceSize		offset;
-			resource.getBuffer().size,					// VkDeviceSize		size;
-		};
+			barrier.srcQueueFamilyIndex = writeFamily;
+			barrier.dstQueueFamilyIndex = readFamily;
+		}
+
 		vk.cmdPipelineBarrier(cmdBuffer, secondQueue ? VkPipelineStageFlags(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT) : writeSync.stageMask, !secondQueue ? VkPipelineStageFlags(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT) : readSync.stageMask, (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 1u, (const VkBufferMemoryBarrier*)&barrier, 0u, (const VkImageMemoryBarrier *)DE_NULL);
 	}
 }