layers: MR171, Validate pool cannot be reset when buffer in use in draw_state
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index 46b6d8f..e3b9e21 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -3665,6 +3665,23 @@
layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
+ bool skip_call = false;
+ loader_platform_thread_lock_mutex(&globalLock);
+ auto pool_data = dev_data->commandPoolMap.find(commandPool);
+ if (pool_data != dev_data->commandPoolMap.end()) {
+ for (auto cmdBuffer : pool_data->second.commandBuffers) {
+ if (dev_data->inFlightCmdBuffers.count(cmdBuffer)) {
+ skip_call |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, reinterpret_cast<uint64_t>(commandPool),
+ __LINE__, DRAWSTATE_OBJECT_INUSE, "DS", "Cannot reset command pool %" PRIx64 " when allocated command buffer %" PRIx64 " is in use.",
+ reinterpret_cast<uint64_t>(commandPool), reinterpret_cast<uint64_t>(cmdBuffer));
+ }
+ }
+ }
+ loader_platform_thread_unlock_mutex(&globalLock);
+
+ if (skip_call)
+ return VK_ERROR_VALIDATION_FAILED_EXT;
+
result = dev_data->device_dispatch_table->ResetCommandPool(device, commandPool, flags);
// Reset all of the CBs allocated from this pool
if (VK_SUCCESS == result) {