diff options
| author | MerryMage <MerryMage@users.noreply.github.com> | 2018-01-12 16:06:30 +0000 | 
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2018-01-12 17:48:52 -0500 | 
| commit | b628192bf27c871af3ecbf8982b4a13a78fd70c4 (patch) | |
| tree | a5d66996675378584d2324c48c8e3ef4c8f33a74 | |
| parent | d2fbc7832080955598c9fb6f083414eca47f0f19 (diff) | |
configuration: Add cpu_core configuration option
| -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",  | 
