Commit 3c5cb9cf by Alexis Hetu Committed by Alexis Hétu

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: 's avatarNicolas Capens <nicolascapens@google.com> Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent 3d497385
...@@ -25,11 +25,14 @@ const size_t Buffer::DataOffset = offsetof(Buffer, memory); ...@@ -25,11 +25,14 @@ const size_t Buffer::DataOffset = offsetof(Buffer, memory);
Buffer::Buffer(const VkBufferCreateInfo* pCreateInfo, void* mem) : Buffer::Buffer(const VkBufferCreateInfo* pCreateInfo, void* mem) :
flags(pCreateInfo->flags), size(pCreateInfo->size), usage(pCreateInfo->usage), flags(pCreateInfo->flags), size(pCreateInfo->size), usage(pCreateInfo->usage),
sharingMode(pCreateInfo->sharingMode), queueFamilyIndexCount(pCreateInfo->queueFamilyIndexCount), sharingMode(pCreateInfo->sharingMode)
queueFamilyIndices(reinterpret_cast<uint32_t*>(mem))
{ {
size_t queueFamilyIndicesSize = sizeof(uint32_t) * queueFamilyIndexCount; if(pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT)
memcpy(queueFamilyIndices, pCreateInfo->pQueueFamilyIndices, queueFamilyIndicesSize); {
queueFamilyIndexCount = pCreateInfo->queueFamilyIndexCount;
queueFamilyIndices = reinterpret_cast<uint32_t*>(mem);
memcpy(queueFamilyIndices, pCreateInfo->pQueueFamilyIndices, sizeof(uint32_t) * queueFamilyIndexCount);
}
} }
void Buffer::destroy(const VkAllocationCallbacks* pAllocator) void Buffer::destroy(const VkAllocationCallbacks* pAllocator)
...@@ -39,7 +42,7 @@ void Buffer::destroy(const VkAllocationCallbacks* pAllocator) ...@@ -39,7 +42,7 @@ void Buffer::destroy(const VkAllocationCallbacks* pAllocator)
size_t Buffer::ComputeRequiredAllocationSize(const VkBufferCreateInfo* pCreateInfo) 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 const VkMemoryRequirements Buffer::getMemoryRequirements() const
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment