aboutsummaryrefslogtreecommitdiff
path: root/layers/unique_objects.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-03-03 10:28:21 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-03-07 14:59:59 -0700
commit5700546b1a53e412a128f750a858438552c2f471 (patch)
treebdfaf053c96c6b2f95a99c922286e1d3780d93b6 /layers/unique_objects.cpp
parent68260b5ae0ff207ac128b48b96ae5b883fc2ffd3 (diff)
downloadusermoji-5700546b1a53e412a128f750a858438552c2f471.tar.xz
layers: Create desc_update_template map for new objs
Store unique_objects DescriptorUpdateTemplate data in a map for parsing UpdateTempate buffers. Change-Id: Iab0d95a1aa2f309a3d33c8859b16543f98ca549c
Diffstat (limited to 'layers/unique_objects.cpp')
-rw-r--r--layers/unique_objects.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp
index cf7891ab..eb5680c6 100644
--- a/layers/unique_objects.cpp
+++ b/layers/unique_objects.cpp
@@ -628,12 +628,15 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(VkDevice device
}
VkResult result = dev_data->device_dispatch_table->CreateDescriptorUpdateTemplateKHR(
device, (const VkDescriptorUpdateTemplateCreateInfoKHR *)local_pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
- if (local_pCreateInfo) delete local_pCreateInfo;
if (VK_SUCCESS == result) {
std::lock_guard<std::mutex> lock(global_lock);
uint64_t unique_id = global_unique_id++;
dev_data->unique_id_mapping[unique_id] = reinterpret_cast<uint64_t &>(*pDescriptorUpdateTemplate);
*pDescriptorUpdateTemplate = reinterpret_cast<VkDescriptorUpdateTemplateKHR &>(unique_id);
+
+ // Shadow template createInfo for later updates
+ std::unique_ptr<TEMPLATE_STATE> template_state(new TEMPLATE_STATE(*pDescriptorUpdateTemplate, local_pCreateInfo));
+ dev_data->desc_template_map[unique_id] = std::move(template_state);
}
return result;
}
@@ -644,6 +647,7 @@ VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(VkDevice device,
layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
std::unique_lock<std::mutex> lock(global_lock);
uint64_t descriptorUpdateTemplate_id = reinterpret_cast<uint64_t &>(descriptorUpdateTemplate);
+ dev_data->desc_template_map.erase(descriptorUpdateTemplate_id);
descriptorUpdateTemplate = (VkDescriptorUpdateTemplateKHR)dev_data->unique_id_mapping[descriptorUpdateTemplate_id];
dev_data->unique_id_mapping.erase(descriptorUpdateTemplate_id);
lock.unlock();