summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/citra/config.cpp3
-rw-r--r--src/citra/default_ini.h6
-rw-r--r--src/citra_qt/configuration/config.cpp5
-rw-r--r--src/citra_qt/configuration/configure_general.cpp7
-rw-r--r--src/citra_qt/configuration/configure_general.ui13
-rw-r--r--src/core/core.cpp12
-rw-r--r--src/core/settings.h7
-rw-r--r--src/core/telemetry_session.cpp3
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=
67touch_device= 67touch_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)
72use_cpu_jit = 72cpu_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
25ConfigureGeneral::~ConfigureGeneral() {} 25ConfigureGeneral::~ConfigureGeneral() {}
@@ -27,12 +27,12 @@ ConfigureGeneral::~ConfigureGeneral() {}
27void ConfigureGeneral::setConfiguration() { 27void 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
38void ConfigureGeneral::applyConfiguration() { 38void 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() {
140System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { 140System::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
75enum class CpuCore {
76 Unicorn,
77 Dynarmic,
78};
79
75struct Values { 80struct 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",