From 58b70b2fb2abac12dddd947a69f7fa5b41b1a8b7 Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Sat, 28 Jan 2023 14:53:19 +1300 Subject: Don't set common globals from Video Backends --- Source/Core/VideoCommon/VideoBackendBase.cpp | 39 ++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'Source/Core/VideoCommon/VideoBackendBase.cpp') 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 gfx, + std::unique_ptr vertex_manager, + std::unique_ptr perf_query, + std::unique_ptr 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(), + std::make_unique()); +} + +bool VideoBackendBase::InitializeShared(std::unique_ptr gfx, + std::unique_ptr vertex_manager, + std::unique_ptr perf_query, + std::unique_ptr bounding_box, + std::unique_ptr renderer, + std::unique_ptr texture_cache) { memset(reinterpret_cast(&g_main_cp_state), 0, sizeof(g_main_cp_state)); memset(reinterpret_cast(&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(); - } + 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(); g_frame_dumper = std::make_unique(); - g_texture_cache = std::make_unique(); g_framebuffer_manager = std::make_unique(); g_shader_cache = std::make_unique(); @@ -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() -- cgit v1.2.3