summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2018-02-09 20:52:25 +1000
committerStenzek <stenzek@gmail.com>2018-12-04 17:36:08 +1000
commit1adcd47dcbd80e0435d42e61dab3f00a22d1ca38 (patch)
treede2ce449d688e0d5d13fdb46dfd9e6396f63fb2c /Source/Core
parent38479dd7830ab0790b487cbdee7477e6eb6b941d (diff)
Renderer: Add a base Initialize() method to match Shutdown()
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoBackends/D3D/main.cpp3
-rw-r--r--Source/Core/VideoBackends/Null/NullBackend.cpp2
-rw-r--r--Source/Core/VideoBackends/OGL/Render.cpp27
-rw-r--r--Source/Core/VideoBackends/OGL/Render.h2
-rw-r--r--Source/Core/VideoBackends/OGL/main.cpp3
-rw-r--r--Source/Core/VideoBackends/Software/SWmain.cpp2
-rw-r--r--Source/Core/VideoBackends/Vulkan/Renderer.cpp23
-rw-r--r--Source/Core/VideoBackends/Vulkan/Renderer.h5
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp5
-rw-r--r--Source/Core/VideoCommon/RenderBase.h5
10 files changed, 50 insertions, 27 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;
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index d37b6aa07b..241c74c6ec 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -93,6 +93,11 @@ Renderer::Renderer(int backbuffer_width, int backbuffer_height)
Renderer::~Renderer() = default;
+bool Renderer::Initialize()
+{
+ return true;
+}
+
void Renderer::Shutdown()
{
// First stop any framedumping, which might need to dump the last xfb frame. This process
diff --git a/Source/Core/VideoCommon/RenderBase.h b/Source/Core/VideoCommon/RenderBase.h
index d5dd761c40..1c240c50ab 100644
--- a/Source/Core/VideoCommon/RenderBase.h
+++ b/Source/Core/VideoCommon/RenderBase.h
@@ -79,6 +79,9 @@ public:
virtual bool IsHeadless() const = 0;
+ virtual bool Initialize();
+ virtual void Shutdown();
+
virtual void SetPipeline(const AbstractPipeline* pipeline) {}
virtual void SetScissorRect(const MathUtil::Rectangle<int>& rc) {}
virtual void SetTexture(u32 index, const AbstractTexture* texture) {}
@@ -188,8 +191,6 @@ public:
virtual std::unique_ptr<VideoCommon::AsyncShaderCompiler> CreateAsyncShaderCompiler();
- virtual void Shutdown();
-
// Drawing utility shaders.
virtual void DrawUtilityPipeline(const void* uniforms, u32 uniforms_size, const void* vertices,
u32 vertex_stride, u32 num_vertices)