diff options
| author | Stenzek <stenzek@gmail.com> | 2018-10-03 23:03:13 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2018-10-20 21:11:34 +1000 |
| commit | a3961750a7174be7402fc492367f017d845b8e1f (patch) | |
| tree | 45f983ab1ef7b87562448e5d93fa97e13925ebdc /Source/Core/VideoBackends/Vulkan/Renderer.cpp | |
| parent | 134d967be2dd4ba9531abb8ba8494c3ac423ca72 (diff) | |
Drop Host_GetRenderSurface and pass display to backend
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/Renderer.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/Renderer.cpp | 45 |
1 files changed, 10 insertions, 35 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/Renderer.cpp b/Source/Core/VideoBackends/Vulkan/Renderer.cpp index 38d7bd0992..371b9033a8 100644 --- a/Source/Core/VideoBackends/Vulkan/Renderer.cpp +++ b/Source/Core/VideoBackends/Vulkan/Renderer.cpp @@ -70,6 +70,11 @@ Renderer* Renderer::GetInstance() return static_cast<Renderer*>(g_renderer.get()); } +bool Renderer::IsHeadless() const +{ + return m_swap_chain == nullptr; +} + bool Renderer::Initialize() { BindEFBToStateTracker(); @@ -860,12 +865,9 @@ void Renderer::BlitScreen(VkRenderPass render_pass, const TargetRectangle& dst_r void Renderer::CheckForSurfaceChange() { - if (!m_surface_changed.TestAndClear()) + if (!m_surface_changed.TestAndClear() || !m_swap_chain) return; - m_surface_handle = m_new_surface_handle; - m_new_surface_handle = nullptr; - // Submit the current draws up until rendering the XFB. g_command_buffer_mgr->ExecuteCommandBuffer(false, false); g_command_buffer_mgr->WaitForGPUIdle(); @@ -873,37 +875,10 @@ void Renderer::CheckForSurfaceChange() // Clear the present failed flag, since we don't want to resize after recreating. g_command_buffer_mgr->CheckLastPresentFail(); - // Did we previously have a swap chain? - if (m_swap_chain) - { - if (!m_surface_handle) - { - // If there is no surface now, destroy the swap chain. - m_swap_chain.reset(); - } - else - { - // Recreate the surface. If this fails we're in trouble. - if (!m_swap_chain->RecreateSurface(m_surface_handle)) - PanicAlert("Failed to recreate Vulkan surface. Cannot continue."); - } - } - else - { - // Previously had no swap chain. So create one. - VkSurfaceKHR surface = - SwapChain::CreateVulkanSurface(g_vulkan_context->GetVulkanInstance(), m_surface_handle); - if (surface != VK_NULL_HANDLE) - { - m_swap_chain = SwapChain::Create(m_surface_handle, surface, g_ActiveConfig.IsVSync()); - if (!m_swap_chain) - PanicAlert("Failed to create swap chain."); - } - else - { - PanicAlert("Failed to create surface."); - } - } + // Recreate the surface. If this fails we're in trouble. + if (!m_swap_chain->RecreateSurface(m_new_surface_handle)) + PanicAlert("Failed to recreate Vulkan surface. Cannot continue."); + m_new_surface_handle = nullptr; // Handle case where the dimensions are now different. OnSwapChainResized(); |
