aboutsummaryrefslogtreecommitdiff
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
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
-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);
}