diff --git a/src/core/gpu.cpp b/src/core/gpu.cpp index d8f84fa3d..756689c72 100644 --- a/src/core/gpu.cpp +++ b/src/core/gpu.cpp @@ -666,7 +666,7 @@ float GPU::ComputeDisplayAspectRatio() const if (g_settings.display_aspect_ratio == DisplayAspectRatio::MatchWindow) { const WindowInfo& wi = GPUThread::GetRenderWindowInfo(); - if (!wi.IsSurfaceless()) + if (!wi.IsSurfaceless() && wi.surface_width > 0 && wi.surface_height > 0) ar = static_cast(wi.surface_width) / static_cast(wi.surface_height); } else if (g_settings.display_aspect_ratio == DisplayAspectRatio::Custom) diff --git a/src/core/gpu_thread.cpp b/src/core/gpu_thread.cpp index 60767546b..36c701cbd 100644 --- a/src/core/gpu_thread.cpp +++ b/src/core/gpu_thread.cpp @@ -1270,8 +1270,9 @@ void GPUThread::DisplayWindowResizedOnThread() if (!swap_chain) return; - const float f_width = static_cast(swap_chain->GetWidth()); - const float f_height = static_cast(swap_chain->GetHeight()); + // our imgui stuff can't cope with 0x0/hidden windows + const float f_width = static_cast(std::max(swap_chain->GetWidth(), 1u)); + const float f_height = static_cast(std::max(swap_chain->GetHeight(), 1u)); ImGuiManager::WindowResized(f_width, f_height); InputManager::SetDisplayWindowSize(f_width, f_height); diff --git a/src/util/vulkan_swap_chain.cpp b/src/util/vulkan_swap_chain.cpp index 55944786e..572f9156b 100644 --- a/src/util/vulkan_swap_chain.cpp +++ b/src/util/vulkan_swap_chain.cpp @@ -540,8 +540,7 @@ bool VulkanSwapChain::CreateSwapChain(VulkanDevice& dev, Error* error) if (old_swap_chain != VK_NULL_HANDLE) vkDestroySwapchainKHR(vkdev, old_swap_chain, nullptr); - if (window_size.width == 0 || window_size.width > std::numeric_limits::max() || window_size.height == 0 || - window_size.height > std::numeric_limits::max()) + if (window_size.width > std::numeric_limits::max() || window_size.height > std::numeric_limits::max()) { Error::SetStringFmt(error, "Invalid swap chain dimensions: {}x{}", window_size.width, window_size.height); return false;