aboutsummaryrefslogtreecommitdiff
path: root/layers
diff options
context:
space:
mode:
authorDustin Graves <dustin@lunarg.com>2016-03-11 16:06:39 -0700
committerTobin Ehlis <tobine@google.com>2016-03-15 07:32:11 -0600
commit6b4324727ea2fc35f229db1093727987e66db2a4 (patch)
treeea1433abec20e6ee568de4342072cac41f744ead /layers
parentef0889b9c5261b43e56a995dd09cdf0eee6254fc (diff)
downloadusermoji-6b4324727ea2fc35f229db1093727987e66db2a4.tar.xz
layers: draw state image/layout cleanup
Remove tracked device memory, subresource, and layout data associated with an image when that image is destroyed. Eliminates spurious draw state messages that report invalid layout issues when the destroyed image's handle is recylced and the new image state is validated with the old image's data. Change-Id: Ia956a3f7c60a34e6357f4d0d4d9dfe760910e97c
Diffstat (limited to 'layers')
-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);
}