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() { | |||
| 82 | sdl2_config->Get("Controls", "touch_device", "engine:emu_window"); | 82 | sdl2_config->Get("Controls", "touch_device", "engine:emu_window"); |
| 83 | 83 | ||
| 84 | // Core | 84 | // Core |
| 85 | Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); | 85 | Settings::values.cpu_core = |
| 86 | static_cast<Settings::CpuCore>(sdl2_config->GetInteger("Core", "cpu_core", 1)); | ||
| 86 | 87 | ||
| 87 | // Renderer | 88 | // Renderer |
| 88 | Settings::values.use_hw_renderer = sdl2_config->GetBoolean("Renderer", "use_hw_renderer", true); | 89 | 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= | |||
| 67 | touch_device= | 67 | touch_device= |
| 68 | 68 | ||
| 69 | [Core] | 69 | [Core] |
| 70 | # Whether to use the Just-In-Time (JIT) compiler for CPU emulation | 70 | # Which CPU core to use for CPU emulation |
| 71 | # 0: Interpreter (slow), 1 (default): JIT (fast) | 71 | # 0: Unicorn (slow), 1 (default): Dynarmic (faster) |
| 72 | use_cpu_jit = | 72 | cpu_core = |
| 73 | 73 | ||
| 74 | [Renderer] | 74 | [Renderer] |
| 75 | # Whether to use software or hardware rendering. | 75 | # 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() { | |||
| 67 | qt_config->endGroup(); | 67 | qt_config->endGroup(); |
| 68 | 68 | ||
| 69 | qt_config->beginGroup("Core"); | 69 | qt_config->beginGroup("Core"); |
| 70 | Settings::values.use_cpu_jit = qt_config->value("use_cpu_jit", true).toBool(); | 70 | Settings::values.cpu_core = |
| 71 | static_cast<Settings::CpuCore>(qt_config->value("cpu_core", 1).toInt()); | ||
| 71 | qt_config->endGroup(); | 72 | qt_config->endGroup(); |
| 72 | 73 | ||
| 73 | qt_config->beginGroup("Renderer"); | 74 | qt_config->beginGroup("Renderer"); |
| @@ -207,7 +208,7 @@ void Config::SaveValues() { | |||
| 207 | qt_config->endGroup(); | 208 | qt_config->endGroup(); |
| 208 | 209 | ||
| 209 | qt_config->beginGroup("Core"); | 210 | qt_config->beginGroup("Core"); |
| 210 | qt_config->setValue("use_cpu_jit", Settings::values.use_cpu_jit); | 211 | qt_config->setValue("cpu_core", static_cast<int>(Settings::values.cpu_core)); |
| 211 | qt_config->endGroup(); | 212 | qt_config->endGroup(); |
| 212 | 213 | ||
| 213 | qt_config->beginGroup("Renderer"); | 214 | 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) | |||
| 19 | 19 | ||
| 20 | this->setConfiguration(); | 20 | this->setConfiguration(); |
| 21 | 21 | ||
| 22 | ui->toggle_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn()); | 22 | ui->cpu_core_combobox->setEnabled(!Core::System::GetInstance().IsPoweredOn()); |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | ConfigureGeneral::~ConfigureGeneral() {} | 25 | ConfigureGeneral::~ConfigureGeneral() {} |
| @@ -27,12 +27,12 @@ ConfigureGeneral::~ConfigureGeneral() {} | |||
| 27 | void ConfigureGeneral::setConfiguration() { | 27 | void ConfigureGeneral::setConfiguration() { |
| 28 | ui->toggle_deepscan->setChecked(UISettings::values.gamedir_deepscan); | 28 | ui->toggle_deepscan->setChecked(UISettings::values.gamedir_deepscan); |
| 29 | ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing); | 29 | ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing); |
| 30 | ui->toggle_cpu_jit->setChecked(Settings::values.use_cpu_jit); | ||
| 31 | 30 | ||
| 32 | // The first item is "auto-select" with actual value -1, so plus one here will do the trick | 31 | // The first item is "auto-select" with actual value -1, so plus one here will do the trick |
| 33 | ui->region_combobox->setCurrentIndex(Settings::values.region_value + 1); | 32 | ui->region_combobox->setCurrentIndex(Settings::values.region_value + 1); |
| 34 | 33 | ||
| 35 | ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); | 34 | ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); |
| 35 | ui->cpu_core_combobox->setCurrentIndex(static_cast<int>(Settings::values.cpu_core)); | ||
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | void ConfigureGeneral::applyConfiguration() { | 38 | void ConfigureGeneral::applyConfiguration() { |
| @@ -41,6 +41,7 @@ void ConfigureGeneral::applyConfiguration() { | |||
| 41 | UISettings::values.theme = | 41 | UISettings::values.theme = |
| 42 | ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString(); | 42 | ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString(); |
| 43 | Settings::values.region_value = ui->region_combobox->currentIndex() - 1; | 43 | Settings::values.region_value = ui->region_combobox->currentIndex() - 1; |
| 44 | Settings::values.use_cpu_jit = ui->toggle_cpu_jit->isChecked(); | 44 | Settings::values.cpu_core = |
| 45 | static_cast<Settings::CpuCore>(ui->cpu_core_combobox->currentIndex()); | ||
| 45 | Settings::Apply(); | 46 | Settings::Apply(); |
| 46 | } | 47 | } |
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 @@ | |||
| 46 | <item> | 46 | <item> |
| 47 | <widget class="QGroupBox" name="groupBox_2"> | 47 | <widget class="QGroupBox" name="groupBox_2"> |
| 48 | <property name="title"> | 48 | <property name="title"> |
| 49 | <string>Performance</string> | 49 | <string>CPU Core</string> |
| 50 | </property> | 50 | </property> |
| 51 | <layout class="QHBoxLayout" name="horizontalLayout_7"> | 51 | <layout class="QHBoxLayout" name="horizontalLayout_7"> |
| 52 | <item> | 52 | <item> |
| 53 | <layout class="QVBoxLayout" name="verticalLayout_5"> | 53 | <layout class="QVBoxLayout" name="verticalLayout_5"> |
| 54 | <item> | 54 | <item> |
| 55 | <widget class="QCheckBox" name="toggle_cpu_jit"> | 55 | <widget class="QComboBox" name="cpu_core_combobox"> |
| 56 | <item> | ||
| 56 | <property name="text"> | 57 | <property name="text"> |
| 57 | <string>Enable CPU JIT</string> | 58 | <string>Unicorn</string> |
| 58 | </property> | 59 | </property> |
| 60 | </item> | ||
| 61 | <item> | ||
| 62 | <property name="text"> | ||
| 63 | <string>Dynarmic</string> | ||
| 64 | </property> | ||
| 65 | </item> | ||
| 59 | </widget> | 66 | </widget> |
| 60 | </item> | 67 | </item> |
| 61 | </layout> | 68 | </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() { | |||
| 140 | System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { | 140 | System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { |
| 141 | LOG_DEBUG(HW_Memory, "initialized OK"); | 141 | LOG_DEBUG(HW_Memory, "initialized OK"); |
| 142 | 142 | ||
| 143 | // TODO: Configuration option | 143 | switch (Settings::values.cpu_core) { |
| 144 | cpu_core = std::make_unique<ARM_Dynarmic>(); | 144 | case Settings::CpuCore::Unicorn: |
| 145 | cpu_core = std::make_unique<ARM_Unicorn>(); | ||
| 146 | break; | ||
| 147 | case Settings::CpuCore::Dynarmic: | ||
| 148 | default: | ||
| 149 | cpu_core = std::make_unique<ARM_Dynarmic>(); | ||
| 150 | break; | ||
| 151 | } | ||
| 152 | |||
| 145 | telemetry_session = std::make_unique<Core::TelemetrySession>(); | 153 | telemetry_session = std::make_unique<Core::TelemetrySession>(); |
| 146 | 154 | ||
| 147 | CoreTiming::Init(); | 155 | 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 = {{ | |||
| 72 | }}; | 72 | }}; |
| 73 | } // namespace NativeAnalog | 73 | } // namespace NativeAnalog |
| 74 | 74 | ||
| 75 | enum class CpuCore { | ||
| 76 | Unicorn, | ||
| 77 | Dynarmic, | ||
| 78 | }; | ||
| 79 | |||
| 75 | struct Values { | 80 | struct Values { |
| 76 | // CheckNew3DS | 81 | // CheckNew3DS |
| 77 | bool is_new_3ds; | 82 | bool is_new_3ds; |
| @@ -83,7 +88,7 @@ struct Values { | |||
| 83 | std::string touch_device; | 88 | std::string touch_device; |
| 84 | 89 | ||
| 85 | // Core | 90 | // Core |
| 86 | bool use_cpu_jit; | 91 | CpuCore cpu_core; |
| 87 | 92 | ||
| 88 | // Data Storage | 93 | // Data Storage |
| 89 | bool use_virtual_sd; | 94 | 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() { | |||
| 156 | // Log user configuration information | 156 | // Log user configuration information |
| 157 | AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching", | 157 | AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching", |
| 158 | Settings::values.enable_audio_stretching); | 158 | Settings::values.enable_audio_stretching); |
| 159 | AddField(Telemetry::FieldType::UserConfig, "Core_UseCpuJit", Settings::values.use_cpu_jit); | 159 | AddField(Telemetry::FieldType::UserConfig, "Core_CpuCore", |
| 160 | static_cast<int>(Settings::values.cpu_core)); | ||
| 160 | AddField(Telemetry::FieldType::UserConfig, "Renderer_ResolutionFactor", | 161 | AddField(Telemetry::FieldType::UserConfig, "Renderer_ResolutionFactor", |
| 161 | Settings::values.resolution_factor); | 162 | Settings::values.resolution_factor); |
| 162 | AddField(Telemetry::FieldType::UserConfig, "Renderer_ToggleFramelimit", | 163 | AddField(Telemetry::FieldType::UserConfig, "Renderer_ToggleFramelimit", |