Fix creating Buffer objects in VK_SHARING_MODE_EXCLUSIVE mode

queueFamilyIndices are only valid in VK_SHARING_MODE_CONCURRENT mode,
so Buffers were copying garbage in VK_SHARING_MODE_EXCLUSIVE mode.
This cl allows dEQP-VK.robustness.* tests to run and fail rather than
immediately crash at Buffer construction time.

Bug b/118383648
Tests: dEQP-VK.robustness.*

Change-Id: I5b82348317e12302359e082088ed5d10f6367e0e
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28311
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Vulkan/VkBuffer.cpp b/src/Vulkan/VkBuffer.cpp
index 7679553..9691fd3 100644
--- a/src/Vulkan/VkBuffer.cpp
+++ b/src/Vulkan/VkBuffer.cpp
@@ -25,11 +25,14 @@
 
 Buffer::Buffer(const VkBufferCreateInfo* pCreateInfo, void* mem) :
 	flags(pCreateInfo->flags), size(pCreateInfo->size), usage(pCreateInfo->usage),
-	sharingMode(pCreateInfo->sharingMode), queueFamilyIndexCount(pCreateInfo->queueFamilyIndexCount),
-	queueFamilyIndices(reinterpret_cast<uint32_t*>(mem))
+	sharingMode(pCreateInfo->sharingMode)
 {
-	size_t queueFamilyIndicesSize = sizeof(uint32_t) * queueFamilyIndexCount;
-	memcpy(queueFamilyIndices, pCreateInfo->pQueueFamilyIndices, queueFamilyIndicesSize);
+	if(pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT)
+	{
+		queueFamilyIndexCount = pCreateInfo->queueFamilyIndexCount;
+		queueFamilyIndices = reinterpret_cast<uint32_t*>(mem);
+		memcpy(queueFamilyIndices, pCreateInfo->pQueueFamilyIndices, sizeof(uint32_t) * queueFamilyIndexCount);
+	}
 }
 
 void Buffer::destroy(const VkAllocationCallbacks* pAllocator)
@@ -39,7 +42,7 @@
 
 size_t Buffer::ComputeRequiredAllocationSize(const VkBufferCreateInfo* pCreateInfo)
 {
-	return sizeof(uint32_t) * pCreateInfo->queueFamilyIndexCount;
+	return (pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT) ? sizeof(uint32_t) * pCreateInfo->queueFamilyIndexCount : 0;
 }
 
 const VkMemoryRequirements Buffer::getMemoryRequirements() const