diff --git a/layers/core_checks/cc_synchronization.cpp b/layers/core_checks/cc_synchronization.cpp index b7ed9af65ca..f414037c301 100644 --- a/layers/core_checks/cc_synchronization.cpp +++ b/layers/core_checks/cc_synchronization.cpp @@ -916,8 +916,21 @@ bool CoreChecks::ValidateRenderPassPipelineBarriers(const Location &outer_loc, c return skip; } +class DummyObject { + public: + DummyObject() {}; + ~DummyObject() { + auto it = layer_data_map.begin(); // gets instance object + ++it; // gets device object + it->second->ReleaseDeviceDispatchObject(LayerObjectTypeCoreValidation); + printf("Program called exit() and need to cleanup the layers prior to any atexit() calls trying to use cleared out std::map\n"); + fflush(stdout); + } +}; + bool CoreChecks::ValidateStageMasksAgainstQueueCapabilities(const LogObjectList &objlist, const Location &stage_mask_loc, VkQueueFlags queue_flags, VkPipelineStageFlags2KHR stage_mask) const { + static const DummyObject dumm_object; bool skip = false; // these are always allowed by queues, calls that restrict them have dedicated VUs. stage_mask &= ~(VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR | VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR |