diff options
Diffstat (limited to 'src/yuzu')
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 10 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.cpp | 17 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.h | 1 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.ui | 52 | 
4 files changed, 79 insertions, 1 deletions
| diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index a372190cc..7af974d8d 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -635,6 +635,11 @@ void Config::ReadCpuValues() {              ReadSetting(QStringLiteral("cpuopt_misc_ir"), true).toBool();          Settings::values.cpuopt_reduce_misalign_checks =              ReadSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), true).toBool(); + +        Settings::values.cpuopt_unsafe_unfuse_fma = +            ReadSetting(QStringLiteral("cpuopt_unsafe_unfuse_fma"), true).toBool(); +        Settings::values.cpuopt_unsafe_reduce_fp_error = +            ReadSetting(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true).toBool();      }      qt_config->endGroup(); @@ -1132,6 +1137,11 @@ void Config::SaveCpuValues() {          WriteSetting(QStringLiteral("cpuopt_misc_ir"), Settings::values.cpuopt_misc_ir, true);          WriteSetting(QStringLiteral("cpuopt_reduce_misalign_checks"),                       Settings::values.cpuopt_reduce_misalign_checks, true); + +        WriteSetting(QStringLiteral("cpuopt_unsafe_unfuse_fma"), +                     Settings::values.cpuopt_unsafe_unfuse_fma, true); +        WriteSetting(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), +                     Settings::values.cpuopt_unsafe_reduce_fp_error, true);      }      qt_config->endGroup(); diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp index 7493e5ffb..37fcd6adc 100644 --- a/src/yuzu/configuration/configure_cpu.cpp +++ b/src/yuzu/configuration/configure_cpu.cpp @@ -19,6 +19,8 @@ ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::Config      connect(ui->accuracy, qOverload<int>(&QComboBox::activated), this,              &ConfigureCpu::AccuracyUpdated); +    connect(ui->accuracy, qOverload<int>(&QComboBox::currentIndexChanged), this, +            &ConfigureCpu::UpdateGroup);  }  ConfigureCpu::~ConfigureCpu() = default; @@ -28,6 +30,12 @@ void ConfigureCpu::SetConfiguration() {      ui->accuracy->setEnabled(runtime_lock);      ui->accuracy->setCurrentIndex(static_cast<int>(Settings::values.cpu_accuracy)); +    UpdateGroup(static_cast<int>(Settings::values.cpu_accuracy)); + +    ui->cpuopt_unsafe_unfuse_fma->setEnabled(runtime_lock); +    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);  }  void ConfigureCpu::AccuracyUpdated(int index) { @@ -38,14 +46,21 @@ void ConfigureCpu::AccuracyUpdated(int index) {                                                   QMessageBox::Yes | QMessageBox::No);          if (result == QMessageBox::No) {              ui->accuracy->setCurrentIndex(static_cast<int>(Settings::CPUAccuracy::Accurate)); -            return; +            UpdateGroup(static_cast<int>(Settings::CPUAccuracy::Accurate));          }      }  } +void ConfigureCpu::UpdateGroup(int index) { +    ui->unsafe_group->setVisible(static_cast<Settings::CPUAccuracy>(index) == +                                 Settings::CPUAccuracy::Unsafe); +} +  void ConfigureCpu::ApplyConfiguration() {      Settings::values.cpu_accuracy =          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();  }  void ConfigureCpu::changeEvent(QEvent* event) { diff --git a/src/yuzu/configuration/configure_cpu.h b/src/yuzu/configuration/configure_cpu.h index e4741d3a4..3c5683d81 100644 --- a/src/yuzu/configuration/configure_cpu.h +++ b/src/yuzu/configuration/configure_cpu.h @@ -26,6 +26,7 @@ private:      void RetranslateUI();      void AccuracyUpdated(int index); +    void UpdateGroup(int index);      void SetConfiguration(); diff --git a/src/yuzu/configuration/configure_cpu.ui b/src/yuzu/configuration/configure_cpu.ui index bf6ea79bb..ebdd2e6e9 100644 --- a/src/yuzu/configuration/configure_cpu.ui +++ b/src/yuzu/configuration/configure_cpu.ui @@ -40,6 +40,11 @@              </item>              <item>               <property name="text"> +              <string>Unsafe</string> +             </property> +            </item> +            <item> +             <property name="text">                <string>Enable Debug Mode</string>               </property>              </item> @@ -63,6 +68,53 @@      </layout>     </item>     <item> +    <layout class="QVBoxLayout"> +     <item> +      <widget class="QGroupBox" name="unsafe_group"> +       <property name="title"> +        <string>Unsafe CPU Optimization Settings</string> +       </property> +       <layout class="QVBoxLayout"> +        <item> +         <widget class="QLabel"> +          <property name="wordWrap"> +            <bool>1</bool> +          </property> +          <property name="text"> +           <string>These settings reduce accuracy for speed.</string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_unsafe_unfuse_fma"> +          <property name="text"> +           <string>Unfuse FMA (improve performance on CPUs without FMA)</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>This option improves speed by reducing accuracy of fused-multiply-add instructions on CPUs without native FMA support.</div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_unsafe_reduce_fp_error"> +          <property name="text"> +           <string>Faster FRSQRTE and FRECPE</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>This option improves the speed of some approximate floating-point functions by using less accurate native approximations.</div> +           </string> +          </property> +         </widget> +        </item> +       </layout> +      </widget> +     </item> +    </layout> +   </item> +   <item>      <spacer name="verticalSpacer">       <property name="orientation">        <enum>Qt::Vertical</enum> | 
