aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobin Ehlis <tobine@google.com>2016-05-06 10:22:16 -0600
committerMark Lobodzinski <mark@lunarg.com>2016-05-06 11:10:43 -0600
commitbdd5bb68629c5ed07237f32ae4339b3cd828122f (patch)
tree562877cc545ef151546917f7d8da9bd89948f2d6
parent47680eb617fe5b9d71148b9e4c1169c822d00648 (diff)
downloadusermoji-bdd5bb68629c5ed07237f32ae4339b3cd828122f.tar.xz
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
-rw-r--r--layers/core_validation.cpp5
-rw-r--r--layers/core_validation_types.h14
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<std::mutex> 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