diff options
| author | 2020-04-20 14:19:18 -0400 | |
|---|---|---|
| committer | 2020-04-20 14:19:18 -0400 | |
| commit | 200f69d2ffa11bb902c2d9cabb49027f4781fe11 (patch) | |
| tree | 028ddae62e98d6498ecd9363f020717cf22b05ea | |
| parent | Merge pull request #3741 from FearlessTobi/silence-warnings (diff) | |
| parent | dynarmic: Add option to disable CPU JIT optimizations (diff) | |
| download | yuzu-200f69d2ffa11bb902c2d9cabb49027f4781fe11.tar.gz yuzu-200f69d2ffa11bb902c2d9cabb49027f4781fe11.tar.xz yuzu-200f69d2ffa11bb902c2d9cabb49027f4781fe11.zip | |
Merge pull request #3739 from MerryMage/disable_cpu_opt
dynarmic: Add option to disable CPU JIT optimizations
| m--------- | externals/dynarmic | 0 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 10 | ||||
| -rw-r--r-- | src/core/settings.h | 1 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.ui | 7 | ||||
| -rw-r--r-- | src/yuzu_cmd/config.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu_cmd/default_ini.h | 3 |
8 files changed, 26 insertions, 2 deletions
diff --git a/externals/dynarmic b/externals/dynarmic | |||
| Subproject 57b987c185ae6677861cbf781f08ed1649b0543 | Subproject a3cd05577c9b6c51f0f345d0e915b6feab68fe1 | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 9add5d363..65cbfe5e6 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include "core/hle/kernel/scheduler.h" | 20 | #include "core/hle/kernel/scheduler.h" |
| 21 | #include "core/hle/kernel/svc.h" | 21 | #include "core/hle/kernel/svc.h" |
| 22 | #include "core/memory.h" | 22 | #include "core/memory.h" |
| 23 | #include "core/settings.h" | ||
| 23 | 24 | ||
| 24 | namespace Core { | 25 | namespace Core { |
| 25 | 26 | ||
| @@ -144,6 +145,8 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& | |||
| 144 | config.page_table_address_space_bits = address_space_bits; | 145 | config.page_table_address_space_bits = address_space_bits; |
| 145 | config.silently_mirror_page_table = false; | 146 | config.silently_mirror_page_table = false; |
| 146 | config.absolute_offset_page_table = true; | 147 | config.absolute_offset_page_table = true; |
| 148 | config.detect_misaligned_access_via_page_table = 16 | 32 | 64 | 128; | ||
| 149 | config.only_detect_misalignment_via_page_table_on_page_boundary = true; | ||
| 147 | 150 | ||
| 148 | // Multi-process state | 151 | // Multi-process state |
| 149 | config.processor_id = core_index; | 152 | config.processor_id = core_index; |
| @@ -159,8 +162,11 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& | |||
| 159 | // Unpredictable instructions | 162 | // Unpredictable instructions |
| 160 | config.define_unpredictable_behaviour = true; | 163 | config.define_unpredictable_behaviour = true; |
| 161 | 164 | ||
| 162 | config.detect_misaligned_access_via_page_table = 16 | 32 | 64 | 128; | 165 | // Optimizations |
| 163 | config.only_detect_misalignment_via_page_table_on_page_boundary = true; | 166 | if (Settings::values.disable_cpu_opt) { |
| 167 | config.enable_optimizations = false; | ||
| 168 | config.enable_fast_dispatch = false; | ||
| 169 | } | ||
| 164 | 170 | ||
| 165 | return std::make_shared<Dynarmic::A64::Jit>(config); | 171 | return std::make_shared<Dynarmic::A64::Jit>(config); |
| 166 | } | 172 | } |
diff --git a/src/core/settings.h b/src/core/settings.h index 79ec01731..c73d1c596 100644 --- a/src/core/settings.h +++ b/src/core/settings.h | |||
| @@ -464,6 +464,7 @@ struct Values { | |||
| 464 | bool dump_nso; | 464 | bool dump_nso; |
| 465 | bool reporting_services; | 465 | bool reporting_services; |
| 466 | bool quest_flag; | 466 | bool quest_flag; |
| 467 | bool disable_cpu_opt; | ||
| 467 | 468 | ||
| 468 | // BCAT | 469 | // BCAT |
| 469 | std::string bcat_backend; | 470 | std::string bcat_backend; |
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 3b9ab38dd..7f6dfac84 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp | |||
| @@ -532,6 +532,8 @@ void Config::ReadDebuggingValues() { | |||
| 532 | Settings::values.reporting_services = | 532 | Settings::values.reporting_services = |
| 533 | ReadSetting(QStringLiteral("reporting_services"), false).toBool(); | 533 | ReadSetting(QStringLiteral("reporting_services"), false).toBool(); |
| 534 | Settings::values.quest_flag = ReadSetting(QStringLiteral("quest_flag"), false).toBool(); | 534 | Settings::values.quest_flag = ReadSetting(QStringLiteral("quest_flag"), false).toBool(); |
| 535 | Settings::values.disable_cpu_opt = | ||
| 536 | ReadSetting(QStringLiteral("disable_cpu_opt"), false).toBool(); | ||
| 535 | 537 | ||
| 536 | qt_config->endGroup(); | 538 | qt_config->endGroup(); |
| 537 | } | 539 | } |
| @@ -1001,6 +1003,7 @@ void Config::SaveDebuggingValues() { | |||
| 1001 | WriteSetting(QStringLiteral("dump_exefs"), Settings::values.dump_exefs, false); | 1003 | WriteSetting(QStringLiteral("dump_exefs"), Settings::values.dump_exefs, false); |
| 1002 | WriteSetting(QStringLiteral("dump_nso"), Settings::values.dump_nso, false); | 1004 | WriteSetting(QStringLiteral("dump_nso"), Settings::values.dump_nso, false); |
| 1003 | WriteSetting(QStringLiteral("quest_flag"), Settings::values.quest_flag, false); | 1005 | WriteSetting(QStringLiteral("quest_flag"), Settings::values.quest_flag, false); |
| 1006 | WriteSetting(QStringLiteral("disable_cpu_opt"), Settings::values.disable_cpu_opt, false); | ||
| 1004 | 1007 | ||
| 1005 | qt_config->endGroup(); | 1008 | qt_config->endGroup(); |
| 1006 | } | 1009 | } |
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp index 9631059c7..c2026763e 100644 --- a/src/yuzu/configuration/configure_debug.cpp +++ b/src/yuzu/configuration/configure_debug.cpp | |||
| @@ -36,6 +36,7 @@ void ConfigureDebug::SetConfiguration() { | |||
| 36 | ui->homebrew_args_edit->setText(QString::fromStdString(Settings::values.program_args)); | 36 | ui->homebrew_args_edit->setText(QString::fromStdString(Settings::values.program_args)); |
| 37 | ui->reporting_services->setChecked(Settings::values.reporting_services); | 37 | ui->reporting_services->setChecked(Settings::values.reporting_services); |
| 38 | ui->quest_flag->setChecked(Settings::values.quest_flag); | 38 | ui->quest_flag->setChecked(Settings::values.quest_flag); |
| 39 | ui->disable_cpu_opt->setChecked(Settings::values.disable_cpu_opt); | ||
| 39 | ui->enable_graphics_debugging->setEnabled(!Core::System::GetInstance().IsPoweredOn()); | 40 | ui->enable_graphics_debugging->setEnabled(!Core::System::GetInstance().IsPoweredOn()); |
| 40 | ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug); | 41 | ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug); |
| 41 | } | 42 | } |
| @@ -48,6 +49,7 @@ void ConfigureDebug::ApplyConfiguration() { | |||
| 48 | Settings::values.program_args = ui->homebrew_args_edit->text().toStdString(); | 49 | Settings::values.program_args = ui->homebrew_args_edit->text().toStdString(); |
| 49 | Settings::values.reporting_services = ui->reporting_services->isChecked(); | 50 | Settings::values.reporting_services = ui->reporting_services->isChecked(); |
| 50 | Settings::values.quest_flag = ui->quest_flag->isChecked(); | 51 | Settings::values.quest_flag = ui->quest_flag->isChecked(); |
| 52 | Settings::values.disable_cpu_opt = ui->disable_cpu_opt->isChecked(); | ||
| 51 | Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked(); | 53 | Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked(); |
| 52 | Debugger::ToggleConsole(); | 54 | Debugger::ToggleConsole(); |
| 53 | Log::Filter filter; | 55 | Log::Filter filter; |
diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui index e028c4c80..e0d4c4a44 100644 --- a/src/yuzu/configuration/configure_debug.ui +++ b/src/yuzu/configuration/configure_debug.ui | |||
| @@ -215,6 +215,13 @@ | |||
| 215 | </property> | 215 | </property> |
| 216 | </widget> | 216 | </widget> |
| 217 | </item> | 217 | </item> |
| 218 | <item> | ||
| 219 | <widget class="QCheckBox" name="disable_cpu_opt"> | ||
| 220 | <property name="text"> | ||
| 221 | <string>Disable CPU JIT optimizations</string> | ||
| 222 | </property> | ||
| 223 | </widget> | ||
| 224 | </item> | ||
| 218 | </layout> | 225 | </layout> |
| 219 | </widget> | 226 | </widget> |
| 220 | </item> | 227 | </item> |
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index f4cd905c9..80341747f 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp | |||
| @@ -425,6 +425,8 @@ void Config::ReadValues() { | |||
| 425 | Settings::values.reporting_services = | 425 | Settings::values.reporting_services = |
| 426 | sdl2_config->GetBoolean("Debugging", "reporting_services", false); | 426 | sdl2_config->GetBoolean("Debugging", "reporting_services", false); |
| 427 | Settings::values.quest_flag = sdl2_config->GetBoolean("Debugging", "quest_flag", false); | 427 | Settings::values.quest_flag = sdl2_config->GetBoolean("Debugging", "quest_flag", false); |
| 428 | Settings::values.disable_cpu_opt = | ||
| 429 | sdl2_config->GetBoolean("Debugging", "disable_cpu_opt", false); | ||
| 428 | 430 | ||
| 429 | const auto title_list = sdl2_config->Get("AddOns", "title_ids", ""); | 431 | const auto title_list = sdl2_config->Get("AddOns", "title_ids", ""); |
| 430 | std::stringstream ss(title_list); | 432 | std::stringstream ss(title_list); |
diff --git a/src/yuzu_cmd/default_ini.h b/src/yuzu_cmd/default_ini.h index d63d7a58e..171d16fa0 100644 --- a/src/yuzu_cmd/default_ini.h +++ b/src/yuzu_cmd/default_ini.h | |||
| @@ -280,6 +280,9 @@ dump_nso=false | |||
| 280 | # Determines whether or not yuzu will report to the game that the emulated console is in Kiosk Mode | 280 | # Determines whether or not yuzu will report to the game that the emulated console is in Kiosk Mode |
| 281 | # false: Retail/Normal Mode (default), true: Kiosk Mode | 281 | # false: Retail/Normal Mode (default), true: Kiosk Mode |
| 282 | quest_flag = | 282 | quest_flag = |
| 283 | # Determines whether or not JIT CPU optimizations are enabled | ||
| 284 | # false: Optimizations Enabled, true: Optimizations Disabled | ||
| 285 | disable_cpu_opt = | ||
| 283 | 286 | ||
| 284 | [WebService] | 287 | [WebService] |
| 285 | # Whether or not to enable telemetry | 288 | # Whether or not to enable telemetry |