diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/settings.cpp | 6 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 42 | ||||
| -rw-r--r-- | src/yuzu/configuration/configuration_shared.cpp | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configuration_shared.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_audio.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.cpp | 87 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.h | 10 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.ui | 90 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_general.cpp | 4 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics_advanced.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_per_game.cpp | 1 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_per_game.ui | 11 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_system.cpp | 3 |
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() { | |||
| 736 | void Config::ReadCpuValues() { | 736 | void 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() { | |||
| 1312 | void Config::SaveCpuValues() { | 1312 | void 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 | ||
| 87 | void 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 | |||
| 87 | void ConfigurationShared::SetHighlight(QWidget* widget, bool highlighted) { | 94 | void 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); |
| 40 | void SetPerGameSetting(QComboBox* combobox, | 40 | void SetPerGameSetting(QComboBox* combobox, |
| 41 | const Settings::Setting<Settings::GPUAccuracy>* setting); | 41 | const Settings::Setting<Settings::GPUAccuracy>* setting); |
| 42 | void 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 |
| 44 | void SetHighlight(QWidget* widget, bool highlighted); | 46 | void 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 | ||
| 101 | void ConfigureAudio::ApplyConfiguration() { | 101 | void 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 | ||
| 15 | ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::ConfigureCpu) { | 16 | ConfigureCpu::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 | ||
| 45 | void ConfigureCpu::AccuracyUpdated(int index) { | 55 | void 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 | ||
| 58 | void ConfigureCpu::UpdateGroup(int index) { | 69 | void 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 | ||
| 63 | void ConfigureCpu::ApplyConfiguration() { | 80 | void 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 | ||
| 73 | void ConfigureCpu::changeEvent(QEvent* event) { | 108 | void ConfigureCpu::changeEvent(QEvent* event) { |
| @@ -81,3 +116,25 @@ void ConfigureCpu::changeEvent(QEvent* event) { | |||
| 81 | void ConfigureCpu::RetranslateUI() { | 116 | void ConfigureCpu::RetranslateUI() { |
| 82 | ui->retranslateUi(this); | 117 | ui->retranslateUi(this); |
| 83 | } | 118 | } |
| 119 | |||
| 120 | void 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 | ||
| 11 | namespace ConfigurationShared { | ||
| 12 | enum class CheckState; | ||
| 13 | } | ||
| 14 | |||
| 11 | namespace Ui { | 15 | namespace Ui { |
| 12 | class ConfigureCpu; | 16 | class 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 "Accurate".</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 | <div>This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.</div> | 94 | <div>This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.</div> |
| 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 | <div>This option improves the speed of some approximate floating-point functions by using less accurate native approximations.</div> | 106 | <div>This option improves the speed of some approximate floating-point functions by using less accurate native approximations.</div> |
| 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 | <div>This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.</div> | 118 | <div>This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.</div> |
| 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 | ||
| 52 | void ConfigureGeneral::ApplyConfiguration() { | 52 | void 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; | |||
| 52 | void ConfigurePerGame::ApplyConfiguration() { | 52 | void 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); |