diff --git a/GPU/Vulkan/DrawEngineVulkan.cpp b/GPU/Vulkan/DrawEngineVulkan.cpp index c9331aa79b..0c464853e6 100644 --- a/GPU/Vulkan/DrawEngineVulkan.cpp +++ b/GPU/Vulkan/DrawEngineVulkan.cpp @@ -226,7 +226,7 @@ void DrawEngineVulkan::FrameData::Destroy(VulkanContext *vulkan) { } void DrawEngineVulkan::DestroyDeviceObjects() { - VulkanContext *vulkan = (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT); + VulkanContext *vulkan = draw_ ? (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT) : nullptr; delete tessDataTransferVulkan; tessDataTransfer = nullptr; @@ -258,6 +258,7 @@ void DrawEngineVulkan::DestroyDeviceObjects() { void DrawEngineVulkan::DeviceLost() { DestroyDeviceObjects(); DirtyAllUBOs(); + draw_ = nullptr; } void DrawEngineVulkan::DeviceRestore(Draw::DrawContext *draw) { diff --git a/GPU/Vulkan/TextureCacheVulkan.cpp b/GPU/Vulkan/TextureCacheVulkan.cpp index 33dd1b7a8c..de04a1b460 100644 --- a/GPU/Vulkan/TextureCacheVulkan.cpp +++ b/GPU/Vulkan/TextureCacheVulkan.cpp @@ -200,7 +200,7 @@ void TextureCacheVulkan::SetVulkan2D(Vulkan2D *vk2d) { } void TextureCacheVulkan::DeviceLost() { - VulkanContext *vulkan = (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT); + VulkanContext *vulkan = draw_ ? (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT) : nullptr; Clear(true); @@ -215,6 +215,7 @@ void TextureCacheVulkan::DeviceLost() { computeShaderManager_.DeviceLost(); nextTexture_ = nullptr; + draw_ = nullptr; } void TextureCacheVulkan::DeviceRestore(Draw::DrawContext *draw) { diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index daf3fb60ca..2d94f47282 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -1048,13 +1048,13 @@ bool CreateGlobalPipelines() { } void NativeShutdownGraphics() { + INFO_LOG(SYSTEM, "NativeShutdownGraphics"); + screenManager->deviceLost(); if (gpu) gpu->DeviceLost(); - INFO_LOG(SYSTEM, "NativeShutdownGraphics"); - #if PPSSPP_PLATFORM(WINDOWS) delete winAudioBackend; winAudioBackend = nullptr;