core: settings: Untangle multicore from asynchronous GPU.

- Now that GPU is always threaded, we can support multicore with synchronous GPU.
This commit is contained in:
bunnei 2020-12-12 00:50:22 -08:00
parent 40571c073f
commit 916438a9de
5 changed files with 4 additions and 21 deletions

View File

@ -159,7 +159,7 @@ struct System::Impl {
device_memory = std::make_unique<Core::DeviceMemory>(); device_memory = std::make_unique<Core::DeviceMemory>();
is_multicore = Settings::values.use_multi_core.GetValue(); is_multicore = Settings::values.use_multi_core.GetValue();
is_async_gpu = is_multicore || Settings::values.use_asynchronous_gpu_emulation.GetValue(); is_async_gpu = Settings::values.use_asynchronous_gpu_emulation.GetValue();
kernel.SetMulticore(is_multicore); kernel.SetMulticore(is_multicore);
cpu_manager.SetMulticore(is_multicore); cpu_manager.SetMulticore(is_multicore);

View File

@ -148,9 +148,4 @@ void RestoreGlobalState(bool is_powered_on) {
values.motion_enabled.SetGlobal(true); values.motion_enabled.SetGlobal(true);
} }
void Sanitize() {
values.use_asynchronous_gpu_emulation.SetValue(
values.use_asynchronous_gpu_emulation.GetValue() || values.use_multi_core.GetValue());
}
} // namespace Settings } // namespace Settings

View File

@ -257,7 +257,4 @@ void LogSettings();
// Restore the global state of all applicable settings in the Values struct // Restore the global state of all applicable settings in the Values struct
void RestoreGlobalState(bool is_powered_on); void RestoreGlobalState(bool is_powered_on);
// Fixes settings that are known to cause issues with the emulator
void Sanitize();
} // namespace Settings } // namespace Settings

View File

@ -1589,14 +1589,12 @@ void Config::WriteSettingGlobal(const QString& name, const QVariant& value, bool
void Config::Reload() { void Config::Reload() {
ReadValues(); ReadValues();
Settings::Sanitize();
// To apply default value changes // To apply default value changes
SaveValues(); SaveValues();
Settings::Apply(Core::System::GetInstance()); Settings::Apply(Core::System::GetInstance());
} }
void Config::Save() { void Config::Save() {
Settings::Sanitize();
SaveValues(); SaveValues();
} }

View File

@ -580,9 +580,8 @@ void GMainWindow::InitializeWidgets() {
if (emulation_running) { if (emulation_running) {
return; return;
} }
const bool is_async = !Settings::values.use_asynchronous_gpu_emulation.GetValue() || Settings::values.use_asynchronous_gpu_emulation.SetValue(
Settings::values.use_multi_core.GetValue(); !Settings::values.use_asynchronous_gpu_emulation.GetValue());
Settings::values.use_asynchronous_gpu_emulation.SetValue(is_async);
async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation.GetValue()); async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation.GetValue());
Settings::Apply(Core::System::GetInstance()); Settings::Apply(Core::System::GetInstance());
}); });
@ -599,16 +598,13 @@ void GMainWindow::InitializeWidgets() {
return; return;
} }
Settings::values.use_multi_core.SetValue(!Settings::values.use_multi_core.GetValue()); Settings::values.use_multi_core.SetValue(!Settings::values.use_multi_core.GetValue());
const bool is_async = Settings::values.use_asynchronous_gpu_emulation.GetValue() ||
Settings::values.use_multi_core.GetValue();
Settings::values.use_asynchronous_gpu_emulation.SetValue(is_async);
async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation.GetValue());
multicore_status_button->setChecked(Settings::values.use_multi_core.GetValue()); multicore_status_button->setChecked(Settings::values.use_multi_core.GetValue());
Settings::Apply(Core::System::GetInstance()); Settings::Apply(Core::System::GetInstance());
}); });
multicore_status_button->setText(tr("MULTICORE")); multicore_status_button->setText(tr("MULTICORE"));
multicore_status_button->setCheckable(true); multicore_status_button->setCheckable(true);
multicore_status_button->setChecked(Settings::values.use_multi_core.GetValue()); multicore_status_button->setChecked(Settings::values.use_multi_core.GetValue());
statusBar()->insertPermanentWidget(0, multicore_status_button); statusBar()->insertPermanentWidget(0, multicore_status_button);
statusBar()->insertPermanentWidget(0, async_status_button); statusBar()->insertPermanentWidget(0, async_status_button);
@ -2533,9 +2529,6 @@ void GMainWindow::UpdateStatusBar() {
void GMainWindow::UpdateStatusButtons() { void GMainWindow::UpdateStatusButtons() {
dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue()); dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue());
multicore_status_button->setChecked(Settings::values.use_multi_core.GetValue()); multicore_status_button->setChecked(Settings::values.use_multi_core.GetValue());
Settings::values.use_asynchronous_gpu_emulation.SetValue(
Settings::values.use_asynchronous_gpu_emulation.GetValue() ||
Settings::values.use_multi_core.GetValue());
async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation.GetValue()); async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation.GetValue());
renderer_status_button->setChecked(Settings::values.renderer_backend.GetValue() == renderer_status_button->setChecked(Settings::values.renderer_backend.GetValue() ==
Settings::RendererBackend::Vulkan); Settings::RendererBackend::Vulkan);