summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Vulkan
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan')
-rw-r--r--Source/Core/VideoBackends/Vulkan/Renderer.cpp23
-rw-r--r--Source/Core/VideoBackends/Vulkan/Renderer.h5
2 files changed, 19 insertions, 9 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/Renderer.cpp b/Source/Core/VideoBackends/Vulkan/Renderer.cpp
index ce52b0718d..5e1250549a 100644
--- a/Source/Core/VideoBackends/Vulkan/Renderer.cpp
+++ b/Source/Core/VideoBackends/Vulkan/Renderer.cpp
@@ -57,13 +57,7 @@ Renderer::Renderer(std::unique_ptr<SwapChain> swap_chain)
m_sampler_states[i].hex = RenderState::GetPointSamplerState().hex;
}
-Renderer::~Renderer()
-{
- UpdateActiveConfig();
-
- DestroyShaders();
- DestroySemaphores();
-}
+Renderer::~Renderer() = default;
Renderer* Renderer::GetInstance()
{
@@ -77,6 +71,9 @@ bool Renderer::IsHeadless() const
bool Renderer::Initialize()
{
+ if (!::Renderer::Initialize())
+ return false;
+
BindEFBToStateTracker();
if (!CreateSemaphores())
@@ -131,6 +128,18 @@ bool Renderer::Initialize()
return true;
}
+void Renderer::Shutdown()
+{
+ ::Renderer::Shutdown();
+
+ // Submit the current command buffer, in case there's a partial frame.
+ StateTracker::GetInstance()->EndRenderPass();
+ g_command_buffer_mgr->ExecuteCommandBuffer(false, true);
+
+ DestroyShaders();
+ DestroySemaphores();
+}
+
bool Renderer::CreateSemaphores()
{
// Create two semaphores, one that is triggered when the swapchain buffer is ready, another after
diff --git a/Source/Core/VideoBackends/Vulkan/Renderer.h b/Source/Core/VideoBackends/Vulkan/Renderer.h
index ba8fd889bd..ba27fa10c6 100644
--- a/Source/Core/VideoBackends/Vulkan/Renderer.h
+++ b/Source/Core/VideoBackends/Vulkan/Renderer.h
@@ -37,6 +37,9 @@ public:
bool IsHeadless() const override;
+ bool Initialize() override;
+ void Shutdown() override;
+
std::unique_ptr<AbstractTexture> CreateTexture(const TextureConfig& config) override;
std::unique_ptr<AbstractStagingTexture>
CreateStagingTexture(StagingTextureType type, const TextureConfig& config) override;
@@ -52,8 +55,6 @@ public:
SwapChain* GetSwapChain() const { return m_swap_chain.get(); }
BoundingBox* GetBoundingBox() const { return m_bounding_box.get(); }
- bool Initialize();
-
void RenderText(const std::string& pstr, int left, int top, u32 color) override;
u32 AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) override;
void PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num_points) override;