summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Vulkan/Renderer.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2018-10-03 23:03:13 +1000
committerStenzek <stenzek@gmail.com>2018-10-20 21:11:34 +1000
commita3961750a7174be7402fc492367f017d845b8e1f (patch)
tree45f983ab1ef7b87562448e5d93fa97e13925ebdc /Source/Core/VideoBackends/Vulkan/Renderer.cpp
parent134d967be2dd4ba9531abb8ba8494c3ac423ca72 (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.cpp45
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();