Browse Source
Merge pull request #3739 from MerryMage/disable_cpu_opt
dynarmic: Add option to disable CPU JIT optimizations
pull/15/merge
Mat M
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with
27 additions and
3 deletions
-
externals/dynarmic
-
src/core/arm/dynarmic/arm_dynarmic_64.cpp
-
src/core/settings.h
-
src/yuzu/configuration/config.cpp
-
src/yuzu/configuration/configure_debug.cpp
-
src/yuzu/configuration/configure_debug.ui
-
src/yuzu_cmd/config.cpp
-
src/yuzu_cmd/default_ini.h
|
|
|
@ -1 +1 @@ |
|
|
|
Subproject commit 57b987c185ae6677861cbf781f08ed1649b0543e |
|
|
|
Subproject commit a3cd05577c9b6c51f0f345d0e915b6feab68fe12 |
|
|
|
@ -20,6 +20,7 @@ |
|
|
|
#include "core/hle/kernel/scheduler.h"
|
|
|
|
#include "core/hle/kernel/svc.h"
|
|
|
|
#include "core/memory.h"
|
|
|
|
#include "core/settings.h"
|
|
|
|
|
|
|
|
namespace Core { |
|
|
|
|
|
|
|
@ -144,6 +145,8 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& |
|
|
|
config.page_table_address_space_bits = address_space_bits; |
|
|
|
config.silently_mirror_page_table = false; |
|
|
|
config.absolute_offset_page_table = true; |
|
|
|
config.detect_misaligned_access_via_page_table = 16 | 32 | 64 | 128; |
|
|
|
config.only_detect_misalignment_via_page_table_on_page_boundary = true; |
|
|
|
|
|
|
|
// Multi-process state
|
|
|
|
config.processor_id = core_index; |
|
|
|
@ -159,8 +162,11 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& |
|
|
|
// Unpredictable instructions
|
|
|
|
config.define_unpredictable_behaviour = true; |
|
|
|
|
|
|
|
config.detect_misaligned_access_via_page_table = 16 | 32 | 64 | 128; |
|
|
|
config.only_detect_misalignment_via_page_table_on_page_boundary = true; |
|
|
|
// Optimizations
|
|
|
|
if (Settings::values.disable_cpu_opt) { |
|
|
|
config.enable_optimizations = false; |
|
|
|
config.enable_fast_dispatch = false; |
|
|
|
} |
|
|
|
|
|
|
|
return std::make_shared<Dynarmic::A64::Jit>(config); |
|
|
|
} |
|
|
|
|
|
|
|
@ -464,6 +464,7 @@ struct Values { |
|
|
|
bool dump_nso; |
|
|
|
bool reporting_services; |
|
|
|
bool quest_flag; |
|
|
|
bool disable_cpu_opt; |
|
|
|
|
|
|
|
// BCAT |
|
|
|
std::string bcat_backend; |
|
|
|
|
|
|
|
@ -532,6 +532,8 @@ void Config::ReadDebuggingValues() { |
|
|
|
Settings::values.reporting_services = |
|
|
|
ReadSetting(QStringLiteral("reporting_services"), false).toBool(); |
|
|
|
Settings::values.quest_flag = ReadSetting(QStringLiteral("quest_flag"), false).toBool(); |
|
|
|
Settings::values.disable_cpu_opt = |
|
|
|
ReadSetting(QStringLiteral("disable_cpu_opt"), false).toBool(); |
|
|
|
|
|
|
|
qt_config->endGroup(); |
|
|
|
} |
|
|
|
@ -1001,6 +1003,7 @@ void Config::SaveDebuggingValues() { |
|
|
|
WriteSetting(QStringLiteral("dump_exefs"), Settings::values.dump_exefs, false); |
|
|
|
WriteSetting(QStringLiteral("dump_nso"), Settings::values.dump_nso, false); |
|
|
|
WriteSetting(QStringLiteral("quest_flag"), Settings::values.quest_flag, false); |
|
|
|
WriteSetting(QStringLiteral("disable_cpu_opt"), Settings::values.disable_cpu_opt, false); |
|
|
|
|
|
|
|
qt_config->endGroup(); |
|
|
|
} |
|
|
|
|
|
|
|
@ -36,6 +36,7 @@ void ConfigureDebug::SetConfiguration() { |
|
|
|
ui->homebrew_args_edit->setText(QString::fromStdString(Settings::values.program_args)); |
|
|
|
ui->reporting_services->setChecked(Settings::values.reporting_services); |
|
|
|
ui->quest_flag->setChecked(Settings::values.quest_flag); |
|
|
|
ui->disable_cpu_opt->setChecked(Settings::values.disable_cpu_opt); |
|
|
|
ui->enable_graphics_debugging->setEnabled(!Core::System::GetInstance().IsPoweredOn()); |
|
|
|
ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug); |
|
|
|
} |
|
|
|
@ -48,6 +49,7 @@ void ConfigureDebug::ApplyConfiguration() { |
|
|
|
Settings::values.program_args = ui->homebrew_args_edit->text().toStdString(); |
|
|
|
Settings::values.reporting_services = ui->reporting_services->isChecked(); |
|
|
|
Settings::values.quest_flag = ui->quest_flag->isChecked(); |
|
|
|
Settings::values.disable_cpu_opt = ui->disable_cpu_opt->isChecked(); |
|
|
|
Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked(); |
|
|
|
Debugger::ToggleConsole(); |
|
|
|
Log::Filter filter; |
|
|
|
|
|
|
|
@ -215,6 +215,13 @@ |
|
|
|
</property> |
|
|
|
</widget> |
|
|
|
</item> |
|
|
|
<item> |
|
|
|
<widget class="QCheckBox" name="disable_cpu_opt"> |
|
|
|
<property name="text"> |
|
|
|
<string>Disable CPU JIT optimizations</string> |
|
|
|
</property> |
|
|
|
</widget> |
|
|
|
</item> |
|
|
|
</layout> |
|
|
|
</widget> |
|
|
|
</item> |
|
|
|
|
|
|
|
@ -425,6 +425,8 @@ void Config::ReadValues() { |
|
|
|
Settings::values.reporting_services = |
|
|
|
sdl2_config->GetBoolean("Debugging", "reporting_services", false); |
|
|
|
Settings::values.quest_flag = sdl2_config->GetBoolean("Debugging", "quest_flag", false); |
|
|
|
Settings::values.disable_cpu_opt = |
|
|
|
sdl2_config->GetBoolean("Debugging", "disable_cpu_opt", false); |
|
|
|
|
|
|
|
const auto title_list = sdl2_config->Get("AddOns", "title_ids", ""); |
|
|
|
std::stringstream ss(title_list); |
|
|
|
|
|
|
|
@ -280,6 +280,9 @@ dump_nso=false |
|
|
|
# Determines whether or not yuzu will report to the game that the emulated console is in Kiosk Mode |
|
|
|
# false: Retail/Normal Mode (default), true: Kiosk Mode |
|
|
|
quest_flag = |
|
|
|
# Determines whether or not JIT CPU optimizations are enabled |
|
|
|
# false: Optimizations Enabled, true: Optimizations Disabled |
|
|
|
disable_cpu_opt = |
|
|
|
|
|
|
|
[WebService] |
|
|
|
# Whether or not to enable telemetry |
|
|
|
|