From bdd5bb68629c5ed07237f32ae4339b3cd828122f Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Fri, 6 May 2016 10:22:16 -0600 Subject: layers: GH494 Add constructors for IMAGE and BUFFER nodes Add proper constructors for IMAGE_NODE and BUFFER_NODE classes and correctly initialize all of their data members. Change-Id: I6c9d4a3ba6f3ef8e569de55793de9d6f7fd406b1 --- layers/core_validation.cpp | 5 ++--- layers/core_validation_types.h | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index ee4509a6..7a935022 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -5504,8 +5504,7 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(VkDevice device, c if (VK_SUCCESS == result) { std::lock_guard lock(global_lock); // TODO : This doesn't create deep copy of pQueueFamilyIndices so need to fix that if/when we want that data to be valid - dev_data->bufferMap[*pBuffer].createInfo = *pCreateInfo; - dev_data->bufferMap[*pBuffer].in_use.store(0); + dev_data->bufferMap.insert(std::make_pair(*pBuffer, BUFFER_NODE(pCreateInfo))); } return result; } @@ -5539,7 +5538,7 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(VkDevice device, co IMAGE_LAYOUT_NODE image_node; image_node.layout = pCreateInfo->initialLayout; image_node.format = pCreateInfo->format; - dev_data->imageMap[*pImage].createInfo = *pCreateInfo; + dev_data->imageMap.insert(std::make_pair(*pImage, IMAGE_NODE(pCreateInfo))); ImageSubresourcePair subpair = {*pImage, false, VkImageSubresource()}; dev_data->imageSubresourceMap[*pImage].push_back(subpair); dev_data->imageLayoutMap[subpair] = image_node; diff --git a/layers/core_validation_types.h b/layers/core_validation_types.h index f7c17d1f..43f7de62 100644 --- a/layers/core_validation_types.h +++ b/layers/core_validation_types.h @@ -60,6 +60,9 @@ class BUFFER_NODE : public BASE_NODE { using BASE_NODE::in_use; VkDeviceMemory mem; VkBufferCreateInfo createInfo; + BUFFER_NODE() : mem(VK_NULL_HANDLE), createInfo{} { in_use.store(0); }; + BUFFER_NODE(const VkBufferCreateInfo *pCreateInfo) : mem(VK_NULL_HANDLE), createInfo(*pCreateInfo) { in_use.store(0); }; + BUFFER_NODE(const BUFFER_NODE &rh_obj) : mem(rh_obj.mem), createInfo(rh_obj.createInfo) { in_use.store(rh_obj.in_use.load()); }; }; typedef struct _SAMPLER_NODE { @@ -71,11 +74,22 @@ typedef struct _SAMPLER_NODE { class IMAGE_NODE : public BASE_NODE { public: + using BASE_NODE::in_use; VkImageCreateInfo createInfo; VkDeviceMemory mem; bool valid; // If this is a swapchain image backing memory track valid here as it doesn't have DEVICE_MEM_INFO VkDeviceSize memOffset; VkDeviceSize memSize; + IMAGE_NODE() : createInfo{}, mem(VK_NULL_HANDLE), valid(false), memOffset(0), memSize(0) { in_use.store(0); }; + IMAGE_NODE(const VkImageCreateInfo *pCreateInfo) + : createInfo(*pCreateInfo), mem(VK_NULL_HANDLE), valid(false), memOffset(0), memSize(0) { + in_use.store(0); + }; + IMAGE_NODE(const IMAGE_NODE &rh_obj) + : createInfo(rh_obj.createInfo), mem(rh_obj.mem), valid(rh_obj.valid), memOffset(rh_obj.memOffset), + memSize(rh_obj.memSize) { + in_use.store(rh_obj.in_use.load()); + }; }; // Simple struct to hold handle and type of object so they can be uniquely identified and looked up in appropriate map -- cgit v1.2.3