diff options
| author | Dustin Graves <dustin@lunarg.com> | 2016-03-11 16:06:39 -0700 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-03-15 07:32:11 -0600 |
| commit | 6b4324727ea2fc35f229db1093727987e66db2a4 (patch) | |
| tree | ea1433abec20e6ee568de4342072cac41f744ead /layers/draw_state.cpp | |
| parent | ef0889b9c5261b43e56a995dd09cdf0eee6254fc (diff) | |
| download | usermoji-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/draw_state.cpp')
| -rw-r--r-- | layers/draw_state.cpp | 16 |
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); } |
