summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/common/settings.cpp6
-rw-r--r--src/yuzu/configuration/config.cpp42
-rw-r--r--src/yuzu/configuration/configuration_shared.cpp7
-rw-r--r--src/yuzu/configuration/configuration_shared.h2
-rw-r--r--src/yuzu/configuration/configure_audio.cpp3
-rw-r--r--src/yuzu/configuration/configure_cpu.cpp87
-rw-r--r--src/yuzu/configuration/configure_cpu.h10
-rw-r--r--src/yuzu/configuration/configure_cpu.ui90
-rw-r--r--src/yuzu/configuration/configure_general.cpp4
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.cpp3
-rw-r--r--src/yuzu/configuration/configure_per_game.cpp1
-rw-r--r--src/yuzu/configuration/configure_per_game.ui11
-rw-r--r--src/yuzu/configuration/configure_system.cpp3
13 files changed, 181 insertions, 88 deletions
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index b9a549c81..7c8fced59 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -106,6 +106,12 @@ void RestoreGlobalState(bool is_powered_on) {
106 // Core 106 // Core
107 values.use_multi_core.SetGlobal(true); 107 values.use_multi_core.SetGlobal(true);
108 108
109 // CPU
110 values.cpu_accuracy.SetGlobal(true);
111 values.cpuopt_unsafe_unfuse_fma.SetGlobal(true);
112 values.cpuopt_unsafe_reduce_fp_error.SetGlobal(true);
113 values.cpuopt_unsafe_inaccurate_nan.SetGlobal(true);
114
109 // Renderer 115 // Renderer
110 values.renderer_backend.SetGlobal(true); 116 values.renderer_backend.SetGlobal(true);
111 values.vulkan_device.SetGlobal(true); 117 values.vulkan_device.SetGlobal(true);
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 24d46c7cc..c6135919f 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -736,9 +736,16 @@ void Config::ReadPathValues() {
736void Config::ReadCpuValues() { 736void Config::ReadCpuValues() {
737 qt_config->beginGroup(QStringLiteral("Cpu")); 737 qt_config->beginGroup(QStringLiteral("Cpu"));
738 738
739 if (global) { 739 ReadSettingGlobal(Settings::values.cpu_accuracy, QStringLiteral("cpu_accuracy"), 0);
740 ReadSettingGlobal(Settings::values.cpu_accuracy, QStringLiteral("cpu_accuracy"), 0); 740
741 ReadSettingGlobal(Settings::values.cpuopt_unsafe_unfuse_fma,
742 QStringLiteral("cpuopt_unsafe_unfuse_fma"), true);
743 ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error,
744 QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true);
745 ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan,
746 QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true);
741 747
748 if (global) {
742 Settings::values.cpuopt_page_tables = 749 Settings::values.cpuopt_page_tables =
743 ReadSetting(QStringLiteral("cpuopt_page_tables"), true).toBool(); 750 ReadSetting(QStringLiteral("cpuopt_page_tables"), true).toBool();
744 Settings::values.cpuopt_block_linking = 751 Settings::values.cpuopt_block_linking =
@@ -755,13 +762,6 @@ void Config::ReadCpuValues() {
755 ReadSetting(QStringLiteral("cpuopt_misc_ir"), true).toBool(); 762 ReadSetting(QStringLiteral("cpuopt_misc_ir"), true).toBool();
756 Settings::values.cpuopt_reduce_misalign_checks = 763 Settings::values.cpuopt_reduce_misalign_checks =
757 ReadSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), true).toBool(); 764 ReadSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), true).toBool();
758
759 ReadSettingGlobal(Settings::values.cpuopt_unsafe_unfuse_fma,
760 QStringLiteral("cpuopt_unsafe_unfuse_fma"), true);
761 ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error,
762 QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true);
763 ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan,
764 QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true);
765 } 765 }
766 766
767 qt_config->endGroup(); 767 qt_config->endGroup();
@@ -1312,12 +1312,19 @@ void Config::SavePathValues() {
1312void Config::SaveCpuValues() { 1312void Config::SaveCpuValues() {
1313 qt_config->beginGroup(QStringLiteral("Cpu")); 1313 qt_config->beginGroup(QStringLiteral("Cpu"));
1314 1314
1315 if (global) { 1315 WriteSettingGlobal(QStringLiteral("cpu_accuracy"),
1316 WriteSettingGlobal(QStringLiteral("cpu_accuracy"), 1316 static_cast<u32>(Settings::values.cpu_accuracy.GetValue(global)),
1317 static_cast<u32>(Settings::values.cpu_accuracy.GetValue(global)), 1317 Settings::values.cpu_accuracy.UsingGlobal(),
1318 Settings::values.renderer_backend.UsingGlobal(), 1318 static_cast<u32>(Settings::CPUAccuracy::Accurate));
1319 static_cast<u32>(Settings::CPUAccuracy::Accurate)); 1319
1320 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_unfuse_fma"),
1321 Settings::values.cpuopt_unsafe_unfuse_fma, true);
1322 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"),
1323 Settings::values.cpuopt_unsafe_reduce_fp_error, true);
1324 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"),
1325 Settings::values.cpuopt_unsafe_inaccurate_nan, true);
1320 1326
1327 if (global) {
1321 WriteSetting(QStringLiteral("cpuopt_page_tables"), Settings::values.cpuopt_page_tables, 1328 WriteSetting(QStringLiteral("cpuopt_page_tables"), Settings::values.cpuopt_page_tables,
1322 true); 1329 true);
1323 WriteSetting(QStringLiteral("cpuopt_block_linking"), Settings::values.cpuopt_block_linking, 1330 WriteSetting(QStringLiteral("cpuopt_block_linking"), Settings::values.cpuopt_block_linking,
@@ -1332,13 +1339,6 @@ void Config::SaveCpuValues() {
1332 WriteSetting(QStringLiteral("cpuopt_misc_ir"), Settings::values.cpuopt_misc_ir, true); 1339 WriteSetting(QStringLiteral("cpuopt_misc_ir"), Settings::values.cpuopt_misc_ir, true);
1333 WriteSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), 1340 WriteSetting(QStringLiteral("cpuopt_reduce_misalign_checks"),
1334 Settings::values.cpuopt_reduce_misalign_checks, true); 1341 Settings::values.cpuopt_reduce_misalign_checks, true);
1335
1336 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_unfuse_fma"),
1337 Settings::values.cpuopt_unsafe_unfuse_fma, true);
1338 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"),
1339 Settings::values.cpuopt_unsafe_reduce_fp_error, true);
1340 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"),
1341 Settings::values.cpuopt_unsafe_inaccurate_nan, true);
1342 } 1342 }
1343 1343
1344 qt_config->endGroup(); 1344 qt_config->endGroup();
diff --git a/src/yuzu/configuration/configuration_shared.cpp b/src/yuzu/configuration/configuration_shared.cpp
index be6e0b668..83ec83745 100644
--- a/src/yuzu/configuration/configuration_shared.cpp
+++ b/src/yuzu/configuration/configuration_shared.cpp
@@ -84,6 +84,13 @@ void ConfigurationShared::SetPerGameSetting(
84 ConfigurationShared::USE_GLOBAL_OFFSET); 84 ConfigurationShared::USE_GLOBAL_OFFSET);
85} 85}
86 86
87void ConfigurationShared::SetPerGameSetting(
88 QComboBox* combobox, const Settings::Setting<Settings::CPUAccuracy>* setting) {
89 combobox->setCurrentIndex(setting->UsingGlobal() ? ConfigurationShared::USE_GLOBAL_INDEX
90 : static_cast<int>(setting->GetValue()) +
91 ConfigurationShared::USE_GLOBAL_OFFSET);
92}
93
87void ConfigurationShared::SetHighlight(QWidget* widget, bool highlighted) { 94void ConfigurationShared::SetHighlight(QWidget* widget, bool highlighted) {
88 if (highlighted) { 95 if (highlighted) {
89 widget->setStyleSheet(QStringLiteral("QWidget#%1 { background-color:rgba(0,203,255,0.5) }") 96 widget->setStyleSheet(QStringLiteral("QWidget#%1 { background-color:rgba(0,203,255,0.5) }")
diff --git a/src/yuzu/configuration/configuration_shared.h b/src/yuzu/configuration/configuration_shared.h
index 0072dfe7f..13f313a93 100644
--- a/src/yuzu/configuration/configuration_shared.h
+++ b/src/yuzu/configuration/configuration_shared.h
@@ -39,6 +39,8 @@ void SetPerGameSetting(QComboBox* combobox,
39 const Settings::Setting<Settings::RendererBackend>* setting); 39 const Settings::Setting<Settings::RendererBackend>* setting);
40void SetPerGameSetting(QComboBox* combobox, 40void SetPerGameSetting(QComboBox* combobox,
41 const Settings::Setting<Settings::GPUAccuracy>* setting); 41 const Settings::Setting<Settings::GPUAccuracy>* setting);
42void SetPerGameSetting(QComboBox* combobox,
43 const Settings::Setting<Settings::CPUAccuracy>* setting);
42 44
43// (Un)highlights a Qt UI element 45// (Un)highlights a Qt UI element
44void SetHighlight(QWidget* widget, bool highlighted); 46void SetHighlight(QWidget* widget, bool highlighted);
diff --git a/src/yuzu/configuration/configure_audio.cpp b/src/yuzu/configuration/configure_audio.cpp
index 6c18e9131..fc0191432 100644
--- a/src/yuzu/configuration/configure_audio.cpp
+++ b/src/yuzu/configuration/configure_audio.cpp
@@ -100,8 +100,7 @@ void ConfigureAudio::SetVolumeIndicatorText(int percentage) {
100 100
101void ConfigureAudio::ApplyConfiguration() { 101void ConfigureAudio::ApplyConfiguration() {
102 ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_audio_stretching, 102 ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_audio_stretching,
103 ui->toggle_audio_stretching, 103 ui->toggle_audio_stretching, enable_audio_stretching);
104 enable_audio_stretching);
105 104
106 if (Settings::IsConfiguringGlobal()) { 105 if (Settings::IsConfiguringGlobal()) {
107 Settings::values.sink_id = 106 Settings::values.sink_id =
diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp
index a59ea3087..901e54e0d 100644
--- a/src/yuzu/configuration/configure_cpu.cpp
+++ b/src/yuzu/configuration/configure_cpu.cpp
@@ -10,11 +10,14 @@
10#include "common/settings.h" 10#include "common/settings.h"
11#include "core/core.h" 11#include "core/core.h"
12#include "ui_configure_cpu.h" 12#include "ui_configure_cpu.h"
13#include "yuzu/configuration/configuration_shared.h"
13#include "yuzu/configuration/configure_cpu.h" 14#include "yuzu/configuration/configure_cpu.h"
14 15
15ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::ConfigureCpu) { 16ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::ConfigureCpu) {
16 ui->setupUi(this); 17 ui->setupUi(this);
17 18
19 SetupPerGameUI();
20
18 SetConfiguration(); 21 SetConfiguration();
19 22
20 connect(ui->accuracy, qOverload<int>(&QComboBox::activated), this, 23 connect(ui->accuracy, qOverload<int>(&QComboBox::activated), this,
@@ -29,21 +32,29 @@ void ConfigureCpu::SetConfiguration() {
29 const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn(); 32 const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn();
30 33
31 ui->accuracy->setEnabled(runtime_lock); 34 ui->accuracy->setEnabled(runtime_lock);
32 ui->accuracy->setCurrentIndex(static_cast<int>(Settings::values.cpu_accuracy.GetValue()));
33 UpdateGroup(static_cast<int>(Settings::values.cpu_accuracy.GetValue()));
34
35 ui->cpuopt_unsafe_unfuse_fma->setEnabled(runtime_lock); 35 ui->cpuopt_unsafe_unfuse_fma->setEnabled(runtime_lock);
36 ui->cpuopt_unsafe_unfuse_fma->setChecked(Settings::values.cpuopt_unsafe_unfuse_fma.GetValue());
37 ui->cpuopt_unsafe_reduce_fp_error->setEnabled(runtime_lock); 36 ui->cpuopt_unsafe_reduce_fp_error->setEnabled(runtime_lock);
37 ui->cpuopt_unsafe_inaccurate_nan->setEnabled(runtime_lock);
38
39 ui->cpuopt_unsafe_unfuse_fma->setChecked(Settings::values.cpuopt_unsafe_unfuse_fma.GetValue());
38 ui->cpuopt_unsafe_reduce_fp_error->setChecked( 40 ui->cpuopt_unsafe_reduce_fp_error->setChecked(
39 Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()); 41 Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue());
40 ui->cpuopt_unsafe_inaccurate_nan->setEnabled(runtime_lock);
41 ui->cpuopt_unsafe_inaccurate_nan->setChecked( 42 ui->cpuopt_unsafe_inaccurate_nan->setChecked(
42 Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()); 43 Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue());
44
45 if (Settings::IsConfiguringGlobal()) {
46 ui->accuracy->setCurrentIndex(static_cast<int>(Settings::values.cpu_accuracy.GetValue()));
47 } else {
48 ConfigurationShared::SetPerGameSetting(ui->accuracy, &Settings::values.cpu_accuracy);
49 ConfigurationShared::SetHighlight(ui->widget_accuracy,
50 !Settings::values.cpu_accuracy.UsingGlobal());
51 }
52 UpdateGroup(ui->accuracy->currentIndex());
43} 53}
44 54
45void ConfigureCpu::AccuracyUpdated(int index) { 55void ConfigureCpu::AccuracyUpdated(int index) {
46 if (static_cast<Settings::CPUAccuracy>(index) == Settings::CPUAccuracy::DebugMode) { 56 if (Settings::IsConfiguringGlobal() &&
57 static_cast<Settings::CPUAccuracy>(index) == Settings::CPUAccuracy::DebugMode) {
47 const auto result = QMessageBox::warning(this, tr("Setting CPU to Debug Mode"), 58 const auto result = QMessageBox::warning(this, tr("Setting CPU to Debug Mode"),
48 tr("CPU Debug Mode is only intended for developer " 59 tr("CPU Debug Mode is only intended for developer "
49 "use. Are you sure you want to enable this?"), 60 "use. Are you sure you want to enable this?"),
@@ -56,18 +67,42 @@ void ConfigureCpu::AccuracyUpdated(int index) {
56} 67}
57 68
58void ConfigureCpu::UpdateGroup(int index) { 69void ConfigureCpu::UpdateGroup(int index) {
59 ui->unsafe_group->setVisible(static_cast<Settings::CPUAccuracy>(index) == 70 if (Settings::IsConfiguringGlobal()) {
60 Settings::CPUAccuracy::Unsafe); 71 ui->unsafe_group->setVisible(static_cast<Settings::CPUAccuracy>(index) ==
72 Settings::CPUAccuracy::Unsafe);
73 } else {
74 ui->unsafe_group->setVisible(
75 static_cast<Settings::CPUAccuracy>(index - ConfigurationShared::USE_GLOBAL_OFFSET) ==
76 Settings::CPUAccuracy::Unsafe);
77 }
61} 78}
62 79
63void ConfigureCpu::ApplyConfiguration() { 80void ConfigureCpu::ApplyConfiguration() {
64 Settings::values.cpu_accuracy.SetValue( 81 ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_unfuse_fma,
65 static_cast<Settings::CPUAccuracy>(ui->accuracy->currentIndex())); 82 ui->cpuopt_unsafe_unfuse_fma,
66 Settings::values.cpuopt_unsafe_unfuse_fma.SetValue(ui->cpuopt_unsafe_unfuse_fma->isChecked()); 83 cpuopt_unsafe_unfuse_fma);
67 Settings::values.cpuopt_unsafe_reduce_fp_error.SetValue( 84 ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_reduce_fp_error,
68 ui->cpuopt_unsafe_reduce_fp_error->isChecked()); 85 ui->cpuopt_unsafe_reduce_fp_error,
69 Settings::values.cpuopt_unsafe_inaccurate_nan.SetValue( 86 cpuopt_unsafe_reduce_fp_error);
70 ui->cpuopt_unsafe_inaccurate_nan->isChecked()); 87 ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_inaccurate_nan,
88 ui->cpuopt_unsafe_inaccurate_nan,
89 cpuopt_unsafe_inaccurate_nan);
90
91 if (Settings::IsConfiguringGlobal()) {
92 // Guard if during game and set to game-specific value
93 if (Settings::values.cpu_accuracy.UsingGlobal()) {
94 Settings::values.cpu_accuracy.SetValue(
95 static_cast<Settings::CPUAccuracy>(ui->accuracy->currentIndex()));
96 }
97 } else {
98 if (ui->accuracy->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) {
99 Settings::values.cpu_accuracy.SetGlobal(true);
100 } else {
101 Settings::values.cpu_accuracy.SetGlobal(false);
102 Settings::values.cpu_accuracy.SetValue(static_cast<Settings::CPUAccuracy>(
103 ui->accuracy->currentIndex() - ConfigurationShared::USE_GLOBAL_OFFSET));
104 }
105 }
71} 106}
72 107
73void ConfigureCpu::changeEvent(QEvent* event) { 108void ConfigureCpu::changeEvent(QEvent* event) {
@@ -81,3 +116,25 @@ void ConfigureCpu::changeEvent(QEvent* event) {
81void ConfigureCpu::RetranslateUI() { 116void ConfigureCpu::RetranslateUI() {
82 ui->retranslateUi(this); 117 ui->retranslateUi(this);
83} 118}
119
120void ConfigureCpu::SetupPerGameUI() {
121 if (Settings::IsConfiguringGlobal()) {
122 return;
123 }
124
125 ConfigurationShared::SetColoredComboBox(
126 ui->accuracy, ui->widget_accuracy,
127 static_cast<u32>(Settings::values.cpu_accuracy.GetValue(true)));
128 ui->accuracy->removeItem(static_cast<u32>(Settings::CPUAccuracy::DebugMode) +
129 ConfigurationShared::USE_GLOBAL_OFFSET);
130
131 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_unfuse_fma,
132 Settings::values.cpuopt_unsafe_unfuse_fma,
133 cpuopt_unsafe_unfuse_fma);
134 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_reduce_fp_error,
135 Settings::values.cpuopt_unsafe_reduce_fp_error,
136 cpuopt_unsafe_reduce_fp_error);
137 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_inaccurate_nan,
138 Settings::values.cpuopt_unsafe_inaccurate_nan,
139 cpuopt_unsafe_inaccurate_nan);
140}
diff --git a/src/yuzu/configuration/configure_cpu.h b/src/yuzu/configuration/configure_cpu.h
index ef77b2e7e..8e2eeb7a6 100644
--- a/src/yuzu/configuration/configure_cpu.h
+++ b/src/yuzu/configuration/configure_cpu.h
@@ -8,6 +8,10 @@
8#include <QWidget> 8#include <QWidget>
9#include "common/settings.h" 9#include "common/settings.h"
10 10
11namespace ConfigurationShared {
12enum class CheckState;
13}
14
11namespace Ui { 15namespace Ui {
12class ConfigureCpu; 16class ConfigureCpu;
13} 17}
@@ -30,5 +34,11 @@ private:
30 34
31 void SetConfiguration(); 35 void SetConfiguration();
32 36
37 void SetupPerGameUI();
38
33 std::unique_ptr<Ui::ConfigureCpu> ui; 39 std::unique_ptr<Ui::ConfigureCpu> ui;
40
41 ConfigurationShared::CheckState cpuopt_unsafe_unfuse_fma;
42 ConfigurationShared::CheckState cpuopt_unsafe_reduce_fp_error;
43 ConfigurationShared::CheckState cpuopt_unsafe_inaccurate_nan;
34}; 44};
diff --git a/src/yuzu/configuration/configure_cpu.ui b/src/yuzu/configuration/configure_cpu.ui
index bcd0962e9..d0e7e7bfe 100644
--- a/src/yuzu/configuration/configure_cpu.ui
+++ b/src/yuzu/configuration/configure_cpu.ui
@@ -23,42 +23,44 @@
23 </property> 23 </property>
24 <layout class="QVBoxLayout"> 24 <layout class="QVBoxLayout">
25 <item> 25 <item>
26 <layout class="QHBoxLayout"> 26 <widget class="QWidget" name="widget_accuracy" native="true">
27 <item> 27 <layout class="QHBoxLayout" name="layout_accuracy">
28 <widget class="QLabel"> 28 <item>
29 <property name="text"> 29 <widget class="QLabel" name="label">
30 <string>Accuracy:</string>
31 </property>
32 </widget>
33 </item>
34 <item>
35 <widget class="QComboBox" name="accuracy">
36 <item>
37 <property name="text"> 30 <property name="text">
38 <string>Accurate</string> 31 <string>Accuracy:</string>
39 </property> 32 </property>
40 </item> 33 </widget>
41 <item> 34 </item>
42 <property name="text"> 35 <item>
43 <string>Unsafe</string> 36 <widget class="QComboBox" name="accuracy">
44 </property> 37 <item>
45 </item> 38 <property name="text">
46 <item> 39 <string>Accurate</string>
47 <property name="text"> 40 </property>
48 <string>Enable Debug Mode</string> 41 </item>
49 </property> 42 <item>
50 </item> 43 <property name="text">
51 </widget> 44 <string>Unsafe</string>
52 </item> 45 </property>
53 </layout> 46 </item>
47 <item>
48 <property name="text">
49 <string>Enable Debug Mode</string>
50 </property>
51 </item>
52 </widget>
53 </item>
54 </layout>
55 </widget>
54 </item> 56 </item>
55 <item> 57 <item>
56 <widget class="QLabel"> 58 <widget class="QLabel" name="label">
57 <property name="wordWrap">
58 <bool>1</bool>
59 </property>
60 <property name="text"> 59 <property name="text">
61 <string>We recommend setting accuracy to "Accurate".</string> 60 <string>We recommend setting accuracy to &quot;Accurate&quot;.</string>
61 </property>
62 <property name="wordWrap">
63 <bool>false</bool>
62 </property> 64 </property>
63 </widget> 65 </widget>
64 </item> 66 </item>
@@ -76,49 +78,49 @@
76 </property> 78 </property>
77 <layout class="QVBoxLayout"> 79 <layout class="QVBoxLayout">
78 <item> 80 <item>
79 <widget class="QLabel"> 81 <widget class="QLabel" name="label">
80 <property name="wordWrap">
81 <bool>1</bool>
82 </property>
83 <property name="text"> 82 <property name="text">
84 <string>These settings reduce accuracy for speed.</string> 83 <string>These settings reduce accuracy for speed.</string>
85 </property> 84 </property>
85 <property name="wordWrap">
86 <bool>false</bool>
87 </property>
86 </widget> 88 </widget>
87 </item> 89 </item>
88 <item> 90 <item>
89 <widget class="QCheckBox" name="cpuopt_unsafe_unfuse_fma"> 91 <widget class="QCheckBox" name="cpuopt_unsafe_unfuse_fma">
90 <property name="text">
91 <string>Unfuse FMA (improve performance on CPUs without FMA)</string>
92 </property>
93 <property name="toolTip"> 92 <property name="toolTip">
94 <string> 93 <string>
95 &lt;div&gt;This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.&lt;/div&gt; 94 &lt;div&gt;This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.&lt;/div&gt;
96 </string> 95 </string>
97 </property> 96 </property>
97 <property name="text">
98 <string>Unfuse FMA (improve performance on CPUs without FMA)</string>
99 </property>
98 </widget> 100 </widget>
99 </item> 101 </item>
100 <item> 102 <item>
101 <widget class="QCheckBox" name="cpuopt_unsafe_reduce_fp_error"> 103 <widget class="QCheckBox" name="cpuopt_unsafe_reduce_fp_error">
102 <property name="text">
103 <string>Faster FRSQRTE and FRECPE</string>
104 </property>
105 <property name="toolTip"> 104 <property name="toolTip">
106 <string> 105 <string>
107 &lt;div&gt;This option improves the speed of some approximate floating-point functions by using less accurate native approximations.&lt;/div&gt; 106 &lt;div&gt;This option improves the speed of some approximate floating-point functions by using less accurate native approximations.&lt;/div&gt;
108 </string> 107 </string>
109 </property> 108 </property>
109 <property name="text">
110 <string>Faster FRSQRTE and FRECPE</string>
111 </property>
110 </widget> 112 </widget>
111 </item> 113 </item>
112 <item> 114 <item>
113 <widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan"> 115 <widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan">
114 <property name="text">
115 <string>Inaccurate NaN handling</string>
116 </property>
117 <property name="toolTip"> 116 <property name="toolTip">
118 <string> 117 <string>
119 &lt;div&gt;This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.&lt;/div&gt; 118 &lt;div&gt;This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.&lt;/div&gt;
120 </string> 119 </string>
121 </property> 120 </property>
121 <property name="text">
122 <string>Inaccurate NaN handling</string>
123 </property>
122 </widget> 124 </widget>
123 </item> 125 </item>
124 </layout> 126 </layout>
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index 68c8aeb19..55a6a37bd 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -50,8 +50,8 @@ void ConfigureGeneral::SetConfiguration() {
50} 50}
51 51
52void ConfigureGeneral::ApplyConfiguration() { 52void ConfigureGeneral::ApplyConfiguration() {
53 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_multi_core, 53 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_multi_core, ui->use_multi_core,
54 ui->use_multi_core, use_multi_core); 54 use_multi_core);
55 55
56 if (Settings::IsConfiguringGlobal()) { 56 if (Settings::IsConfiguringGlobal()) {
57 UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked(); 57 UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked();
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp
index 94e634986..35bf9c6be 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.cpp
+++ b/src/yuzu/configuration/configure_graphics_advanced.cpp
@@ -56,8 +56,7 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {
56 56
57 ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy, 57 ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy,
58 ui->anisotropic_filtering_combobox); 58 ui->anisotropic_filtering_combobox);
59 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync, 59 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync, use_vsync);
60 use_vsync);
61 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_assembly_shaders, 60 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_assembly_shaders,
62 ui->use_assembly_shaders, use_assembly_shaders); 61 ui->use_assembly_shaders, use_assembly_shaders);
63 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders, 62 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders,
diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp
index bd91ebc42..f550567e2 100644
--- a/src/yuzu/configuration/configure_per_game.cpp
+++ b/src/yuzu/configuration/configure_per_game.cpp
@@ -52,6 +52,7 @@ ConfigurePerGame::~ConfigurePerGame() = default;
52void ConfigurePerGame::ApplyConfiguration() { 52void ConfigurePerGame::ApplyConfiguration() {
53 ui->addonsTab->ApplyConfiguration(); 53 ui->addonsTab->ApplyConfiguration();
54 ui->generalTab->ApplyConfiguration(); 54 ui->generalTab->ApplyConfiguration();
55 ui->cpuTab->ApplyConfiguration();
55 ui->systemTab->ApplyConfiguration(); 56 ui->systemTab->ApplyConfiguration();
56 ui->graphicsTab->ApplyConfiguration(); 57 ui->graphicsTab->ApplyConfiguration();
57 ui->graphicsAdvancedTab->ApplyConfiguration(); 58 ui->graphicsAdvancedTab->ApplyConfiguration();
diff --git a/src/yuzu/configuration/configure_per_game.ui b/src/yuzu/configuration/configure_per_game.ui
index 25975b3b9..adf6d0b39 100644
--- a/src/yuzu/configuration/configure_per_game.ui
+++ b/src/yuzu/configuration/configure_per_game.ui
@@ -235,6 +235,11 @@
235 <string>System</string> 235 <string>System</string>
236 </attribute> 236 </attribute>
237 </widget> 237 </widget>
238 <widget class="ConfigureCpu" name="cpuTab">
239 <attribute name="title">
240 <string>CPU</string>
241 </attribute>
242 </widget>
238 <widget class="ConfigureGraphics" name="graphicsTab"> 243 <widget class="ConfigureGraphics" name="graphicsTab">
239 <attribute name="title"> 244 <attribute name="title">
240 <string>Graphics</string> 245 <string>Graphics</string>
@@ -311,6 +316,12 @@
311 <header>configuration/configure_per_game_addons.h</header> 316 <header>configuration/configure_per_game_addons.h</header>
312 <container>1</container> 317 <container>1</container>
313 </customwidget> 318 </customwidget>
319 <customwidget>
320 <class>ConfigureCpu</class>
321 <extends>QWidget</extends>
322 <header>configuration/configure_cpu.h</header>
323 <container>1</container>
324 </customwidget>
314 </customwidgets> 325 </customwidgets>
315 <resources/> 326 <resources/>
316 <connections> 327 <connections>
diff --git a/src/yuzu/configuration/configure_system.cpp b/src/yuzu/configuration/configure_system.cpp
index 26505956a..d67ff60b2 100644
--- a/src/yuzu/configuration/configure_system.cpp
+++ b/src/yuzu/configuration/configure_system.cpp
@@ -127,8 +127,7 @@ void ConfigureSystem::ApplyConfiguration() {
127 return; 127 return;
128 } 128 }
129 129
130 ConfigurationShared::ApplyPerGameSetting(&Settings::values.language_index, 130 ConfigurationShared::ApplyPerGameSetting(&Settings::values.language_index, ui->combo_language);
131 ui->combo_language);
132 ConfigurationShared::ApplyPerGameSetting(&Settings::values.region_index, ui->combo_region); 131 ConfigurationShared::ApplyPerGameSetting(&Settings::values.region_index, ui->combo_region);
133 ConfigurationShared::ApplyPerGameSetting(&Settings::values.time_zone_index, 132 ConfigurationShared::ApplyPerGameSetting(&Settings::values.time_zone_index,
134 ui->combo_time_zone); 133 ui->combo_time_zone);