diff options
-rw-r--r-- | src/citra/config.cpp | 3 | ||||
-rw-r--r-- | src/citra/default_ini.h | 6 | ||||
-rw-r--r-- | src/citra_qt/configuration/config.cpp | 5 | ||||
-rw-r--r-- | src/citra_qt/configuration/configure_general.cpp | 7 | ||||
-rw-r--r-- | src/citra_qt/configuration/configure_general.ui | 13 | ||||
-rw-r--r-- | src/core/core.cpp | 12 | ||||
-rw-r--r-- | src/core/settings.h | 7 | ||||
-rw-r--r-- | src/core/telemetry_session.cpp | 3 |
8 files changed, 40 insertions, 16 deletions
diff --git a/src/citra/config.cpp b/src/citra/config.cpp index 432bf2ced..e44931abd 100644 --- a/src/citra/config.cpp +++ b/src/citra/config.cpp @@ -82,7 +82,8 @@ void Config::ReadValues() { sdl2_config->Get("Controls", "touch_device", "engine:emu_window"); // Core - Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); + Settings::values.cpu_core = + static_cast<Settings::CpuCore>(sdl2_config->GetInteger("Core", "cpu_core", 1)); // Renderer Settings::values.use_hw_renderer = sdl2_config->GetBoolean("Renderer", "use_hw_renderer", true); diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index 783c4a835..b4914d29f 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h @@ -67,9 +67,9 @@ motion_device= touch_device= [Core] -# Whether to use the Just-In-Time (JIT) compiler for CPU emulation -# 0: Interpreter (slow), 1 (default): JIT (fast) -use_cpu_jit = +# Which CPU core to use for CPU emulation +# 0: Unicorn (slow), 1 (default): Dynarmic (faster) +cpu_core = [Renderer] # Whether to use software or hardware rendering. diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index c268e0068..68d565c39 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -67,7 +67,8 @@ void Config::ReadValues() { qt_config->endGroup(); qt_config->beginGroup("Core"); - Settings::values.use_cpu_jit = qt_config->value("use_cpu_jit", true).toBool(); + Settings::values.cpu_core = + static_cast<Settings::CpuCore>(qt_config->value("cpu_core", 1).toInt()); qt_config->endGroup(); qt_config->beginGroup("Renderer"); @@ -207,7 +208,7 @@ void Config::SaveValues() { qt_config->endGroup(); qt_config->beginGroup("Core"); - qt_config->setValue("use_cpu_jit", Settings::values.use_cpu_jit); + qt_config->setValue("cpu_core", static_cast<int>(Settings::values.cpu_core)); qt_config->endGroup(); qt_config->beginGroup("Renderer"); diff --git a/src/citra_qt/configuration/configure_general.cpp b/src/citra_qt/configuration/configure_general.cpp index 939379717..0de27aa8b 100644 --- a/src/citra_qt/configuration/configure_general.cpp +++ b/src/citra_qt/configuration/configure_general.cpp @@ -19,7 +19,7 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent) this->setConfiguration(); - ui->toggle_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn()); + ui->cpu_core_combobox->setEnabled(!Core::System::GetInstance().IsPoweredOn()); } ConfigureGeneral::~ConfigureGeneral() {} @@ -27,12 +27,12 @@ ConfigureGeneral::~ConfigureGeneral() {} void ConfigureGeneral::setConfiguration() { ui->toggle_deepscan->setChecked(UISettings::values.gamedir_deepscan); ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing); - ui->toggle_cpu_jit->setChecked(Settings::values.use_cpu_jit); // The first item is "auto-select" with actual value -1, so plus one here will do the trick ui->region_combobox->setCurrentIndex(Settings::values.region_value + 1); ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); + ui->cpu_core_combobox->setCurrentIndex(static_cast<int>(Settings::values.cpu_core)); } void ConfigureGeneral::applyConfiguration() { @@ -41,6 +41,7 @@ void ConfigureGeneral::applyConfiguration() { UISettings::values.theme = ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString(); Settings::values.region_value = ui->region_combobox->currentIndex() - 1; - Settings::values.use_cpu_jit = ui->toggle_cpu_jit->isChecked(); + Settings::values.cpu_core = + static_cast<Settings::CpuCore>(ui->cpu_core_combobox->currentIndex()); Settings::Apply(); } diff --git a/src/citra_qt/configuration/configure_general.ui b/src/citra_qt/configuration/configure_general.ui index eedf2cbb0..e88c37936 100644 --- a/src/citra_qt/configuration/configure_general.ui +++ b/src/citra_qt/configuration/configure_general.ui @@ -46,16 +46,23 @@ <item> <widget class="QGroupBox" name="groupBox_2"> <property name="title"> - <string>Performance</string> + <string>CPU Core</string> </property> <layout class="QHBoxLayout" name="horizontalLayout_7"> <item> <layout class="QVBoxLayout" name="verticalLayout_5"> <item> - <widget class="QCheckBox" name="toggle_cpu_jit"> + <widget class="QComboBox" name="cpu_core_combobox"> + <item> <property name="text"> - <string>Enable CPU JIT</string> + <string>Unicorn</string> </property> + </item> + <item> + <property name="text"> + <string>Dynarmic</string> + </property> + </item> </widget> </item> </layout> diff --git a/src/core/core.cpp b/src/core/core.cpp index 0240f946b..e5f299f26 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -140,8 +140,16 @@ void System::Reschedule() { System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { LOG_DEBUG(HW_Memory, "initialized OK"); - // TODO: Configuration option - cpu_core = std::make_unique<ARM_Dynarmic>(); + switch (Settings::values.cpu_core) { + case Settings::CpuCore::Unicorn: + cpu_core = std::make_unique<ARM_Unicorn>(); + break; + case Settings::CpuCore::Dynarmic: + default: + cpu_core = std::make_unique<ARM_Dynarmic>(); + break; + } + telemetry_session = std::make_unique<Core::TelemetrySession>(); CoreTiming::Init(); diff --git a/src/core/settings.h b/src/core/settings.h index 912b2c885..ebf072cff 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -72,6 +72,11 @@ static const std::array<const char*, NumAnalogs> mapping = {{ }}; } // namespace NativeAnalog +enum class CpuCore { + Unicorn, + Dynarmic, +}; + struct Values { // CheckNew3DS bool is_new_3ds; @@ -83,7 +88,7 @@ struct Values { std::string touch_device; // Core - bool use_cpu_jit; + CpuCore cpu_core; // Data Storage bool use_virtual_sd; diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index ca517ff44..f9725b590 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -156,7 +156,8 @@ TelemetrySession::TelemetrySession() { // Log user configuration information AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching", Settings::values.enable_audio_stretching); - AddField(Telemetry::FieldType::UserConfig, "Core_UseCpuJit", Settings::values.use_cpu_jit); + AddField(Telemetry::FieldType::UserConfig, "Core_CpuCore", + static_cast<int>(Settings::values.cpu_core)); AddField(Telemetry::FieldType::UserConfig, "Renderer_ResolutionFactor", Settings::values.resolution_factor); AddField(Telemetry::FieldType::UserConfig, "Renderer_ToggleFramelimit", |