summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Mat M2020-04-20 14:19:18 -0400
committerGravatar GitHub2020-04-20 14:19:18 -0400
commit200f69d2ffa11bb902c2d9cabb49027f4781fe11 (patch)
tree028ddae62e98d6498ecd9363f020717cf22b05ea
parentMerge pull request #3741 from FearlessTobi/silence-warnings (diff)
parentdynarmic: Add option to disable CPU JIT optimizations (diff)
downloadyuzu-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/dynarmic0
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp10
-rw-r--r--src/core/settings.h1
-rw-r--r--src/yuzu/configuration/config.cpp3
-rw-r--r--src/yuzu/configuration/configure_debug.cpp2
-rw-r--r--src/yuzu/configuration/configure_debug.ui7
-rw-r--r--src/yuzu_cmd/config.cpp2
-rw-r--r--src/yuzu_cmd/default_ini.h3
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
24namespace Core { 25namespace 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
282quest_flag = 282quest_flag =
283# Determines whether or not JIT CPU optimizations are enabled
284# false: Optimizations Enabled, true: Optimizations Disabled
285disable_cpu_opt =
283 286
284[WebService] 287[WebService]
285# Whether or not to enable telemetry 288# Whether or not to enable telemetry