summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/settings.cpp2
-rw-r--r--src/common/settings.h2
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp2
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp2
-rw-r--r--src/yuzu/CMakeLists.txt3
-rw-r--r--src/yuzu/configuration/config.cpp2
-rw-r--r--src/yuzu/configuration/configure.ui50
-rw-r--r--src/yuzu/configuration/configure_cpu.cpp18
-rw-r--r--src/yuzu/configuration/configure_cpu.h1
-rw-r--r--src/yuzu/configuration/configure_cpu.ui5
-rw-r--r--src/yuzu/configuration/configure_cpu_debug.h1
-rw-r--r--src/yuzu/configuration/configure_cpu_debug.ui94
-rw-r--r--src/yuzu/configuration/configure_debug.cpp3
-rw-r--r--src/yuzu/configuration/configure_debug.ui63
-rw-r--r--src/yuzu/configuration/configure_debug_tab.cpp38
-rw-r--r--src/yuzu/configuration/configure_debug_tab.h32
-rw-r--r--src/yuzu/configuration/configure_debug_tab.ui52
-rw-r--r--src/yuzu/configuration/configure_dialog.cpp6
18 files changed, 244 insertions, 132 deletions
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index 0061e29cc..e1973af85 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -93,7 +93,7 @@ bool IsGPULevelHigh() {
93} 93}
94 94
95bool IsFastmemEnabled() { 95bool IsFastmemEnabled() {
96 if (values.cpu_accuracy.GetValue() == CPUAccuracy::DebugMode) { 96 if (values.cpu_debug_mode) {
97 return static_cast<bool>(values.cpuopt_fastmem); 97 return static_cast<bool>(values.cpuopt_fastmem);
98 } 98 }
99 return true; 99 return true;
diff --git a/src/common/settings.h b/src/common/settings.h
index 9f7e1096b..d2e91a2c9 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -34,7 +34,6 @@ enum class CPUAccuracy : u32 {
34 Auto = 0, 34 Auto = 0,
35 Accurate = 1, 35 Accurate = 1,
36 Unsafe = 2, 36 Unsafe = 2,
37 DebugMode = 3,
38}; 37};
39 38
40/** The BasicSetting class is a simple resource manager. It defines a label and default value 39/** The BasicSetting class is a simple resource manager. It defines a label and default value
@@ -288,6 +287,7 @@ struct Values {
288 Setting<CPUAccuracy> cpu_accuracy{CPUAccuracy::Auto, "cpu_accuracy"}; 287 Setting<CPUAccuracy> cpu_accuracy{CPUAccuracy::Auto, "cpu_accuracy"};
289 // TODO: remove cpu_accuracy_first_time, migration setting added 8 July 2021 288 // TODO: remove cpu_accuracy_first_time, migration setting added 8 July 2021
290 BasicSetting<bool> cpu_accuracy_first_time{true, "cpu_accuracy_first_time"}; 289 BasicSetting<bool> cpu_accuracy_first_time{true, "cpu_accuracy_first_time"};
290 BasicSetting<bool> cpu_debug_mode{false, "cpu_debug_mode"};
291 291
292 BasicSetting<bool> cpuopt_page_tables{true, "cpuopt_page_tables"}; 292 BasicSetting<bool> cpuopt_page_tables{true, "cpuopt_page_tables"};
293 BasicSetting<bool> cpuopt_block_linking{true, "cpuopt_block_linking"}; 293 BasicSetting<bool> cpuopt_block_linking{true, "cpuopt_block_linking"};
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index c915bed2e..b0d89c539 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -150,7 +150,7 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable*
150 config.far_code_offset = 400_MiB; 150 config.far_code_offset = 400_MiB;
151 151
152 // Safe optimizations 152 // Safe optimizations
153 if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::DebugMode) { 153 if (Settings::values.cpu_debug_mode) {
154 if (!Settings::values.cpuopt_page_tables) { 154 if (!Settings::values.cpuopt_page_tables) {
155 config.page_table = nullptr; 155 config.page_table = nullptr;
156 } 156 }
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
index 9c203e4d6..bf27ffe71 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
@@ -190,7 +190,7 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable*
190 config.far_code_offset = 400_MiB; 190 config.far_code_offset = 400_MiB;
191 191
192 // Safe optimizations 192 // Safe optimizations
193 if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::DebugMode) { 193 if (Settings::values.cpu_debug_mode) {
194 if (!Settings::values.cpuopt_page_tables) { 194 if (!Settings::values.cpuopt_page_tables) {
195 config.page_table = nullptr; 195 config.page_table = nullptr;
196 } 196 }
diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt
index 634fe66a5..f870b33b1 100644
--- a/src/yuzu/CMakeLists.txt
+++ b/src/yuzu/CMakeLists.txt
@@ -52,6 +52,9 @@ add_executable(yuzu
52 configuration/configure_debug_controller.cpp 52 configuration/configure_debug_controller.cpp
53 configuration/configure_debug_controller.h 53 configuration/configure_debug_controller.h
54 configuration/configure_debug_controller.ui 54 configuration/configure_debug_controller.ui
55 configuration/configure_debug_tab.cpp
56 configuration/configure_debug_tab.h
57 configuration/configure_debug_tab.ui
55 configuration/configure_dialog.cpp 58 configuration/configure_dialog.cpp
56 configuration/configure_dialog.h 59 configuration/configure_dialog.h
57 configuration/configure_filesystem.cpp 60 configuration/configure_filesystem.cpp
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 1e77c1e51..e3ed75fe3 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -808,6 +808,7 @@ void Config::ReadCpuValues() {
808 ReadGlobalSetting(Settings::values.cpuopt_unsafe_fastmem_check); 808 ReadGlobalSetting(Settings::values.cpuopt_unsafe_fastmem_check);
809 809
810 if (global) { 810 if (global) {
811 ReadBasicSetting(Settings::values.cpu_debug_mode);
811 ReadBasicSetting(Settings::values.cpuopt_page_tables); 812 ReadBasicSetting(Settings::values.cpuopt_page_tables);
812 ReadBasicSetting(Settings::values.cpuopt_block_linking); 813 ReadBasicSetting(Settings::values.cpuopt_block_linking);
813 ReadBasicSetting(Settings::values.cpuopt_return_stack_buffer); 814 ReadBasicSetting(Settings::values.cpuopt_return_stack_buffer);
@@ -1328,6 +1329,7 @@ void Config::SaveCpuValues() {
1328 WriteGlobalSetting(Settings::values.cpuopt_unsafe_fastmem_check); 1329 WriteGlobalSetting(Settings::values.cpuopt_unsafe_fastmem_check);
1329 1330
1330 if (global) { 1331 if (global) {
1332 WriteBasicSetting(Settings::values.cpu_debug_mode);
1331 WriteBasicSetting(Settings::values.cpuopt_page_tables); 1333 WriteBasicSetting(Settings::values.cpuopt_page_tables);
1332 WriteBasicSetting(Settings::values.cpuopt_block_linking); 1334 WriteBasicSetting(Settings::values.cpuopt_block_linking);
1333 WriteBasicSetting(Settings::values.cpuopt_return_stack_buffer); 1335 WriteBasicSetting(Settings::values.cpuopt_return_stack_buffer);
diff --git a/src/yuzu/configuration/configure.ui b/src/yuzu/configuration/configure.ui
index f92c3aff3..fca9aed5f 100644
--- a/src/yuzu/configuration/configure.ui
+++ b/src/yuzu/configuration/configure.ui
@@ -41,7 +41,7 @@
41 <item> 41 <item>
42 <widget class="QTabWidget" name="tabWidget"> 42 <widget class="QTabWidget" name="tabWidget">
43 <property name="currentIndex"> 43 <property name="currentIndex">
44 <number>0</number> 44 <number>11</number>
45 </property> 45 </property>
46 <widget class="ConfigureGeneral" name="generalTab"> 46 <widget class="ConfigureGeneral" name="generalTab">
47 <property name="accessibleName"> 47 <property name="accessibleName">
@@ -107,14 +107,6 @@
107 <string>CPU</string> 107 <string>CPU</string>
108 </attribute> 108 </attribute>
109 </widget> 109 </widget>
110 <widget class="ConfigureCpuDebug" name="cpuDebugTab">
111 <property name="accessibleName">
112 <string>Debug</string>
113 </property>
114 <attribute name="title">
115 <string>Debug</string>
116 </attribute>
117 </widget>
118 <widget class="ConfigureGraphics" name="graphicsTab"> 110 <widget class="ConfigureGraphics" name="graphicsTab">
119 <property name="accessibleName"> 111 <property name="accessibleName">
120 <string>Graphics</string> 112 <string>Graphics</string>
@@ -139,7 +131,7 @@
139 <string>Audio</string> 131 <string>Audio</string>
140 </attribute> 132 </attribute>
141 </widget> 133 </widget>
142 <widget class="ConfigureDebug" name="debugTab"> 134 <widget class="ConfigureDebugTab" name="debugTab">
143 <property name="accessibleName"> 135 <property name="accessibleName">
144 <string>Debug</string> 136 <string>Debug</string>
145 </property> 137 </property>
@@ -208,24 +200,12 @@
208 <container>1</container> 200 <container>1</container>
209 </customwidget> 201 </customwidget>
210 <customwidget> 202 <customwidget>
211 <class>ConfigureDebug</class>
212 <extends>QWidget</extends>
213 <header>configuration/configure_debug.h</header>
214 <container>1</container>
215 </customwidget>
216 <customwidget>
217 <class>ConfigureCpu</class> 203 <class>ConfigureCpu</class>
218 <extends>QWidget</extends> 204 <extends>QWidget</extends>
219 <header>configuration/configure_cpu.h</header> 205 <header>configuration/configure_cpu.h</header>
220 <container>1</container> 206 <container>1</container>
221 </customwidget> 207 </customwidget>
222 <customwidget> 208 <customwidget>
223 <class>ConfigureCpuDebug</class>
224 <extends>QWidget</extends>
225 <header>configuration/configure_cpu_debug.h</header>
226 <container>1</container>
227 </customwidget>
228 <customwidget>
229 <class>ConfigureGraphics</class> 209 <class>ConfigureGraphics</class>
230 <extends>QWidget</extends> 210 <extends>QWidget</extends>
231 <header>configuration/configure_graphics.h</header> 211 <header>configuration/configure_graphics.h</header>
@@ -267,6 +247,12 @@
267 <header>configuration/configure_service.h</header> 247 <header>configuration/configure_service.h</header>
268 <container>1</container> 248 <container>1</container>
269 </customwidget> 249 </customwidget>
250 <customwidget>
251 <class>ConfigureDebugTab</class>
252 <extends>QWidget</extends>
253 <header>configuration/configure_debug_tab.h</header>
254 <container>1</container>
255 </customwidget>
270 </customwidgets> 256 </customwidgets>
271 <resources/> 257 <resources/>
272 <connections> 258 <connections>
@@ -275,12 +261,32 @@
275 <signal>accepted()</signal> 261 <signal>accepted()</signal>
276 <receiver>ConfigureDialog</receiver> 262 <receiver>ConfigureDialog</receiver>
277 <slot>accept()</slot> 263 <slot>accept()</slot>
264 <hints>
265 <hint type="sourcelabel">
266 <x>20</x>
267 <y>20</y>
268 </hint>
269 <hint type="destinationlabel">
270 <x>20</x>
271 <y>20</y>
272 </hint>
273 </hints>
278 </connection> 274 </connection>
279 <connection> 275 <connection>
280 <sender>buttonBox</sender> 276 <sender>buttonBox</sender>
281 <signal>rejected()</signal> 277 <signal>rejected()</signal>
282 <receiver>ConfigureDialog</receiver> 278 <receiver>ConfigureDialog</receiver>
283 <slot>reject()</slot> 279 <slot>reject()</slot>
280 <hints>
281 <hint type="sourcelabel">
282 <x>20</x>
283 <y>20</y>
284 </hint>
285 <hint type="destinationlabel">
286 <x>20</x>
287 <y>20</y>
288 </hint>
289 </hints>
284 </connection> 290 </connection>
285 </connections> 291 </connections>
286</ui> 292</ui>
diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp
index 13db2ba98..8d7171487 100644
--- a/src/yuzu/configuration/configure_cpu.cpp
+++ b/src/yuzu/configuration/configure_cpu.cpp
@@ -20,8 +20,6 @@ ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::Config
20 20
21 SetConfiguration(); 21 SetConfiguration();
22 22
23 connect(ui->accuracy, qOverload<int>(&QComboBox::activated), this,
24 &ConfigureCpu::AccuracyUpdated);
25 connect(ui->accuracy, qOverload<int>(&QComboBox::currentIndexChanged), this, 23 connect(ui->accuracy, qOverload<int>(&QComboBox::currentIndexChanged), this,
26 &ConfigureCpu::UpdateGroup); 24 &ConfigureCpu::UpdateGroup);
27} 25}
@@ -58,20 +56,6 @@ void ConfigureCpu::SetConfiguration() {
58 UpdateGroup(ui->accuracy->currentIndex()); 56 UpdateGroup(ui->accuracy->currentIndex());
59} 57}
60 58
61void ConfigureCpu::AccuracyUpdated(int index) {
62 if (Settings::IsConfiguringGlobal() &&
63 static_cast<Settings::CPUAccuracy>(index) == Settings::CPUAccuracy::DebugMode) {
64 const auto result = QMessageBox::warning(this, tr("Setting CPU to Debug Mode"),
65 tr("CPU Debug Mode is only intended for developer "
66 "use. Are you sure you want to enable this?"),
67 QMessageBox::Yes | QMessageBox::No);
68 if (result == QMessageBox::No) {
69 ui->accuracy->setCurrentIndex(static_cast<int>(Settings::CPUAccuracy::Accurate));
70 UpdateGroup(static_cast<int>(Settings::CPUAccuracy::Accurate));
71 }
72 }
73}
74
75void ConfigureCpu::UpdateGroup(int index) { 59void ConfigureCpu::UpdateGroup(int index) {
76 if (!Settings::IsConfiguringGlobal()) { 60 if (!Settings::IsConfiguringGlobal()) {
77 index -= ConfigurationShared::USE_GLOBAL_OFFSET; 61 index -= ConfigurationShared::USE_GLOBAL_OFFSET;
@@ -134,8 +118,6 @@ void ConfigureCpu::SetupPerGameUI() {
134 ConfigurationShared::SetColoredComboBox( 118 ConfigurationShared::SetColoredComboBox(
135 ui->accuracy, ui->widget_accuracy, 119 ui->accuracy, ui->widget_accuracy,
136 static_cast<u32>(Settings::values.cpu_accuracy.GetValue(true))); 120 static_cast<u32>(Settings::values.cpu_accuracy.GetValue(true)));
137 ui->accuracy->removeItem(static_cast<u32>(Settings::CPUAccuracy::DebugMode) +
138 ConfigurationShared::USE_GLOBAL_OFFSET);
139 121
140 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_unfuse_fma, 122 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_unfuse_fma,
141 Settings::values.cpuopt_unsafe_unfuse_fma, 123 Settings::values.cpuopt_unsafe_unfuse_fma,
diff --git a/src/yuzu/configuration/configure_cpu.h b/src/yuzu/configuration/configure_cpu.h
index b2b5f1671..154931482 100644
--- a/src/yuzu/configuration/configure_cpu.h
+++ b/src/yuzu/configuration/configure_cpu.h
@@ -29,7 +29,6 @@ private:
29 void changeEvent(QEvent* event) override; 29 void changeEvent(QEvent* event) override;
30 void RetranslateUI(); 30 void RetranslateUI();
31 31
32 void AccuracyUpdated(int index);
33 void UpdateGroup(int index); 32 void UpdateGroup(int index);
34 33
35 void SetConfiguration(); 34 void SetConfiguration();
diff --git a/src/yuzu/configuration/configure_cpu.ui b/src/yuzu/configuration/configure_cpu.ui
index 49e30bdbb..5b9457faf 100644
--- a/src/yuzu/configuration/configure_cpu.ui
+++ b/src/yuzu/configuration/configure_cpu.ui
@@ -49,11 +49,6 @@
49 <string>Unsafe</string> 49 <string>Unsafe</string>
50 </property> 50 </property>
51 </item> 51 </item>
52 <item>
53 <property name="text">
54 <string>Enable Debug Mode</string>
55 </property>
56 </item>
57 </widget> 52 </widget>
58 </item> 53 </item>
59 </layout> 54 </layout>
diff --git a/src/yuzu/configuration/configure_cpu_debug.h b/src/yuzu/configuration/configure_cpu_debug.h
index 10de55099..1b0d8050c 100644
--- a/src/yuzu/configuration/configure_cpu_debug.h
+++ b/src/yuzu/configuration/configure_cpu_debug.h
@@ -6,7 +6,6 @@
6 6
7#include <memory> 7#include <memory>
8#include <QWidget> 8#include <QWidget>
9#include "common/settings.h"
10 9
11namespace Ui { 10namespace Ui {
12class ConfigureCpuDebug; 11class ConfigureCpuDebug;
diff --git a/src/yuzu/configuration/configure_cpu_debug.ui b/src/yuzu/configuration/configure_cpu_debug.ui
index c43f89a5a..abf469b55 100644
--- a/src/yuzu/configuration/configure_cpu_debug.ui
+++ b/src/yuzu/configuration/configure_cpu_debug.ui
@@ -6,8 +6,8 @@
6 <rect> 6 <rect>
7 <x>0</x> 7 <x>0</x>
8 <y>0</y> 8 <y>0</y>
9 <width>400</width> 9 <width>592</width>
10 <height>321</height> 10 <height>503</height>
11 </rect> 11 </rect>
12 </property> 12 </property>
13 <property name="windowTitle"> 13 <property name="windowTitle">
@@ -17,140 +17,132 @@
17 <item> 17 <item>
18 <layout class="QVBoxLayout"> 18 <layout class="QVBoxLayout">
19 <item> 19 <item>
20 <widget class="QGroupBox"> 20 <widget class="QGroupBox" name="groupBox">
21 <property name="title"> 21 <property name="title">
22 <string>Toggle CPU Optimizations</string> 22 <string>Toggle CPU Optimizations</string>
23 </property> 23 </property>
24 <layout class="QVBoxLayout"> 24 <layout class="QVBoxLayout">
25 <item> 25 <item>
26 <widget class="QLabel"> 26 <widget class="QLabel" name="label">
27 <property name="wordWrap">
28 <bool>1</bool>
29 </property>
30 <property name="text"> 27 <property name="text">
31 <string> 28 <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;For debugging only.&lt;/span&gt;&lt;br/&gt;If you're not sure what these do, keep all of these enabled. &lt;br/&gt;These settings, when disabled, only take effect when CPU Debugging is enabled. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
32 &lt;div&gt; 29 </property>
33 &lt;b&gt;For debugging only.&lt;/b&gt; 30 <property name="wordWrap">
34 &lt;br&gt; 31 <bool>false</bool>
35 If you're not sure what these do, keep all of these enabled.
36 &lt;br&gt;
37 These settings, when disabled, only take effect when CPU Accuracy is "Debug Mode".
38 &lt;/div&gt;
39 </string>
40 </property> 32 </property>
41 </widget> 33 </widget>
42 </item> 34 </item>
43 <item> 35 <item>
44 <widget class="QCheckBox" name="cpuopt_page_tables"> 36 <widget class="QCheckBox" name="cpuopt_page_tables">
45 <property name="text">
46 <string>Enable inline page tables</string>
47 </property>
48 <property name="toolTip"> 37 <property name="toolTip">
49 <string> 38 <string>
50 &lt;div style="white-space: nowrap"&gt;This optimization speeds up memory accesses by the guest program.&lt;/div&gt; 39 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up memory accesses by the guest program.&lt;/div&gt;
51 &lt;div style="white-space: nowrap"&gt;Enabling it inlines accesses to PageTable::pointers into emitted code.&lt;/div&gt; 40 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it inlines accesses to PageTable::pointers into emitted code.&lt;/div&gt;
52 &lt;div style="white-space: nowrap"&gt;Disabling this forces all memory accesses to go through the Memory::Read/Memory::Write functions.&lt;/div&gt; 41 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to go through the Memory::Read/Memory::Write functions.&lt;/div&gt;
53 </string> 42 </string>
54 </property> 43 </property>
44 <property name="text">
45 <string>Enable inline page tables</string>
46 </property>
55 </widget> 47 </widget>
56 </item> 48 </item>
57 <item> 49 <item>
58 <widget class="QCheckBox" name="cpuopt_block_linking"> 50 <widget class="QCheckBox" name="cpuopt_block_linking">
59 <property name="text">
60 <string>Enable block linking</string>
61 </property>
62 <property name="toolTip"> 51 <property name="toolTip">
63 <string> 52 <string>
64 &lt;div&gt;This optimization avoids dispatcher lookups by allowing emitted basic blocks to jump directly to other basic blocks if the destination PC is static.&lt;/div&gt; 53 &lt;div&gt;This optimization avoids dispatcher lookups by allowing emitted basic blocks to jump directly to other basic blocks if the destination PC is static.&lt;/div&gt;
65 </string> 54 </string>
66 </property> 55 </property>
56 <property name="text">
57 <string>Enable block linking</string>
58 </property>
67 </widget> 59 </widget>
68 </item> 60 </item>
69 <item> 61 <item>
70 <widget class="QCheckBox" name="cpuopt_return_stack_buffer"> 62 <widget class="QCheckBox" name="cpuopt_return_stack_buffer">
71 <property name="text">
72 <string>Enable return stack buffer</string>
73 </property>
74 <property name="toolTip"> 63 <property name="toolTip">
75 <string> 64 <string>
76 &lt;div&gt;This optimization avoids dispatcher lookups by keeping track potential return addresses of BL instructions. This approximates what happens with a return stack buffer on a real CPU.&lt;/div&gt; 65 &lt;div&gt;This optimization avoids dispatcher lookups by keeping track potential return addresses of BL instructions. This approximates what happens with a return stack buffer on a real CPU.&lt;/div&gt;
77 </string> 66 </string>
78 </property> 67 </property>
68 <property name="text">
69 <string>Enable return stack buffer</string>
70 </property>
79 </widget> 71 </widget>
80 </item> 72 </item>
81 <item> 73 <item>
82 <widget class="QCheckBox" name="cpuopt_fast_dispatcher"> 74 <widget class="QCheckBox" name="cpuopt_fast_dispatcher">
83 <property name="text">
84 <string>Enable fast dispatcher</string>
85 </property>
86 <property name="toolTip"> 75 <property name="toolTip">
87 <string> 76 <string>
88 &lt;div&gt;Enable a two-tiered dispatch system. A faster dispatcher written in assembly has a small MRU cache of jump destinations is used first. If that fails, dispatch falls back to the slower C++ dispatcher.&lt;/div&gt; 77 &lt;div&gt;Enable a two-tiered dispatch system. A faster dispatcher written in assembly has a small MRU cache of jump destinations is used first. If that fails, dispatch falls back to the slower C++ dispatcher.&lt;/div&gt;
89 </string> 78 </string>
90 </property> 79 </property>
80 <property name="text">
81 <string>Enable fast dispatcher</string>
82 </property>
91 </widget> 83 </widget>
92 </item> 84 </item>
93 <item> 85 <item>
94 <widget class="QCheckBox" name="cpuopt_context_elimination"> 86 <widget class="QCheckBox" name="cpuopt_context_elimination">
95 <property name="text">
96 <string>Enable context elimination</string>
97 </property>
98 <property name="toolTip"> 87 <property name="toolTip">
99 <string> 88 <string>
100 &lt;div&gt;Enables an IR optimization that reduces unnecessary accesses to the CPU context structure.&lt;/div&gt; 89 &lt;div&gt;Enables an IR optimization that reduces unnecessary accesses to the CPU context structure.&lt;/div&gt;
101 </string> 90 </string>
102 </property> 91 </property>
92 <property name="text">
93 <string>Enable context elimination</string>
94 </property>
103 </widget> 95 </widget>
104 </item> 96 </item>
105 <item> 97 <item>
106 <widget class="QCheckBox" name="cpuopt_const_prop"> 98 <widget class="QCheckBox" name="cpuopt_const_prop">
107 <property name="text">
108 <string>Enable constant propagation</string>
109 </property>
110 <property name="toolTip"> 99 <property name="toolTip">
111 <string> 100 <string>
112 &lt;div&gt;Enables IR optimizations that involve constant propagation.&lt;/div&gt; 101 &lt;div&gt;Enables IR optimizations that involve constant propagation.&lt;/div&gt;
113 </string> 102 </string>
114 </property> 103 </property>
104 <property name="text">
105 <string>Enable constant propagation</string>
106 </property>
115 </widget> 107 </widget>
116 </item> 108 </item>
117 <item> 109 <item>
118 <widget class="QCheckBox" name="cpuopt_misc_ir"> 110 <widget class="QCheckBox" name="cpuopt_misc_ir">
119 <property name="text">
120 <string>Enable miscellaneous optimizations</string>
121 </property>
122 <property name="toolTip"> 111 <property name="toolTip">
123 <string> 112 <string>
124 &lt;div&gt;Enables miscellaneous IR optimizations.&lt;/div&gt; 113 &lt;div&gt;Enables miscellaneous IR optimizations.&lt;/div&gt;
125 </string> 114 </string>
126 </property> 115 </property>
116 <property name="text">
117 <string>Enable miscellaneous optimizations</string>
118 </property>
127 </widget> 119 </widget>
128 </item> 120 </item>
129 <item> 121 <item>
130 <widget class="QCheckBox" name="cpuopt_reduce_misalign_checks"> 122 <widget class="QCheckBox" name="cpuopt_reduce_misalign_checks">
131 <property name="text">
132 <string>Enable misalignment check reduction</string>
133 </property>
134 <property name="toolTip"> 123 <property name="toolTip">
135 <string> 124 <string>
136 &lt;div style="white-space: nowrap"&gt;When enabled, a misalignment is only triggered when an access crosses a page boundary.&lt;/div&gt; 125 &lt;div style=&quot;white-space: nowrap&quot;&gt;When enabled, a misalignment is only triggered when an access crosses a page boundary.&lt;/div&gt;
137 &lt;div style="white-space: nowrap"&gt;When disabled, a misalignment is triggered on all misaligned accesses.&lt;/div&gt; 126 &lt;div style=&quot;white-space: nowrap&quot;&gt;When disabled, a misalignment is triggered on all misaligned accesses.&lt;/div&gt;
138 </string> 127 </string>
139 </property> 128 </property>
129 <property name="text">
130 <string>Enable misalignment check reduction</string>
131 </property>
140 </widget> 132 </widget>
141 </item> 133 </item>
142 <item> 134 <item>
143 <widget class="QCheckBox" name="cpuopt_fastmem"> 135 <widget class="QCheckBox" name="cpuopt_fastmem">
144 <property name="text">
145 <string>Enable Host MMU Emulation</string>
146 </property>
147 <property name="toolTip"> 136 <property name="toolTip">
148 <string> 137 <string>
149 &lt;div style="white-space: nowrap"&gt;This optimization speeds up memory accesses by the guest program.&lt;/div&gt; 138 &lt;div style=&quot;white-space: nowrap&quot;&gt;This optimization speeds up memory accesses by the guest program.&lt;/div&gt;
150 &lt;div style="white-space: nowrap"&gt;Enabling it causes guest memory reads/writes to be done directly into memory and make use of Host's MMU.&lt;/div&gt; 139 &lt;div style=&quot;white-space: nowrap&quot;&gt;Enabling it causes guest memory reads/writes to be done directly into memory and make use of Host's MMU.&lt;/div&gt;
151 &lt;div style="white-space: nowrap"&gt;Disabling this forces all memory accesses to use Software MMU Emulation.&lt;/div&gt; 140 &lt;div style=&quot;white-space: nowrap&quot;&gt;Disabling this forces all memory accesses to use Software MMU Emulation.&lt;/div&gt;
152 </string> 141 </string>
153 </property> 142 </property>
143 <property name="text">
144 <string>Enable Host MMU Emulation</string>
145 </property>
154 </widget> 146 </widget>
155 </item> 147 </item>
156 </layout> 148 </layout>
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp
index cbe45a305..8fceb3878 100644
--- a/src/yuzu/configuration/configure_debug.cpp
+++ b/src/yuzu/configuration/configure_debug.cpp
@@ -43,6 +43,8 @@ void ConfigureDebug::SetConfiguration() {
43 ui->use_auto_stub->setChecked(Settings::values.use_auto_stub.GetValue()); 43 ui->use_auto_stub->setChecked(Settings::values.use_auto_stub.GetValue());
44 ui->enable_graphics_debugging->setEnabled(runtime_lock); 44 ui->enable_graphics_debugging->setEnabled(runtime_lock);
45 ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug.GetValue()); 45 ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug.GetValue());
46 ui->enable_cpu_debugging->setEnabled(runtime_lock);
47 ui->enable_cpu_debugging->setChecked(Settings::values.cpu_debug_mode.GetValue());
46 ui->disable_macro_jit->setEnabled(runtime_lock); 48 ui->disable_macro_jit->setEnabled(runtime_lock);
47 ui->disable_macro_jit->setChecked(Settings::values.disable_macro_jit.GetValue()); 49 ui->disable_macro_jit->setChecked(Settings::values.disable_macro_jit.GetValue());
48 ui->extended_logging->setChecked(Settings::values.extended_logging.GetValue()); 50 ui->extended_logging->setChecked(Settings::values.extended_logging.GetValue());
@@ -58,6 +60,7 @@ void ConfigureDebug::ApplyConfiguration() {
58 Settings::values.use_debug_asserts = ui->use_debug_asserts->isChecked(); 60 Settings::values.use_debug_asserts = ui->use_debug_asserts->isChecked();
59 Settings::values.use_auto_stub = ui->use_auto_stub->isChecked(); 61 Settings::values.use_auto_stub = ui->use_auto_stub->isChecked();
60 Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked(); 62 Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked();
63 Settings::values.cpu_debug_mode = ui->enable_cpu_debugging->isChecked();
61 Settings::values.disable_macro_jit = ui->disable_macro_jit->isChecked(); 64 Settings::values.disable_macro_jit = ui->disable_macro_jit->isChecked();
62 Settings::values.extended_logging = ui->extended_logging->isChecked(); 65 Settings::values.extended_logging = ui->extended_logging->isChecked();
63 Debugger::ToggleConsole(); 66 Debugger::ToggleConsole();
diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui
index c8087542f..1260ad6f0 100644
--- a/src/yuzu/configuration/configure_debug.ui
+++ b/src/yuzu/configuration/configure_debug.ui
@@ -7,7 +7,7 @@
7 <x>0</x> 7 <x>0</x>
8 <y>0</y> 8 <y>0</y>
9 <width>400</width> 9 <width>400</width>
10 <height>486</height> 10 <height>777</height>
11 </rect> 11 </rect>
12 </property> 12 </property>
13 <property name="windowTitle"> 13 <property name="windowTitle">
@@ -192,34 +192,41 @@
192 </property> 192 </property>
193 </widget> 193 </widget>
194 </item> 194 </item>
195 <item>
196 <widget class="QCheckBox" name="use_debug_asserts">
197 <property name="text">
198 <string>Enable Debug Asserts</string>
199 </property>
200 </widget>
201 </item>
202 <item>
203 <widget class="QCheckBox" name="use_auto_stub">
204 <property name="text">
205 <string>Enable Auto-Stub</string>
206 </property>
207 </widget>
208 </item>
209 <item> 195 <item>
210 <widget class="QLabel" name="label_5"> 196 <widget class="QCheckBox" name="enable_cpu_debugging">
211 <property name="font"> 197 <property name="text">
212 <font> 198 <string>Enable CPU Debugging</string>
213 <italic>true</italic> 199 </property>
214 </font> 200 </widget>
215 </property> 201 </item>
216 <property name="text"> 202 <item>
217 <string>This will be reset automatically when yuzu closes.</string> 203 <widget class="QCheckBox" name="use_debug_asserts">
218 </property> 204 <property name="text">
219 <property name="indent"> 205 <string>Enable Debug Asserts</string>
220 <number>20</number> 206 </property>
221 </property> 207 </widget>
222 </widget> 208 </item>
209 <item>
210 <widget class="QCheckBox" name="use_auto_stub">
211 <property name="text">
212 <string>Enable Auto-Stub</string>
213 </property>
214 </widget>
215 </item>
216 <item>
217 <widget class="QLabel" name="label_5">
218 <property name="font">
219 <font>
220 <italic>true</italic>
221 </font>
222 </property>
223 <property name="text">
224 <string>This will be reset automatically when yuzu closes.</string>
225 </property>
226 <property name="indent">
227 <number>20</number>
228 </property>
229 </widget>
223 </item> 230 </item>
224 </layout> 231 </layout>
225 </widget> 232 </widget>
diff --git a/src/yuzu/configuration/configure_debug_tab.cpp b/src/yuzu/configuration/configure_debug_tab.cpp
new file mode 100644
index 000000000..67d369249
--- /dev/null
+++ b/src/yuzu/configuration/configure_debug_tab.cpp
@@ -0,0 +1,38 @@
1// Copyright 2021 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "ui_configure_debug_tab.h"
6#include "yuzu/configuration/configure_debug_tab.h"
7
8ConfigureDebugTab::ConfigureDebugTab(QWidget* parent)
9 : QWidget(parent), ui(new Ui::ConfigureDebugTab) {
10 ui->setupUi(this);
11
12 SetConfiguration();
13}
14
15ConfigureDebugTab::~ConfigureDebugTab() = default;
16
17void ConfigureDebugTab::ApplyConfiguration() {
18 ui->debugTab->ApplyConfiguration();
19 ui->cpuDebugTab->ApplyConfiguration();
20}
21
22void ConfigureDebugTab::SetCurrentIndex(int index) {
23 ui->tabWidget->setCurrentIndex(index);
24}
25
26void ConfigureDebugTab::changeEvent(QEvent* event) {
27 if (event->type() == QEvent::LanguageChange) {
28 RetranslateUI();
29 }
30
31 QWidget::changeEvent(event);
32}
33
34void ConfigureDebugTab::RetranslateUI() {
35 ui->retranslateUi(this);
36}
37
38void ConfigureDebugTab::SetConfiguration() {}
diff --git a/src/yuzu/configuration/configure_debug_tab.h b/src/yuzu/configuration/configure_debug_tab.h
new file mode 100644
index 000000000..0a96d43d0
--- /dev/null
+++ b/src/yuzu/configuration/configure_debug_tab.h
@@ -0,0 +1,32 @@
1// Copyright 2021 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <memory>
8#include <QWidget>
9
10namespace Ui {
11class ConfigureDebugTab;
12}
13
14class ConfigureDebugTab : public QWidget {
15 Q_OBJECT
16
17public:
18 explicit ConfigureDebugTab(QWidget* parent = nullptr);
19 ~ConfigureDebugTab() override;
20
21 void ApplyConfiguration();
22
23 void SetCurrentIndex(int index);
24
25private:
26 void changeEvent(QEvent* event) override;
27 void RetranslateUI();
28
29 void SetConfiguration();
30
31 std::unique_ptr<Ui::ConfigureDebugTab> ui;
32};
diff --git a/src/yuzu/configuration/configure_debug_tab.ui b/src/yuzu/configuration/configure_debug_tab.ui
new file mode 100644
index 000000000..7dc6dd704
--- /dev/null
+++ b/src/yuzu/configuration/configure_debug_tab.ui
@@ -0,0 +1,52 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>ConfigureDebugTab</class>
4 <widget class="QWidget" name="ConfigureDebugTab">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>320</width>
10 <height>240</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>Form</string>
15 </property>
16 <layout class="QVBoxLayout" name="verticalLayout">
17 <item>
18 <widget class="QTabWidget" name="tabWidget">
19 <property name="currentIndex">
20 <number>1</number>
21 </property>
22 <widget class="ConfigureDebug" name="debugTab">
23 <attribute name="title">
24 <string>General</string>
25 </attribute>
26 </widget>
27 <widget class="ConfigureCpuDebug" name="cpuDebugTab">
28 <attribute name="title">
29 <string>CPU</string>
30 </attribute>
31 </widget>
32 </widget>
33 </item>
34 </layout>
35 </widget>
36 <customwidgets>
37 <customwidget>
38 <class>ConfigureDebug</class>
39 <extends>QWidget</extends>
40 <header>configuration/configure_debug.h</header>
41 <container>1</container>
42 </customwidget>
43 <customwidget>
44 <class>ConfigureCpuDebug</class>
45 <extends>QWidget</extends>
46 <header>configuration/configure_cpu_debug.h</header>
47 <container>1</container>
48 </customwidget>
49 </customwidgets>
50 <resources/>
51 <connections/>
52</ui>
diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp
index 371bc01b1..bc009b6b3 100644
--- a/src/yuzu/configuration/configure_dialog.cpp
+++ b/src/yuzu/configuration/configure_dialog.cpp
@@ -8,6 +8,7 @@
8#include <QListWidgetItem> 8#include <QListWidgetItem>
9#include <QPushButton> 9#include <QPushButton>
10#include <QSignalBlocker> 10#include <QSignalBlocker>
11#include <QTabWidget>
11#include "common/settings.h" 12#include "common/settings.h"
12#include "core/core.h" 13#include "core/core.h"
13#include "ui_configure.h" 14#include "ui_configure.h"
@@ -32,6 +33,8 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry,
32 SetConfiguration(); 33 SetConfiguration();
33 PopulateSelectionList(); 34 PopulateSelectionList();
34 35
36 connect(ui->tabWidget, &QTabWidget::currentChanged, this,
37 [this]() { ui->debugTab->SetCurrentIndex(0); });
35 connect(ui->uiTab, &ConfigureUi::LanguageChanged, this, &ConfigureDialog::OnLanguageChanged); 38 connect(ui->uiTab, &ConfigureUi::LanguageChanged, this, &ConfigureDialog::OnLanguageChanged);
36 connect(ui->selectorList, &QListWidget::itemSelectionChanged, this, 39 connect(ui->selectorList, &QListWidget::itemSelectionChanged, this,
37 &ConfigureDialog::UpdateVisibleTabs); 40 &ConfigureDialog::UpdateVisibleTabs);
@@ -59,7 +62,6 @@ void ConfigureDialog::ApplyConfiguration() {
59 ui->inputTab->ApplyConfiguration(); 62 ui->inputTab->ApplyConfiguration();
60 ui->hotkeysTab->ApplyConfiguration(registry); 63 ui->hotkeysTab->ApplyConfiguration(registry);
61 ui->cpuTab->ApplyConfiguration(); 64 ui->cpuTab->ApplyConfiguration();
62 ui->cpuDebugTab->ApplyConfiguration();
63 ui->graphicsTab->ApplyConfiguration(); 65 ui->graphicsTab->ApplyConfiguration();
64 ui->graphicsAdvancedTab->ApplyConfiguration(); 66 ui->graphicsAdvancedTab->ApplyConfiguration();
65 ui->audioTab->ApplyConfiguration(); 67 ui->audioTab->ApplyConfiguration();
@@ -102,7 +104,7 @@ void ConfigureDialog::PopulateSelectionList() {
102 const std::array<std::pair<QString, QList<QWidget*>>, 6> items{ 104 const std::array<std::pair<QString, QList<QWidget*>>, 6> items{
103 {{tr("General"), {ui->generalTab, ui->hotkeysTab, ui->uiTab, ui->webTab, ui->debugTab}}, 105 {{tr("General"), {ui->generalTab, ui->hotkeysTab, ui->uiTab, ui->webTab, ui->debugTab}},
104 {tr("System"), {ui->systemTab, ui->profileManagerTab, ui->serviceTab, ui->filesystemTab}}, 106 {tr("System"), {ui->systemTab, ui->profileManagerTab, ui->serviceTab, ui->filesystemTab}},
105 {tr("CPU"), {ui->cpuTab, ui->cpuDebugTab}}, 107 {tr("CPU"), {ui->cpuTab}},
106 {tr("Graphics"), {ui->graphicsTab, ui->graphicsAdvancedTab}}, 108 {tr("Graphics"), {ui->graphicsTab, ui->graphicsAdvancedTab}},
107 {tr("Audio"), {ui->audioTab}}, 109 {tr("Audio"), {ui->audioTab}},
108 {tr("Controls"), ui->inputTab->GetSubTabs()}}, 110 {tr("Controls"), ui->inputTab->GetSubTabs()}},