diff options
| m--------- | externals/dynarmic | 0 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 3 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 3 | ||||
| -rw-r--r-- | src/core/settings.h | 1 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 4 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.ui | 12 | 
7 files changed, 26 insertions, 0 deletions
| diff --git a/externals/dynarmic b/externals/dynarmic -Subproject 4a9a0d07f7376b439430e686721e8176c7b56ce +Subproject 6023bcd8ad8c95bb08edf48cb889bfe99ff86be diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 8aaf11eee..0831dd5d2 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp @@ -181,6 +181,9 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable&          if (Settings::values.cpuopt_unsafe_reduce_fp_error) {              config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;          } +        if (Settings::values.cpuopt_unsafe_inaccurate_nan) { +            config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; +        }      }      return std::make_unique<Dynarmic::A32::Jit>(config); diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index d2e1dc724..4c5ebca22 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp @@ -212,6 +212,9 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable&          if (Settings::values.cpuopt_unsafe_reduce_fp_error) {              config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;          } +        if (Settings::values.cpuopt_unsafe_inaccurate_nan) { +            config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; +        }      }      return std::make_shared<Dynarmic::A64::Jit>(config); diff --git a/src/core/settings.h b/src/core/settings.h index 0cd3c0c84..66edc4e48 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -131,6 +131,7 @@ struct Values {      bool cpuopt_unsafe_unfuse_fma;      bool cpuopt_unsafe_reduce_fp_error; +    bool cpuopt_unsafe_inaccurate_nan;      // Renderer      Setting<RendererBackend> renderer_backend; diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 34c2a5f8b..43cd11ba0 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -764,6 +764,8 @@ void Config::ReadCpuValues() {              ReadSetting(QStringLiteral("cpuopt_unsafe_unfuse_fma"), true).toBool();          Settings::values.cpuopt_unsafe_reduce_fp_error =              ReadSetting(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true).toBool(); +        Settings::values.cpuopt_unsafe_inaccurate_nan = +            ReadSetting(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true).toBool();      }      qt_config->endGroup(); @@ -1327,6 +1329,8 @@ void Config::SaveCpuValues() {                       Settings::values.cpuopt_unsafe_unfuse_fma, true);          WriteSetting(QStringLiteral("cpuopt_unsafe_reduce_fp_error"),                       Settings::values.cpuopt_unsafe_reduce_fp_error, true); +        WriteSetting(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), +                     Settings::values.cpuopt_unsafe_inaccurate_nan, true);      }      qt_config->endGroup(); diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp index 37fcd6adc..d055cbd60 100644 --- a/src/yuzu/configuration/configure_cpu.cpp +++ b/src/yuzu/configuration/configure_cpu.cpp @@ -36,6 +36,8 @@ void ConfigureCpu::SetConfiguration() {      ui->cpuopt_unsafe_unfuse_fma->setChecked(Settings::values.cpuopt_unsafe_unfuse_fma);      ui->cpuopt_unsafe_reduce_fp_error->setEnabled(runtime_lock);      ui->cpuopt_unsafe_reduce_fp_error->setChecked(Settings::values.cpuopt_unsafe_reduce_fp_error); +    ui->cpuopt_unsafe_inaccurate_nan->setEnabled(runtime_lock); +    ui->cpuopt_unsafe_inaccurate_nan->setChecked(Settings::values.cpuopt_unsafe_inaccurate_nan);  }  void ConfigureCpu::AccuracyUpdated(int index) { @@ -61,6 +63,7 @@ void ConfigureCpu::ApplyConfiguration() {          static_cast<Settings::CPUAccuracy>(ui->accuracy->currentIndex());      Settings::values.cpuopt_unsafe_unfuse_fma = ui->cpuopt_unsafe_unfuse_fma->isChecked();      Settings::values.cpuopt_unsafe_reduce_fp_error = ui->cpuopt_unsafe_reduce_fp_error->isChecked(); +    Settings::values.cpuopt_unsafe_inaccurate_nan = ui->cpuopt_unsafe_inaccurate_nan->isChecked();  }  void ConfigureCpu::changeEvent(QEvent* event) { diff --git a/src/yuzu/configuration/configure_cpu.ui b/src/yuzu/configuration/configure_cpu.ui index ebdd2e6e9..bcd0962e9 100644 --- a/src/yuzu/configuration/configure_cpu.ui +++ b/src/yuzu/configuration/configure_cpu.ui @@ -109,6 +109,18 @@            </property>           </widget>          </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan"> +          <property name="text"> +           <string>Inaccurate NaN handling</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.</div> +           </string> +          </property> +         </widget> +        </item>         </layout>        </widget>       </item> | 
