configuration: Add cpu_core configuration option

This commit is contained in:
MerryMage 2018-01-12 16:06:30 +00:00 committed by bunnei
parent d2fbc78320
commit b628192bf2
8 changed files with 40 additions and 16 deletions

View file

@ -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);

View file

@ -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.

View file

@ -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");

View file

@ -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();
}

View file

@ -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>

View file

@ -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();

View file

@ -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;

View file

@ -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",