diff options
| author | Leo Lam <leolino.lam@gmail.com> | 2017-10-11 11:31:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-10-11 11:31:16 +0200 |
| commit | 8163fa1acc11041becfa7befbe0b447501d7923e (patch) | |
| tree | 03f97866a4036838f9709ef4e2ae30dcf4406815 /Source/Core | |
| parent | 1c14881cc18b1b58d046507e5194e24bff513cc7 (diff) | |
| parent | 8f56219ea8112fb3b9d33cf5eaf639d42726d69d (diff) | |
Merge pull request #6100 from leoetlino/vulkan-shutdown
Vulkan: Fix crash when Core initialisation fails
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/main.cpp | 56 |
1 files changed, 15 insertions, 41 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/main.cpp b/Source/Core/VideoBackends/Vulkan/main.cpp index f507d6cf05..cb67ee8997 100644 --- a/Source/Core/VideoBackends/Vulkan/main.cpp +++ b/Source/Core/VideoBackends/Vulkan/main.cpp @@ -194,9 +194,7 @@ bool VideoBackend::Initialize(void* window_handle) if (!swap_chain) { PanicAlert("Failed to create Vulkan swap chain."); - g_vulkan_context.reset(); - ShutdownShared(); - UnloadVulkanLibrary(); + Shutdown(); return false; } } @@ -206,10 +204,7 @@ bool VideoBackend::Initialize(void* window_handle) if (!g_command_buffer_mgr->Initialize()) { PanicAlert("Failed to create Vulkan command buffers"); - g_command_buffer_mgr.reset(); - g_vulkan_context.reset(); - ShutdownShared(); - UnloadVulkanLibrary(); + Shutdown(); return false; } @@ -227,15 +222,7 @@ bool VideoBackend::Initialize(void* window_handle) !Renderer::GetInstance()->Initialize()) { PanicAlert("Failed to initialize Vulkan classes."); - g_renderer.reset(); - StateTracker::DestroyInstance(); - g_framebuffer_manager.reset(); - g_shader_cache.reset(); - g_object_cache.reset(); - g_command_buffer_mgr.reset(); - g_vulkan_context.reset(); - ShutdownShared(); - UnloadVulkanLibrary(); + Shutdown(); return false; } @@ -247,19 +234,7 @@ bool VideoBackend::Initialize(void* window_handle) !PerfQuery::GetInstance()->Initialize()) { PanicAlert("Failed to initialize Vulkan classes."); - g_perf_query.reset(); - g_texture_cache.reset(); - g_vertex_manager.reset(); - g_renderer.reset(); - StateTracker::DestroyInstance(); - g_framebuffer_manager.reset(); - g_shader_cache->Shutdown(); - g_shader_cache.reset(); - g_object_cache.reset(); - g_command_buffer_mgr.reset(); - g_vulkan_context.reset(); - ShutdownShared(); - UnloadVulkanLibrary(); + Shutdown(); return false; } @@ -287,34 +262,33 @@ void VideoBackend::Video_Prepare() void VideoBackend::Shutdown() { - g_command_buffer_mgr->WaitForGPUIdle(); + if (g_command_buffer_mgr) + g_command_buffer_mgr->WaitForGPUIdle(); + g_perf_query.reset(); + g_texture_cache.reset(); + g_vertex_manager.reset(); + g_renderer.reset(); + StateTracker::DestroyInstance(); + g_framebuffer_manager.reset(); + if (g_shader_cache) + g_shader_cache->Shutdown(); g_shader_cache.reset(); g_object_cache.reset(); g_command_buffer_mgr.reset(); g_vulkan_context.reset(); - - UnloadVulkanLibrary(); - ShutdownShared(); + UnloadVulkanLibrary(); } void VideoBackend::Video_Cleanup() { g_command_buffer_mgr->WaitForGPUIdle(); - g_shader_cache->Shutdown(); // Save all cached pipelines out to disk for next time. if (g_ActiveConfig.bShaderCache) g_shader_cache->SavePipelineCache(); - g_perf_query.reset(); - g_texture_cache.reset(); - g_vertex_manager.reset(); - g_framebuffer_manager.reset(); - StateTracker::DestroyInstance(); - g_renderer.reset(); - CleanupShared(); } } |
