diff options
| m--------- | externals/dynarmic | 0 | ||||
| -rw-r--r-- | src/common/settings.cpp | 1 | ||||
| -rw-r--r-- | src/common/settings.h | 1 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 4 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.cpp | 9 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.h | 1 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.ui | 12 |
8 files changed, 31 insertions, 0 deletions
diff --git a/externals/dynarmic b/externals/dynarmic | |||
| Subproject 0c12614d1a7a72d778609920dde96a4c63074ec | Subproject c6125082ea992c245edab26b6f86e7b904b86ee | ||
diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 9ec71eced..6397308ec 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp | |||
| @@ -122,6 +122,7 @@ void RestoreGlobalState(bool is_powered_on) { | |||
| 122 | values.cpu_accuracy.SetGlobal(true); | 122 | values.cpu_accuracy.SetGlobal(true); |
| 123 | values.cpuopt_unsafe_unfuse_fma.SetGlobal(true); | 123 | values.cpuopt_unsafe_unfuse_fma.SetGlobal(true); |
| 124 | values.cpuopt_unsafe_reduce_fp_error.SetGlobal(true); | 124 | values.cpuopt_unsafe_reduce_fp_error.SetGlobal(true); |
| 125 | values.cpuopt_unsafe_ignore_standard_fpcr.SetGlobal(true); | ||
| 125 | values.cpuopt_unsafe_inaccurate_nan.SetGlobal(true); | 126 | values.cpuopt_unsafe_inaccurate_nan.SetGlobal(true); |
| 126 | values.cpuopt_unsafe_fastmem_check.SetGlobal(true); | 127 | values.cpuopt_unsafe_fastmem_check.SetGlobal(true); |
| 127 | 128 | ||
diff --git a/src/common/settings.h b/src/common/settings.h index 6198f2d9f..c1a4ce4f6 100644 --- a/src/common/settings.h +++ b/src/common/settings.h | |||
| @@ -129,6 +129,7 @@ struct Values { | |||
| 129 | 129 | ||
| 130 | Setting<bool> cpuopt_unsafe_unfuse_fma; | 130 | Setting<bool> cpuopt_unsafe_unfuse_fma; |
| 131 | Setting<bool> cpuopt_unsafe_reduce_fp_error; | 131 | Setting<bool> cpuopt_unsafe_reduce_fp_error; |
| 132 | Setting<bool> cpuopt_unsafe_ignore_standard_fpcr; | ||
| 132 | Setting<bool> cpuopt_unsafe_inaccurate_nan; | 133 | Setting<bool> cpuopt_unsafe_inaccurate_nan; |
| 133 | Setting<bool> cpuopt_unsafe_fastmem_check; | 134 | Setting<bool> cpuopt_unsafe_fastmem_check; |
| 134 | 135 | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index c8f6dc765..f871f7bf4 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -186,6 +186,9 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* | |||
| 186 | if (Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()) { | 186 | if (Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()) { |
| 187 | config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP; | 187 | config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP; |
| 188 | } | 188 | } |
| 189 | if (Settings::values.cpuopt_unsafe_ignore_standard_fpcr.GetValue()) { | ||
| 190 | config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue; | ||
| 191 | } | ||
| 189 | if (Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()) { | 192 | if (Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()) { |
| 190 | config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; | 193 | config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; |
| 191 | } | 194 | } |
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 916a22724..26fa8fc81 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp | |||
| @@ -756,6 +756,8 @@ void Config::ReadCpuValues() { | |||
| 756 | QStringLiteral("cpuopt_unsafe_unfuse_fma"), true); | 756 | QStringLiteral("cpuopt_unsafe_unfuse_fma"), true); |
| 757 | ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error, | 757 | ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error, |
| 758 | QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true); | 758 | QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true); |
| 759 | ReadSettingGlobal(Settings::values.cpuopt_unsafe_ignore_standard_fpcr, | ||
| 760 | QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"), true); | ||
| 759 | ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan, | 761 | ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan, |
| 760 | QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true); | 762 | QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true); |
| 761 | ReadSettingGlobal(Settings::values.cpuopt_unsafe_fastmem_check, | 763 | ReadSettingGlobal(Settings::values.cpuopt_unsafe_fastmem_check, |
| @@ -1339,6 +1341,8 @@ void Config::SaveCpuValues() { | |||
| 1339 | Settings::values.cpuopt_unsafe_unfuse_fma, true); | 1341 | Settings::values.cpuopt_unsafe_unfuse_fma, true); |
| 1340 | WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), | 1342 | WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), |
| 1341 | Settings::values.cpuopt_unsafe_reduce_fp_error, true); | 1343 | Settings::values.cpuopt_unsafe_reduce_fp_error, true); |
| 1344 | WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"), | ||
| 1345 | Settings::values.cpuopt_unsafe_ignore_standard_fpcr, true); | ||
| 1342 | WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), | 1346 | WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), |
| 1343 | Settings::values.cpuopt_unsafe_inaccurate_nan, true); | 1347 | Settings::values.cpuopt_unsafe_inaccurate_nan, true); |
| 1344 | WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_fastmem_check"), | 1348 | WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_fastmem_check"), |
diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp index 22219cbad..13db2ba98 100644 --- a/src/yuzu/configuration/configure_cpu.cpp +++ b/src/yuzu/configuration/configure_cpu.cpp | |||
| @@ -34,12 +34,15 @@ void ConfigureCpu::SetConfiguration() { | |||
| 34 | ui->accuracy->setEnabled(runtime_lock); | 34 | ui->accuracy->setEnabled(runtime_lock); |
| 35 | ui->cpuopt_unsafe_unfuse_fma->setEnabled(runtime_lock); | 35 | ui->cpuopt_unsafe_unfuse_fma->setEnabled(runtime_lock); |
| 36 | ui->cpuopt_unsafe_reduce_fp_error->setEnabled(runtime_lock); | 36 | ui->cpuopt_unsafe_reduce_fp_error->setEnabled(runtime_lock); |
| 37 | ui->cpuopt_unsafe_ignore_standard_fpcr->setEnabled(runtime_lock); | ||
| 37 | ui->cpuopt_unsafe_inaccurate_nan->setEnabled(runtime_lock); | 38 | ui->cpuopt_unsafe_inaccurate_nan->setEnabled(runtime_lock); |
| 38 | ui->cpuopt_unsafe_fastmem_check->setEnabled(runtime_lock); | 39 | ui->cpuopt_unsafe_fastmem_check->setEnabled(runtime_lock); |
| 39 | 40 | ||
| 40 | ui->cpuopt_unsafe_unfuse_fma->setChecked(Settings::values.cpuopt_unsafe_unfuse_fma.GetValue()); | 41 | ui->cpuopt_unsafe_unfuse_fma->setChecked(Settings::values.cpuopt_unsafe_unfuse_fma.GetValue()); |
| 41 | ui->cpuopt_unsafe_reduce_fp_error->setChecked( | 42 | ui->cpuopt_unsafe_reduce_fp_error->setChecked( |
| 42 | Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()); | 43 | Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()); |
| 44 | ui->cpuopt_unsafe_ignore_standard_fpcr->setChecked( | ||
| 45 | Settings::values.cpuopt_unsafe_ignore_standard_fpcr.GetValue()); | ||
| 43 | ui->cpuopt_unsafe_inaccurate_nan->setChecked( | 46 | ui->cpuopt_unsafe_inaccurate_nan->setChecked( |
| 44 | Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()); | 47 | Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()); |
| 45 | ui->cpuopt_unsafe_fastmem_check->setChecked( | 48 | ui->cpuopt_unsafe_fastmem_check->setChecked( |
| @@ -84,6 +87,9 @@ void ConfigureCpu::ApplyConfiguration() { | |||
| 84 | ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_reduce_fp_error, | 87 | ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_reduce_fp_error, |
| 85 | ui->cpuopt_unsafe_reduce_fp_error, | 88 | ui->cpuopt_unsafe_reduce_fp_error, |
| 86 | cpuopt_unsafe_reduce_fp_error); | 89 | cpuopt_unsafe_reduce_fp_error); |
| 90 | ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_ignore_standard_fpcr, | ||
| 91 | ui->cpuopt_unsafe_ignore_standard_fpcr, | ||
| 92 | cpuopt_unsafe_ignore_standard_fpcr); | ||
| 87 | ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_inaccurate_nan, | 93 | ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_inaccurate_nan, |
| 88 | ui->cpuopt_unsafe_inaccurate_nan, | 94 | ui->cpuopt_unsafe_inaccurate_nan, |
| 89 | cpuopt_unsafe_inaccurate_nan); | 95 | cpuopt_unsafe_inaccurate_nan); |
| @@ -137,6 +143,9 @@ void ConfigureCpu::SetupPerGameUI() { | |||
| 137 | ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_reduce_fp_error, | 143 | ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_reduce_fp_error, |
| 138 | Settings::values.cpuopt_unsafe_reduce_fp_error, | 144 | Settings::values.cpuopt_unsafe_reduce_fp_error, |
| 139 | cpuopt_unsafe_reduce_fp_error); | 145 | cpuopt_unsafe_reduce_fp_error); |
| 146 | ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_ignore_standard_fpcr, | ||
| 147 | Settings::values.cpuopt_unsafe_ignore_standard_fpcr, | ||
| 148 | cpuopt_unsafe_ignore_standard_fpcr); | ||
| 140 | ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_inaccurate_nan, | 149 | ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_inaccurate_nan, |
| 141 | Settings::values.cpuopt_unsafe_inaccurate_nan, | 150 | Settings::values.cpuopt_unsafe_inaccurate_nan, |
| 142 | cpuopt_unsafe_inaccurate_nan); | 151 | cpuopt_unsafe_inaccurate_nan); |
diff --git a/src/yuzu/configuration/configure_cpu.h b/src/yuzu/configuration/configure_cpu.h index 57ff2772a..b2b5f1671 100644 --- a/src/yuzu/configuration/configure_cpu.h +++ b/src/yuzu/configuration/configure_cpu.h | |||
| @@ -40,6 +40,7 @@ private: | |||
| 40 | 40 | ||
| 41 | ConfigurationShared::CheckState cpuopt_unsafe_unfuse_fma; | 41 | ConfigurationShared::CheckState cpuopt_unsafe_unfuse_fma; |
| 42 | ConfigurationShared::CheckState cpuopt_unsafe_reduce_fp_error; | 42 | ConfigurationShared::CheckState cpuopt_unsafe_reduce_fp_error; |
| 43 | ConfigurationShared::CheckState cpuopt_unsafe_ignore_standard_fpcr; | ||
| 43 | ConfigurationShared::CheckState cpuopt_unsafe_inaccurate_nan; | 44 | ConfigurationShared::CheckState cpuopt_unsafe_inaccurate_nan; |
| 44 | ConfigurationShared::CheckState cpuopt_unsafe_fastmem_check; | 45 | ConfigurationShared::CheckState cpuopt_unsafe_fastmem_check; |
| 45 | }; | 46 | }; |
diff --git a/src/yuzu/configuration/configure_cpu.ui b/src/yuzu/configuration/configure_cpu.ui index 31ef9e3f5..0e296d4e5 100644 --- a/src/yuzu/configuration/configure_cpu.ui +++ b/src/yuzu/configuration/configure_cpu.ui | |||
| @@ -112,6 +112,18 @@ | |||
| 112 | </widget> | 112 | </widget> |
| 113 | </item> | 113 | </item> |
| 114 | <item> | 114 | <item> |
| 115 | <widget class="QCheckBox" name="cpuopt_unsafe_ignore_standard_fpcr"> | ||
| 116 | <property name="toolTip"> | ||
| 117 | <string> | ||
| 118 | <div>This option improves the speed of 32 bits ASIMD floating-point functions by running with incorrect rounding modes.</div> | ||
| 119 | </string> | ||
| 120 | </property> | ||
| 121 | <property name="text"> | ||
| 122 | <string>Faster ASIMD instructions (32 bits only)</string> | ||
| 123 | </property> | ||
| 124 | </widget> | ||
| 125 | </item> | ||
| 126 | <item> | ||
| 115 | <widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan"> | 127 | <widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan"> |
| 116 | <property name="toolTip"> | 128 | <property name="toolTip"> |
| 117 | <string> | 129 | <string> |