summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VideoBackendBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/VideoBackendBase.cpp')
-rw-r--r--Source/Core/VideoCommon/VideoBackendBase.cpp39
1 files changed, 31 insertions, 8 deletions
diff --git a/Source/Core/VideoCommon/VideoBackendBase.cpp b/Source/Core/VideoCommon/VideoBackendBase.cpp
index 1ced44e3ae..2f930ceac2 100644
--- a/Source/Core/VideoCommon/VideoBackendBase.cpp
+++ b/Source/Core/VideoCommon/VideoBackendBase.cpp
@@ -317,7 +317,25 @@ void VideoBackendBase::DoState(PointerWrap& p)
system.GetFifo().GpuMaySleep();
}
-void VideoBackendBase::InitializeShared()
+bool VideoBackendBase::InitializeShared(std::unique_ptr<AbstractGfx> gfx,
+ std::unique_ptr<VertexManagerBase> vertex_manager,
+ std::unique_ptr<PerfQueryBase> perf_query,
+ std::unique_ptr<BoundingBox> bounding_box)
+{
+ // All hardware backends use the default RendererBase and TextureCacheBase.
+ // Only Null and Software backends override them
+
+ return InitializeShared(std::move(gfx), std::move(vertex_manager), std::move(perf_query),
+ std::move(bounding_box), std::make_unique<Renderer>(),
+ std::make_unique<TextureCacheBase>());
+}
+
+bool VideoBackendBase::InitializeShared(std::unique_ptr<AbstractGfx> gfx,
+ std::unique_ptr<VertexManagerBase> vertex_manager,
+ std::unique_ptr<PerfQueryBase> perf_query,
+ std::unique_ptr<BoundingBox> bounding_box,
+ std::unique_ptr<Renderer> renderer,
+ std::unique_ptr<TextureCacheBase> texture_cache)
{
memset(reinterpret_cast<u8*>(&g_main_cp_state), 0, sizeof(g_main_cp_state));
memset(reinterpret_cast<u8*>(&g_preprocess_cp_state), 0, sizeof(g_preprocess_cp_state));
@@ -326,14 +344,17 @@ void VideoBackendBase::InitializeShared()
// do not initialize again for the config window
m_initialized = true;
- if (!g_renderer)
- {
- // Null and Software Backends supply their own Renderer
- g_renderer = std::make_unique<Renderer>();
- }
+ g_gfx = std::move(gfx);
+ g_vertex_manager = std::move(vertex_manager);
+ g_perf_query = std::move(perf_query);
+ g_bounding_box = std::move(bounding_box);
+
+ // Null and Software Backends supply their own derived Renderer and Texture Cache
+ g_texture_cache = std::move(texture_cache);
+ g_renderer = std::move(renderer);
+
g_presenter = std::make_unique<VideoCommon::Presenter>();
g_frame_dumper = std::make_unique<FrameDumper>();
- g_texture_cache = std::make_unique<TextureCacheBase>();
g_framebuffer_manager = std::make_unique<FramebufferManager>();
g_shader_cache = std::make_unique<VideoCommon::ShaderCache>();
@@ -355,13 +376,15 @@ void VideoBackendBase::InitializeShared()
{
PanicAlertFmtT("Failed to initialize renderer classes");
Shutdown();
- return;
+ return false;
}
g_Config.VerifyValidity();
UpdateActiveConfig();
g_shader_cache->InitializeShaderCache();
+
+ return true;
}
void VideoBackendBase::ShutdownShared()