diff options
Diffstat (limited to 'Source/Core/VideoBackends')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/main.cpp | 3 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Null/NullBackend.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/Render.cpp | 27 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/Render.h | 2 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/main.cpp | 3 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWmain.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/Renderer.cpp | 23 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/Renderer.h | 5 |
8 files changed, 42 insertions, 25 deletions
diff --git a/Source/Core/VideoBackends/D3D/main.cpp b/Source/Core/VideoBackends/D3D/main.cpp index 7df5358b16..684bc1350b 100644 --- a/Source/Core/VideoBackends/D3D/main.cpp +++ b/Source/Core/VideoBackends/D3D/main.cpp @@ -161,7 +161,8 @@ bool VideoBackend::Initialize(const WindowSystemInfo& wsi) D3D::InitUtils(); BBox::Init(); - return true; + + return g_renderer->Initialize(); } void VideoBackend::Shutdown() diff --git a/Source/Core/VideoBackends/Null/NullBackend.cpp b/Source/Core/VideoBackends/Null/NullBackend.cpp index 147d5916ff..d790331e36 100644 --- a/Source/Core/VideoBackends/Null/NullBackend.cpp +++ b/Source/Core/VideoBackends/Null/NullBackend.cpp @@ -64,7 +64,7 @@ bool VideoBackend::Initialize(const WindowSystemInfo& wsi) g_framebuffer_manager = std::make_unique<FramebufferManagerBase>(); g_texture_cache = std::make_unique<TextureCache>(); g_shader_cache = std::make_unique<VideoCommon::ShaderCache>(); - return g_shader_cache->Initialize(); + return g_renderer->Initialize() && g_shader_cache->Initialize(); } void VideoBackend::Shutdown() diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 120774b4f7..8b35e59bbb 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -811,19 +811,11 @@ bool Renderer::IsHeadless() const return m_main_gl_context->IsHeadless(); } -void Renderer::Shutdown() +bool Renderer::Initialize() { - ::Renderer::Shutdown(); - g_framebuffer_manager.reset(); + if (!::Renderer::Initialize()) + return false; - UpdateActiveConfig(); - - s_raster_font.reset(); - m_post_processor.reset(); -} - -void Renderer::Init() -{ // Initialize the FramebufferManager g_framebuffer_manager = std::make_unique<FramebufferManager>( m_target_width, m_target_height, s_MSAASamples, BoundingBox::NeedsStencilBuffer()); @@ -832,6 +824,19 @@ void Renderer::Init() m_post_processor = std::make_unique<OpenGLPostProcessing>(); s_raster_font = std::make_unique<RasterFont>(); + + return true; +} + +void Renderer::Shutdown() +{ + ::Renderer::Shutdown(); + g_framebuffer_manager.reset(); + + UpdateActiveConfig(); + + s_raster_font.reset(); + m_post_processor.reset(); } std::unique_ptr<AbstractTexture> Renderer::CreateTexture(const TextureConfig& config) diff --git a/Source/Core/VideoBackends/OGL/Render.h b/Source/Core/VideoBackends/OGL/Render.h index f0cc668563..de051ba0d7 100644 --- a/Source/Core/VideoBackends/OGL/Render.h +++ b/Source/Core/VideoBackends/OGL/Render.h @@ -88,7 +88,7 @@ public: bool IsHeadless() const override; - void Init(); + bool Initialize() override; void Shutdown() override; std::unique_ptr<AbstractTexture> CreateTexture(const TextureConfig& config) override; diff --git a/Source/Core/VideoBackends/OGL/main.cpp b/Source/Core/VideoBackends/OGL/main.cpp index 6e364113cc..c4ccbdcfd5 100644 --- a/Source/Core/VideoBackends/OGL/main.cpp +++ b/Source/Core/VideoBackends/OGL/main.cpp @@ -179,7 +179,8 @@ bool VideoBackend::Initialize(const WindowSystemInfo& wsi) g_texture_cache = std::make_unique<TextureCache>(); g_sampler_cache = std::make_unique<SamplerCache>(); g_shader_cache = std::make_unique<VideoCommon::ShaderCache>(); - static_cast<Renderer*>(g_renderer.get())->Init(); + if (!g_renderer->Initialize()) + return false; TextureConverter::Init(); BoundingBox::Init(g_renderer->GetTargetWidth(), g_renderer->GetTargetHeight()); return g_shader_cache->Initialize(); diff --git a/Source/Core/VideoBackends/Software/SWmain.cpp b/Source/Core/VideoBackends/Software/SWmain.cpp index a0ad349849..0ab16bdfa8 100644 --- a/Source/Core/VideoBackends/Software/SWmain.cpp +++ b/Source/Core/VideoBackends/Software/SWmain.cpp @@ -95,7 +95,7 @@ bool VideoSoftware::Initialize(const WindowSystemInfo& wsi) g_perf_query = std::make_unique<PerfQuery>(); g_texture_cache = std::make_unique<TextureCache>(); g_shader_cache = std::make_unique<VideoCommon::ShaderCache>(); - return g_shader_cache->Initialize(); + return g_renderer->Initialize() && g_shader_cache->Initialize(); } void VideoSoftware::Shutdown() 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; |
