Merge pull request #8792 from leoetlino/video-backend

Migrate video backend setting to the new config system
This commit is contained in:
Léo Lam 2020-05-24 15:26:44 +02:00 committed by GitHub
commit a660033e8c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 35 additions and 35 deletions

View File

@ -96,7 +96,6 @@ private:
float m_OCFactor; float m_OCFactor;
bool m_OCEnable; bool m_OCEnable;
bool m_bt_passthrough_enabled; bool m_bt_passthrough_enabled;
std::string strBackend;
std::string sBackend; std::string sBackend;
std::string m_strGPUDeterminismMode; std::string m_strGPUDeterminismMode;
std::array<WiimoteSource, MAX_BBMOTES> iWiimoteSource; std::array<WiimoteSource, MAX_BBMOTES> iWiimoteSource;
@ -127,7 +126,6 @@ void ConfigCache::SaveConfig(const SConfig& config)
cpu_core = config.cpu_core; cpu_core = config.cpu_core;
Volume = config.m_Volume; Volume = config.m_Volume;
m_EmulationSpeed = config.m_EmulationSpeed; m_EmulationSpeed = config.m_EmulationSpeed;
strBackend = config.m_strVideoBackend;
sBackend = config.sBackend; sBackend = config.sBackend;
m_strGPUDeterminismMode = config.m_strGPUDeterminismMode; m_strGPUDeterminismMode = config.m_strGPUDeterminismMode;
m_OCFactor = config.m_OCFactor; m_OCFactor = config.m_OCFactor;
@ -202,13 +200,11 @@ void ConfigCache::RestoreConfig(SConfig* config)
config->m_EXIDevice[i] = m_EXIDevice[i]; config->m_EXIDevice[i] = m_EXIDevice[i];
} }
config->m_strVideoBackend = strBackend;
config->sBackend = sBackend; config->sBackend = sBackend;
config->m_strGPUDeterminismMode = m_strGPUDeterminismMode; config->m_strGPUDeterminismMode = m_strGPUDeterminismMode;
config->m_OCFactor = m_OCFactor; config->m_OCFactor = m_OCFactor;
config->m_OCEnable = m_OCEnable; config->m_OCEnable = m_OCEnable;
config->m_bt_passthrough_enabled = m_bt_passthrough_enabled; config->m_bt_passthrough_enabled = m_bt_passthrough_enabled;
VideoBackendBase::ActivateBackend(config->m_strVideoBackend);
} }
static ConfigCache config_cache; static ConfigCache config_cache;
@ -269,7 +265,6 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
core_section->Get("SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU); core_section->Get("SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU);
core_section->Get("FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed); core_section->Get("FastDiscSpeed", &StartUp.bFastDiscSpeed, StartUp.bFastDiscSpeed);
core_section->Get("DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE); core_section->Get("DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE);
core_section->Get("GFXBackend", &StartUp.m_strVideoBackend, StartUp.m_strVideoBackend);
core_section->Get("CPUCore", &StartUp.cpu_core, StartUp.cpu_core); core_section->Get("CPUCore", &StartUp.cpu_core, StartUp.cpu_core);
core_section->Get("HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2); core_section->Get("HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2);
core_section->Get("GameCubeLanguage", &StartUp.SelectedLanguage, StartUp.SelectedLanguage); core_section->Get("GameCubeLanguage", &StartUp.SelectedLanguage, StartUp.SelectedLanguage);
@ -280,7 +275,6 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
config_cache.bSetVolume = true; config_cache.bSetVolume = true;
dsp_section->Get("EnableJIT", &StartUp.m_DSPEnableJIT, StartUp.m_DSPEnableJIT); dsp_section->Get("EnableJIT", &StartUp.m_DSPEnableJIT, StartUp.m_DSPEnableJIT);
dsp_section->Get("Backend", &StartUp.sBackend, StartUp.sBackend); dsp_section->Get("Backend", &StartUp.sBackend, StartUp.sBackend);
VideoBackendBase::ActivateBackend(StartUp.m_strVideoBackend);
core_section->Get("GPUDeterminismMode", &StartUp.m_strGPUDeterminismMode, core_section->Get("GPUDeterminismMode", &StartUp.m_strGPUDeterminismMode,
StartUp.m_strGPUDeterminismMode); StartUp.m_strGPUDeterminismMode);
core_section->Get("Overclock", &StartUp.m_OCFactor, StartUp.m_OCFactor); core_section->Get("Overclock", &StartUp.m_OCFactor, StartUp.m_OCFactor);

View File

@ -28,7 +28,7 @@ bool IsSettingSaveable(const Config::Location& config_location)
return true; return true;
} }
static constexpr std::array<const Config::Location*, 102> s_setting_saveable = { static constexpr std::array<const Config::Location*, 103> s_setting_saveable = {
// Main.Core // Main.Core
&Config::MAIN_DEFAULT_ISO.location, &Config::MAIN_DEFAULT_ISO.location,
@ -40,6 +40,7 @@ bool IsSettingSaveable(const Config::Location& config_location)
&Config::MAIN_RAM_OVERRIDE_ENABLE.location, &Config::MAIN_RAM_OVERRIDE_ENABLE.location,
&Config::MAIN_MEM1_SIZE.location, &Config::MAIN_MEM1_SIZE.location,
&Config::MAIN_MEM2_SIZE.location, &Config::MAIN_MEM2_SIZE.location,
&Config::MAIN_GFX_BACKEND.location,
// Main.Display // Main.Display

View File

@ -241,7 +241,6 @@ void SConfig::SaveCoreSettings(IniFile& ini)
core->Set("EmulationSpeed", m_EmulationSpeed); core->Set("EmulationSpeed", m_EmulationSpeed);
core->Set("Overclock", m_OCFactor); core->Set("Overclock", m_OCFactor);
core->Set("OverclockEnable", m_OCEnable); core->Set("OverclockEnable", m_OCEnable);
core->Set("GFXBackend", m_strVideoBackend);
core->Set("GPUDeterminismMode", m_strGPUDeterminismMode); core->Set("GPUDeterminismMode", m_strGPUDeterminismMode);
core->Set("PerfMapDir", m_perfDir); core->Set("PerfMapDir", m_perfDir);
core->Set("EnableCustomRTC", bEnableCustomRTC); core->Set("EnableCustomRTC", bEnableCustomRTC);
@ -517,7 +516,6 @@ void SConfig::LoadCoreSettings(IniFile& ini)
core->Get("EmulationSpeed", &m_EmulationSpeed, 1.0f); core->Get("EmulationSpeed", &m_EmulationSpeed, 1.0f);
core->Get("Overclock", &m_OCFactor, 1.0f); core->Get("Overclock", &m_OCFactor, 1.0f);
core->Get("OverclockEnable", &m_OCEnable, false); core->Get("OverclockEnable", &m_OCEnable, false);
core->Get("GFXBackend", &m_strVideoBackend, "");
core->Get("GPUDeterminismMode", &m_strGPUDeterminismMode, "auto"); core->Get("GPUDeterminismMode", &m_strGPUDeterminismMode, "auto");
core->Get("PerfMapDir", &m_perfDir, ""); core->Get("PerfMapDir", &m_perfDir, "");
core->Get("EnableCustomRTC", &bEnableCustomRTC, false); core->Get("EnableCustomRTC", &bEnableCustomRTC, false);

View File

@ -180,7 +180,6 @@ struct SConfig
DiscIO::Region m_region; DiscIO::Region m_region;
std::string m_strVideoBackend;
std::string m_strGPUDeterminismMode; std::string m_strGPUDeterminismMode;
// set based on the string version // set based on the string version

View File

@ -459,11 +459,7 @@ static void EmuThread(std::unique_ptr<BootParameters> boot, WindowSystemInfo wsi
HLE::Clear(); HLE::Clear();
}}; }};
// Backend info has to be initialized before we can initialize the backend. VideoBackendBase::PopulateBackendInfo();
// This is because when we load the config, we validate it against the current backend info.
// We also should have the correct adapter selected for creating the device in Initialize().
g_video_backend->InitBackendInfo();
g_Config.Refresh();
if (!g_video_backend->Initialize(wsi)) if (!g_video_backend->Initialize(wsi))
{ {

View File

@ -38,7 +38,7 @@ GeneralWidget::GeneralWidget(X11Utils::XRRConfiguration* xrr_config, GraphicsWin
LoadSettings(); LoadSettings();
ConnectWidgets(); ConnectWidgets();
AddDescriptions(); AddDescriptions();
emit BackendChanged(QString::fromStdString(SConfig::GetInstance().m_strVideoBackend)); emit BackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
connect(parent, &GraphicsWindow::BackendChanged, this, &GeneralWidget::OnBackendChanged); connect(parent, &GraphicsWindow::BackendChanged, this, &GeneralWidget::OnBackendChanged);
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
@ -150,14 +150,14 @@ void GeneralWidget::LoadSettings()
{ {
// Video Backend // Video Backend
m_backend_combo->setCurrentIndex(m_backend_combo->findData( m_backend_combo->setCurrentIndex(m_backend_combo->findData(
QVariant(QString::fromStdString(SConfig::GetInstance().m_strVideoBackend)))); QVariant(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)))));
} }
void GeneralWidget::SaveSettings() void GeneralWidget::SaveSettings()
{ {
// Video Backend // Video Backend
const auto current_backend = m_backend_combo->currentData().toString().toStdString(); const auto current_backend = m_backend_combo->currentData().toString().toStdString();
if (SConfig::GetInstance().m_strVideoBackend != current_backend) if (Config::Get(Config::MAIN_GFX_BACKEND) != current_backend)
{ {
auto warningMessage = auto warningMessage =
g_available_video_backends[m_backend_combo->currentIndex()]->GetWarningMessage(); g_available_video_backends[m_backend_combo->currentIndex()]->GetWarningMessage();
@ -173,7 +173,7 @@ void GeneralWidget::SaveSettings()
if (confirm_sw.exec() != QMessageBox::Yes) if (confirm_sw.exec() != QMessageBox::Yes)
{ {
m_backend_combo->setCurrentIndex(m_backend_combo->findData( m_backend_combo->setCurrentIndex(m_backend_combo->findData(
QVariant(QString::fromStdString(SConfig::GetInstance().m_strVideoBackend)))); QVariant(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)))));
return; return;
} }
} }

View File

@ -11,6 +11,8 @@
#include <QTabWidget> #include <QTabWidget>
#include <QVBoxLayout> #include <QVBoxLayout>
#include "Common/Config/Config.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "DolphinQt/Config/Graphics/AdvancedWidget.h" #include "DolphinQt/Config/Graphics/AdvancedWidget.h"
@ -32,7 +34,7 @@ GraphicsWindow::GraphicsWindow(X11Utils::XRRConfiguration* xrr_config, MainWindo
setWindowTitle(tr("Graphics")); setWindowTitle(tr("Graphics"));
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
OnBackendChanged(QString::fromStdString(SConfig::GetInstance().m_strVideoBackend)); OnBackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
} }
void GraphicsWindow::CreateMainLayout() void GraphicsWindow::CreateMainLayout()
@ -77,7 +79,7 @@ void GraphicsWindow::CreateMainLayout()
m_wrapped_advanced = GetWrappedWidget(m_advanced_widget, this, 50, 305); m_wrapped_advanced = GetWrappedWidget(m_advanced_widget, this, 50, 305);
m_wrapped_software = GetWrappedWidget(m_software_renderer, this, 50, 305); m_wrapped_software = GetWrappedWidget(m_software_renderer, this, 50, 305);
if (SConfig::GetInstance().m_strVideoBackend != "Software Renderer") if (Config::Get(Config::MAIN_GFX_BACKEND) != "Software Renderer")
{ {
m_tab_widget->addTab(m_wrapped_general, tr("General")); m_tab_widget->addTab(m_wrapped_general, tr("General"));
m_tab_widget->addTab(m_wrapped_enhancements, tr("Enhancements")); m_tab_widget->addTab(m_wrapped_enhancements, tr("Enhancements"));
@ -94,8 +96,8 @@ void GraphicsWindow::CreateMainLayout()
void GraphicsWindow::OnBackendChanged(const QString& backend_name) void GraphicsWindow::OnBackendChanged(const QString& backend_name)
{ {
SConfig::GetInstance().m_strVideoBackend = backend_name.toStdString(); Config::SetBase(Config::MAIN_GFX_BACKEND, backend_name.toStdString());
VideoBackendBase::PopulateBackendInfo(); VideoBackendBase::PopulateBackendInfoFromUI();
setWindowTitle( setWindowTitle(
tr("%1 Graphics Configuration").arg(tr(g_video_backend->GetDisplayName().c_str()))); tr("%1 Graphics Configuration").arg(tr(g_video_backend->GetDisplayName().c_str())));

View File

@ -11,6 +11,7 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include "Core/Config/GraphicsSettings.h" #include "Core/Config/GraphicsSettings.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "DolphinQt/Config/Graphics/GraphicsBool.h" #include "DolphinQt/Config/Graphics/GraphicsBool.h"
@ -28,7 +29,7 @@ HacksWidget::HacksWidget(GraphicsWindow* parent) : GraphicsWidget(parent)
AddDescriptions(); AddDescriptions();
connect(parent, &GraphicsWindow::BackendChanged, this, &HacksWidget::OnBackendChanged); connect(parent, &GraphicsWindow::BackendChanged, this, &HacksWidget::OnBackendChanged);
OnBackendChanged(QString::fromStdString(SConfig::GetInstance().m_strVideoBackend)); OnBackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
connect(&Settings::Instance(), &Settings::ConfigChanged, this, &HacksWidget::LoadSettings); connect(&Settings::Instance(), &Settings::ConfigChanged, this, &HacksWidget::LoadSettings);
} }

View File

@ -12,6 +12,7 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include "Core/Config/GraphicsSettings.h" #include "Core/Config/GraphicsSettings.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/Core.h" #include "Core/Core.h"
@ -30,7 +31,7 @@ SoftwareRendererWidget::SoftwareRendererWidget(GraphicsWindow* parent) : Graphic
LoadSettings(); LoadSettings();
ConnectWidgets(); ConnectWidgets();
AddDescriptions(); AddDescriptions();
emit BackendChanged(QString::fromStdString(SConfig::GetInstance().m_strVideoBackend)); emit BackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
connect(parent, &GraphicsWindow::BackendChanged, [this] { LoadSettings(); }); connect(parent, &GraphicsWindow::BackendChanged, [this] { LoadSettings(); });
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
@ -123,9 +124,11 @@ void SoftwareRendererWidget::LoadSettings()
{ {
for (const auto& backend : g_available_video_backends) for (const auto& backend : g_available_video_backends)
{ {
if (backend->GetName() == SConfig::GetInstance().m_strVideoBackend) if (backend->GetName() == Config::Get(Config::MAIN_GFX_BACKEND))
{
m_backend_combo->setCurrentIndex( m_backend_combo->setCurrentIndex(
m_backend_combo->findText(tr(backend->GetDisplayName().c_str()))); m_backend_combo->findText(tr(backend->GetDisplayName().c_str())));
}
} }
m_object_range_min->setValue(Config::Get(Config::GFX_SW_DRAW_START)); m_object_range_min->setValue(Config::Get(Config::GFX_SW_DRAW_START));
@ -139,7 +142,7 @@ void SoftwareRendererWidget::SaveSettings()
if (tr(backend->GetDisplayName().c_str()) == m_backend_combo->currentText()) if (tr(backend->GetDisplayName().c_str()) == m_backend_combo->currentText())
{ {
const auto backend_name = backend->GetName(); const auto backend_name = backend->GetName();
if (backend_name != SConfig::GetInstance().m_strVideoBackend) if (backend_name != Config::Get(Config::MAIN_GFX_BACKEND))
emit BackendChanged(QString::fromStdString(backend_name)); emit BackendChanged(QString::fromStdString(backend_name));
break; break;
} }

View File

@ -100,7 +100,7 @@ void Init()
VideoBackendBase::PopulateList(); VideoBackendBase::PopulateList();
WiimoteReal::LoadSettings(); WiimoteReal::LoadSettings();
GCAdapter::Init(); GCAdapter::Init();
VideoBackendBase::ActivateBackend(SConfig::GetInstance().m_strVideoBackend); VideoBackendBase::ActivateBackend(Config::Get(Config::MAIN_GFX_BACKEND));
Common::SetEnableAlert(SConfig::GetInstance().bUsePanicHandlers); Common::SetEnableAlert(SConfig::GetInstance().bUsePanicHandlers);
} }

View File

@ -14,9 +14,11 @@
#include "Common/ChunkFile.h" #include "Common/ChunkFile.h"
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Common/Config/Config.h"
#include "Common/Event.h" #include "Common/Event.h"
#include "Common/Logging/Log.h" #include "Common/Logging/Log.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/Core.h" #include "Core/Core.h"
@ -245,18 +247,21 @@ void VideoBackendBase::ActivateBackend(const std::string& name)
void VideoBackendBase::PopulateBackendInfo() void VideoBackendBase::PopulateBackendInfo()
{ {
// If the core is running, the backend info will have been populated already.
// If we did it here, the UI thread can race with the with the GPU thread.
if (Core::IsRunning())
return;
// We refresh the config after initializing the backend info, as system-specific settings // We refresh the config after initializing the backend info, as system-specific settings
// such as anti-aliasing, or the selected adapter may be invalid, and should be checked. // such as anti-aliasing, or the selected adapter may be invalid, and should be checked.
ActivateBackend(SConfig::GetInstance().m_strVideoBackend); ActivateBackend(Config::Get(Config::MAIN_GFX_BACKEND));
g_video_backend->InitBackendInfo(); g_video_backend->InitBackendInfo();
g_Config.Refresh(); g_Config.Refresh();
} }
void VideoBackendBase::PopulateBackendInfoFromUI()
{
// If the core is running, the backend info will have been populated already.
// If we did it here, the UI thread can race with the with the GPU thread.
if (!Core::IsRunning())
PopulateBackendInfo();
}
void VideoBackendBase::DoState(PointerWrap& p) void VideoBackendBase::DoState(PointerWrap& p)
{ {
if (!SConfig::GetInstance().bCPUThread) if (!SConfig::GetInstance().bCPUThread)

View File

@ -64,8 +64,9 @@ public:
static void ActivateBackend(const std::string& name); static void ActivateBackend(const std::string& name);
// Fills the backend_info fields with the capabilities of the selected backend/device. // Fills the backend_info fields with the capabilities of the selected backend/device.
// Called by the UI thread when the graphics config is opened.
static void PopulateBackendInfo(); static void PopulateBackendInfo();
// Called by the UI thread when the graphics config is opened.
static void PopulateBackendInfoFromUI();
// Wrapper function which pushes the event to the GPU thread. // Wrapper function which pushes the event to the GPU thread.
void DoState(PointerWrap& p); void DoState(PointerWrap& p);