aboutsummaryrefslogtreecommitdiff
path: root/layers/draw_state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/draw_state.cpp')
-rw-r--r--layers/draw_state.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index bae914ce..6dca5c5b 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -3889,6 +3889,9 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, cons
deleteLayouts(dev_data);
dev_data->imageViewMap.clear();
dev_data->imageMap.clear();
+ dev_data->imageSubresourceMap.clear();
+ dev_data->imageLayoutMap.clear();
+ dev_data->memImageMap.clear();
dev_data->bufferViewMap.clear();
dev_data->bufferMap.clear();
loader_platform_thread_unlock_mutex(&globalLock);
@@ -4610,7 +4613,18 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImage(VkDevice device, VkIma
layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
dev_data->device_dispatch_table->DestroyImage(device, image, pAllocator);
loader_platform_thread_lock_mutex(&globalLock);
- dev_data->imageMap.erase(image);
+ const auto& entry = dev_data->imageMap.find(image);
+ if (entry != dev_data->imageMap.end()) {
+ dev_data->memImageMap.erase(entry->second.mem);
+ dev_data->imageMap.erase(entry);
+ }
+ const auto& subEntry = dev_data->imageSubresourceMap.find(image);
+ if (subEntry != dev_data->imageSubresourceMap.end()) {
+ for (const auto& pair : subEntry->second) {
+ dev_data->imageLayoutMap.erase(pair);
+ }
+ dev_data->imageSubresourceMap.erase(subEntry);
+ }
loader_platform_thread_unlock_mutex(&globalLock);
}