From 85e85ed4999c43107f117fa8ff832d40c0137a7a Mon Sep 17 00:00:00 2001 From: Tony Barbour Date: Wed, 26 Apr 2017 13:59:35 -0600 Subject: layers: Guard checks of pQueueFamilyIndices Only examine pQueueFamilyIndices if sharingMode is VK_SHARING_MODE_CONCURRENT This fixes a crash in CTS when sharing mode was VK_SHARING_MODE_EXCLUSIVE and queueFamilyIndexCount was VK_QUEUE_FAMILY_IGNORED Change-Id: I72b1f140e8949e711723e98bdaead15655ab07a5 --- layers/core_validation_types.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/layers/core_validation_types.h b/layers/core_validation_types.h index 48d92b44..16175c74 100644 --- a/layers/core_validation_types.h +++ b/layers/core_validation_types.h @@ -209,7 +209,7 @@ class BUFFER_STATE : public BINDABLE { VkBuffer buffer; VkBufferCreateInfo createInfo; BUFFER_STATE(VkBuffer buff, const VkBufferCreateInfo *pCreateInfo) : buffer(buff), createInfo(*pCreateInfo) { - if (createInfo.queueFamilyIndexCount > 0) { + if ((createInfo.sharingMode == VK_SHARING_MODE_CONCURRENT) && (createInfo.queueFamilyIndexCount > 0)) { uint32_t *pQueueFamilyIndices = new uint32_t[createInfo.queueFamilyIndexCount]; for (uint32_t i = 0; i < createInfo.queueFamilyIndexCount; i++) { pQueueFamilyIndices[i] = pCreateInfo->pQueueFamilyIndices[i]; @@ -225,7 +225,7 @@ class BUFFER_STATE : public BINDABLE { BUFFER_STATE(BUFFER_STATE const &rh_obj) = delete; ~BUFFER_STATE() { - if (createInfo.queueFamilyIndexCount > 0) { + if ((createInfo.sharingMode == VK_SHARING_MODE_CONCURRENT) && (createInfo.queueFamilyIndexCount > 0)) { delete createInfo.pQueueFamilyIndices; createInfo.pQueueFamilyIndices = nullptr; } @@ -255,7 +255,7 @@ class IMAGE_STATE : public BINDABLE { bool acquired; // If this is a swapchain image, has it been acquired by the app. IMAGE_STATE(VkImage img, const VkImageCreateInfo *pCreateInfo) : image(img), createInfo(*pCreateInfo), valid(false), acquired(false) { - if (createInfo.queueFamilyIndexCount > 0) { + if ((createInfo.sharingMode == VK_SHARING_MODE_CONCURRENT) && (createInfo.queueFamilyIndexCount > 0)) { uint32_t *pQueueFamilyIndices = new uint32_t[createInfo.queueFamilyIndexCount]; for (uint32_t i = 0; i < createInfo.queueFamilyIndexCount; i++) { pQueueFamilyIndices[i] = pCreateInfo->pQueueFamilyIndices[i]; @@ -271,7 +271,7 @@ class IMAGE_STATE : public BINDABLE { IMAGE_STATE(IMAGE_STATE const &rh_obj) = delete; ~IMAGE_STATE() { - if (createInfo.queueFamilyIndexCount > 0) { + if ((createInfo.sharingMode == VK_SHARING_MODE_CONCURRENT) && (createInfo.queueFamilyIndexCount > 0)) { delete createInfo.pQueueFamilyIndices; createInfo.pQueueFamilyIndices = nullptr; } -- cgit v1.2.3