diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2022-11-07 05:05:37 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-07 05:05:37 +0100 |
| commit | ee7887b7511dd3cdb27fd8517d42088cf26cdade (patch) | |
| tree | cff8eaf076c6f07a006f79a582ca5a74cf977712 /Source/Core/VideoCommon/RenderBase.cpp | |
| parent | c931529e7aa5926b8a21a193bf8f80244b3ae888 (diff) | |
| parent | a98df1894705195f7051ef1dfccafffe135149c5 (diff) | |
Merge pull request #11258 from AdmiralCurtiss/imgui-crash-v2
ImGui render context race condition fix: Lock context during Init/Shutdown.
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/RenderBase.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index f787ab7dab..c2fdcbaa3d 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -1009,6 +1009,8 @@ void Renderer::RecordVideoMemory() bool Renderer::InitializeImGui() { + std::unique_lock<std::mutex> imgui_lock(m_imgui_mutex); + if (!IMGUI_CHECKVERSION()) { PanicAlertFmt("ImGui version check failed"); @@ -1068,7 +1070,7 @@ bool Renderer::InitializeImGui() return false; m_imgui_last_frame_time = Common::Timer::NowUs(); - BeginImGuiFrame(); + BeginImGuiFrameUnlocked(); // lock is already held return true; } @@ -1129,6 +1131,8 @@ bool Renderer::RecompileImGuiPipeline() void Renderer::ShutdownImGui() { + std::unique_lock<std::mutex> imgui_lock(m_imgui_mutex); + ImGui::EndFrame(); ImGui::DestroyContext(); m_imgui_pipeline.reset(); @@ -1139,7 +1143,11 @@ void Renderer::ShutdownImGui() void Renderer::BeginImGuiFrame() { std::unique_lock<std::mutex> imgui_lock(m_imgui_mutex); + BeginImGuiFrameUnlocked(); +} +void Renderer::BeginImGuiFrameUnlocked() +{ const u64 current_time_us = Common::Timer::NowUs(); const u64 time_diff_us = current_time_us - m_imgui_last_frame_time; const float time_diff_secs = static_cast<float>(time_diff_us / 1000000.0); |
