diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 88 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure.ui | 22 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.cpp | 61 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.h | 33 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu.ui | 92 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu_debug.cpp | 65 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu_debug.h | 31 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_cpu_debug.ui | 174 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.ui | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_dialog.cpp | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_filesystem.cpp | 27 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_filesystem.ui | 121 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_general.cpp | 2 | 
15 files changed, 545 insertions, 189 deletions
| diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 1b2b1b2bb..9e9b38214 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -505,22 +505,6 @@ void Config::ReadDataStorageValues() {          ReadSetting(QStringLiteral("gamecard_current_game"), false).toBool();      Settings::values.gamecard_path =          ReadSetting(QStringLiteral("gamecard_path"), QStringLiteral("")).toString().toStdString(); -    Settings::values.nand_total_size = static_cast<Settings::NANDTotalSize>( -        ReadSetting(QStringLiteral("nand_total_size"), -                    QVariant::fromValue<u64>(static_cast<u64>(Settings::NANDTotalSize::S29_1GB))) -            .toULongLong()); -    Settings::values.nand_user_size = static_cast<Settings::NANDUserSize>( -        ReadSetting(QStringLiteral("nand_user_size"), -                    QVariant::fromValue<u64>(static_cast<u64>(Settings::NANDUserSize::S26GB))) -            .toULongLong()); -    Settings::values.nand_system_size = static_cast<Settings::NANDSystemSize>( -        ReadSetting(QStringLiteral("nand_system_size"), -                    QVariant::fromValue<u64>(static_cast<u64>(Settings::NANDSystemSize::S2_5GB))) -            .toULongLong()); -    Settings::values.sdmc_size = static_cast<Settings::SDMCSize>( -        ReadSetting(QStringLiteral("sdmc_size"), -                    QVariant::fromValue<u64>(static_cast<u64>(Settings::SDMCSize::S16GB))) -            .toULongLong());      qt_config->endGroup();  } @@ -540,8 +524,6 @@ void Config::ReadDebuggingValues() {      Settings::values.reporting_services =          ReadSetting(QStringLiteral("reporting_services"), false).toBool();      Settings::values.quest_flag = ReadSetting(QStringLiteral("quest_flag"), false).toBool(); -    Settings::values.disable_cpu_opt = -        ReadSetting(QStringLiteral("disable_cpu_opt"), false).toBool();      Settings::values.disable_macro_jit =          ReadSetting(QStringLiteral("disable_macro_jit"), false).toBool(); @@ -633,6 +615,34 @@ void Config::ReadPathValues() {      qt_config->endGroup();  } +void Config::ReadCpuValues() { +    qt_config->beginGroup(QStringLiteral("Cpu")); + +    if (global) { +        Settings::values.cpu_accuracy = static_cast<Settings::CPUAccuracy>( +            ReadSetting(QStringLiteral("cpu_accuracy"), 0).toInt()); + +        Settings::values.cpuopt_page_tables = +            ReadSetting(QStringLiteral("cpuopt_page_tables"), true).toBool(); +        Settings::values.cpuopt_block_linking = +            ReadSetting(QStringLiteral("cpuopt_block_linking"), true).toBool(); +        Settings::values.cpuopt_return_stack_buffer = +            ReadSetting(QStringLiteral("cpuopt_return_stack_buffer"), true).toBool(); +        Settings::values.cpuopt_fast_dispatcher = +            ReadSetting(QStringLiteral("cpuopt_fast_dispatcher"), true).toBool(); +        Settings::values.cpuopt_context_elimination = +            ReadSetting(QStringLiteral("cpuopt_context_elimination"), true).toBool(); +        Settings::values.cpuopt_const_prop = +            ReadSetting(QStringLiteral("cpuopt_const_prop"), true).toBool(); +        Settings::values.cpuopt_misc_ir = +            ReadSetting(QStringLiteral("cpuopt_misc_ir"), true).toBool(); +        Settings::values.cpuopt_reduce_misalign_checks = +            ReadSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), true).toBool(); +    } + +    qt_config->endGroup(); +} +  void Config::ReadRendererValues() {      qt_config->beginGroup(QStringLiteral("Renderer")); @@ -829,6 +839,7 @@ void Config::ReadValues() {          ReadMiscellaneousValues();      }      ReadCoreValues(); +    ReadCpuValues();      ReadRendererValues();      ReadAudioValues();      ReadSystemValues(); @@ -929,6 +940,7 @@ void Config::SaveValues() {          SaveMiscellaneousValues();      }      SaveCoreValues(); +    SaveCpuValues();      SaveRendererValues();      SaveAudioValues();      SaveSystemValues(); @@ -1006,18 +1018,7 @@ void Config::SaveDataStorageValues() {                   false);      WriteSetting(QStringLiteral("gamecard_path"),                   QString::fromStdString(Settings::values.gamecard_path), QStringLiteral("")); -    WriteSetting(QStringLiteral("nand_total_size"), -                 QVariant::fromValue<u64>(static_cast<u64>(Settings::values.nand_total_size)), -                 QVariant::fromValue<u64>(static_cast<u64>(Settings::NANDTotalSize::S29_1GB))); -    WriteSetting(QStringLiteral("nand_user_size"), -                 QVariant::fromValue<u64>(static_cast<u64>(Settings::values.nand_user_size)), -                 QVariant::fromValue<u64>(static_cast<u64>(Settings::NANDUserSize::S26GB))); -    WriteSetting(QStringLiteral("nand_system_size"), -                 QVariant::fromValue<u64>(static_cast<u64>(Settings::values.nand_system_size)), -                 QVariant::fromValue<u64>(static_cast<u64>(Settings::NANDSystemSize::S2_5GB))); -    WriteSetting(QStringLiteral("sdmc_size"), -                 QVariant::fromValue<u64>(static_cast<u64>(Settings::values.sdmc_size)), -                 QVariant::fromValue<u64>(static_cast<u64>(Settings::SDMCSize::S16GB))); +      qt_config->endGroup();  } @@ -1033,7 +1034,6 @@ void Config::SaveDebuggingValues() {      WriteSetting(QStringLiteral("dump_exefs"), Settings::values.dump_exefs, false);      WriteSetting(QStringLiteral("dump_nso"), Settings::values.dump_nso, false);      WriteSetting(QStringLiteral("quest_flag"), Settings::values.quest_flag, false); -    WriteSetting(QStringLiteral("disable_cpu_opt"), Settings::values.disable_cpu_opt, false);      WriteSetting(QStringLiteral("disable_macro_jit"), Settings::values.disable_macro_jit, false);      qt_config->endGroup(); @@ -1097,6 +1097,32 @@ void Config::SavePathValues() {      qt_config->endGroup();  } +void Config::SaveCpuValues() { +    qt_config->beginGroup(QStringLiteral("Cpu")); + +    if (global) { +        WriteSetting(QStringLiteral("cpu_accuracy"), +                     static_cast<int>(Settings::values.cpu_accuracy), 0); + +        WriteSetting(QStringLiteral("cpuopt_page_tables"), Settings::values.cpuopt_page_tables, +                     true); +        WriteSetting(QStringLiteral("cpuopt_block_linking"), Settings::values.cpuopt_block_linking, +                     true); +        WriteSetting(QStringLiteral("cpuopt_return_stack_buffer"), +                     Settings::values.cpuopt_return_stack_buffer, true); +        WriteSetting(QStringLiteral("cpuopt_fast_dispatcher"), +                     Settings::values.cpuopt_fast_dispatcher, true); +        WriteSetting(QStringLiteral("cpuopt_context_elimination"), +                     Settings::values.cpuopt_context_elimination, true); +        WriteSetting(QStringLiteral("cpuopt_const_prop"), Settings::values.cpuopt_const_prop, true); +        WriteSetting(QStringLiteral("cpuopt_misc_ir"), Settings::values.cpuopt_misc_ir, true); +        WriteSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), +                     Settings::values.cpuopt_reduce_misalign_checks, true); +    } + +    qt_config->endGroup(); +} +  void Config::SaveRendererValues() {      qt_config->beginGroup(QStringLiteral("Renderer")); diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h index 681f0bca5..8e815f829 100644 --- a/src/yuzu/configuration/config.h +++ b/src/yuzu/configuration/config.h @@ -49,6 +49,7 @@ private:      void ReadDisabledAddOnValues();      void ReadMiscellaneousValues();      void ReadPathValues(); +    void ReadCpuValues();      void ReadRendererValues();      void ReadShortcutValues();      void ReadSystemValues(); @@ -73,6 +74,7 @@ private:      void SaveDisabledAddOnValues();      void SaveMiscellaneousValues();      void SavePathValues(); +    void SaveCpuValues();      void SaveRendererValues();      void SaveShortcutValues();      void SaveSystemValues(); diff --git a/src/yuzu/configuration/configure.ui b/src/yuzu/configuration/configure.ui index 9aec1bd09..5f5d8e571 100644 --- a/src/yuzu/configuration/configure.ui +++ b/src/yuzu/configuration/configure.ui @@ -78,6 +78,16 @@           <string>Hotkeys</string>          </attribute>         </widget> +       <widget class="ConfigureCpu" name="cpuTab"> +        <attribute name="title"> +         <string>CPU</string> +        </attribute> +       </widget> +       <widget class="ConfigureCpuDebug" name="cpuDebugTab"> +        <attribute name="title"> +         <string>Debug</string> +        </attribute> +       </widget>         <widget class="ConfigureGraphics" name="graphicsTab">          <attribute name="title">           <string>Graphics</string> @@ -159,6 +169,18 @@     <container>1</container>    </customwidget>    <customwidget> +   <class>ConfigureCpu</class> +   <extends>QWidget</extends> +   <header>configuration/configure_cpu.h</header> +   <container>1</container> +  </customwidget> +  <customwidget> +   <class>ConfigureCpuDebug</class> +   <extends>QWidget</extends> +   <header>configuration/configure_cpu_debug.h</header> +   <container>1</container> +  </customwidget> +  <customwidget>     <class>ConfigureGraphics</class>     <extends>QWidget</extends>     <header>configuration/configure_graphics.h</header> diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp new file mode 100644 index 000000000..7493e5ffb --- /dev/null +++ b/src/yuzu/configuration/configure_cpu.cpp @@ -0,0 +1,61 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <QComboBox> +#include <QMessageBox> + +#include "common/common_types.h" +#include "common/logging/log.h" +#include "core/core.h" +#include "core/settings.h" +#include "ui_configure_cpu.h" +#include "yuzu/configuration/configure_cpu.h" + +ConfigureCpu::ConfigureCpu(QWidget* parent) : QWidget(parent), ui(new Ui::ConfigureCpu) { +    ui->setupUi(this); + +    SetConfiguration(); + +    connect(ui->accuracy, qOverload<int>(&QComboBox::activated), this, +            &ConfigureCpu::AccuracyUpdated); +} + +ConfigureCpu::~ConfigureCpu() = default; + +void ConfigureCpu::SetConfiguration() { +    const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn(); + +    ui->accuracy->setEnabled(runtime_lock); +    ui->accuracy->setCurrentIndex(static_cast<int>(Settings::values.cpu_accuracy)); +} + +void ConfigureCpu::AccuracyUpdated(int index) { +    if (static_cast<Settings::CPUAccuracy>(index) == Settings::CPUAccuracy::DebugMode) { +        const auto result = QMessageBox::warning(this, tr("Setting CPU to Debug Mode"), +                                                 tr("CPU Debug Mode is only intended for developer " +                                                    "use. Are you sure you want to enable this?"), +                                                 QMessageBox::Yes | QMessageBox::No); +        if (result == QMessageBox::No) { +            ui->accuracy->setCurrentIndex(static_cast<int>(Settings::CPUAccuracy::Accurate)); +            return; +        } +    } +} + +void ConfigureCpu::ApplyConfiguration() { +    Settings::values.cpu_accuracy = +        static_cast<Settings::CPUAccuracy>(ui->accuracy->currentIndex()); +} + +void ConfigureCpu::changeEvent(QEvent* event) { +    if (event->type() == QEvent::LanguageChange) { +        RetranslateUI(); +    } + +    QWidget::changeEvent(event); +} + +void ConfigureCpu::RetranslateUI() { +    ui->retranslateUi(this); +} diff --git a/src/yuzu/configuration/configure_cpu.h b/src/yuzu/configuration/configure_cpu.h new file mode 100644 index 000000000..e4741d3a4 --- /dev/null +++ b/src/yuzu/configuration/configure_cpu.h @@ -0,0 +1,33 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <memory> +#include <QWidget> +#include "core/settings.h" + +namespace Ui { +class ConfigureCpu; +} + +class ConfigureCpu : public QWidget { +    Q_OBJECT + +public: +    explicit ConfigureCpu(QWidget* parent = nullptr); +    ~ConfigureCpu() override; + +    void ApplyConfiguration(); + +private: +    void changeEvent(QEvent* event) override; +    void RetranslateUI(); + +    void AccuracyUpdated(int index); + +    void SetConfiguration(); + +    std::unique_ptr<Ui::ConfigureCpu> ui; +}; diff --git a/src/yuzu/configuration/configure_cpu.ui b/src/yuzu/configuration/configure_cpu.ui new file mode 100644 index 000000000..bf6ea79bb --- /dev/null +++ b/src/yuzu/configuration/configure_cpu.ui @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ConfigureCpu</class> + <widget class="QWidget" name="ConfigureCpu"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>400</width> +    <height>321</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>Form</string> +  </property> +  <layout class="QVBoxLayout"> +   <item> +    <layout class="QVBoxLayout"> +     <item> +      <widget class="QGroupBox"> +       <property name="title"> +        <string>General</string> +       </property> +       <layout class="QVBoxLayout"> +        <item> +         <layout class="QHBoxLayout"> +          <item> +           <widget class="QLabel"> +            <property name="text"> +             <string>Accuracy:</string> +            </property> +           </widget> +          </item> +          <item> +           <widget class="QComboBox" name="accuracy"> +            <item> +             <property name="text"> +              <string>Accurate</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Enable Debug Mode</string> +             </property> +            </item> +           </widget> +          </item> +         </layout> +        </item> +        <item> +         <widget class="QLabel"> +          <property name="wordWrap"> +            <bool>1</bool> +          </property> +          <property name="text"> +           <string>We recommend setting accuracy to "Accurate".</string> +          </property> +         </widget> +        </item> +       </layout> +      </widget> +     </item> +    </layout> +   </item> +   <item> +    <spacer name="verticalSpacer"> +     <property name="orientation"> +      <enum>Qt::Vertical</enum> +     </property> +     <property name="sizeHint" stdset="0"> +      <size> +       <width>20</width> +       <height>40</height> +      </size> +     </property> +    </spacer> +   </item> +   <item> +    <widget class="QLabel" name="label_disable_info"> +     <property name="text"> +      <string>CPU settings are available only when game is not running.</string> +     </property> +     <property name="wordWrap"> +      <bool>true</bool> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/yuzu/configuration/configure_cpu_debug.cpp b/src/yuzu/configuration/configure_cpu_debug.cpp new file mode 100644 index 000000000..3385b2cf6 --- /dev/null +++ b/src/yuzu/configuration/configure_cpu_debug.cpp @@ -0,0 +1,65 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <QComboBox> + +#include "common/common_types.h" +#include "common/logging/log.h" +#include "core/core.h" +#include "core/settings.h" +#include "ui_configure_cpu_debug.h" +#include "yuzu/configuration/configure_cpu_debug.h" + +ConfigureCpuDebug::ConfigureCpuDebug(QWidget* parent) +    : QWidget(parent), ui(new Ui::ConfigureCpuDebug) { +    ui->setupUi(this); + +    SetConfiguration(); +} + +ConfigureCpuDebug::~ConfigureCpuDebug() = default; + +void ConfigureCpuDebug::SetConfiguration() { +    const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn(); + +    ui->cpuopt_page_tables->setEnabled(runtime_lock); +    ui->cpuopt_page_tables->setChecked(Settings::values.cpuopt_page_tables); +    ui->cpuopt_block_linking->setEnabled(runtime_lock); +    ui->cpuopt_block_linking->setChecked(Settings::values.cpuopt_block_linking); +    ui->cpuopt_return_stack_buffer->setEnabled(runtime_lock); +    ui->cpuopt_return_stack_buffer->setChecked(Settings::values.cpuopt_return_stack_buffer); +    ui->cpuopt_fast_dispatcher->setEnabled(runtime_lock); +    ui->cpuopt_fast_dispatcher->setChecked(Settings::values.cpuopt_fast_dispatcher); +    ui->cpuopt_context_elimination->setEnabled(runtime_lock); +    ui->cpuopt_context_elimination->setChecked(Settings::values.cpuopt_context_elimination); +    ui->cpuopt_const_prop->setEnabled(runtime_lock); +    ui->cpuopt_const_prop->setChecked(Settings::values.cpuopt_const_prop); +    ui->cpuopt_misc_ir->setEnabled(runtime_lock); +    ui->cpuopt_misc_ir->setChecked(Settings::values.cpuopt_misc_ir); +    ui->cpuopt_reduce_misalign_checks->setEnabled(runtime_lock); +    ui->cpuopt_reduce_misalign_checks->setChecked(Settings::values.cpuopt_reduce_misalign_checks); +} + +void ConfigureCpuDebug::ApplyConfiguration() { +    Settings::values.cpuopt_page_tables = ui->cpuopt_page_tables->isChecked(); +    Settings::values.cpuopt_block_linking = ui->cpuopt_block_linking->isChecked(); +    Settings::values.cpuopt_return_stack_buffer = ui->cpuopt_return_stack_buffer->isChecked(); +    Settings::values.cpuopt_fast_dispatcher = ui->cpuopt_fast_dispatcher->isChecked(); +    Settings::values.cpuopt_context_elimination = ui->cpuopt_context_elimination->isChecked(); +    Settings::values.cpuopt_const_prop = ui->cpuopt_const_prop->isChecked(); +    Settings::values.cpuopt_misc_ir = ui->cpuopt_misc_ir->isChecked(); +    Settings::values.cpuopt_reduce_misalign_checks = ui->cpuopt_reduce_misalign_checks->isChecked(); +} + +void ConfigureCpuDebug::changeEvent(QEvent* event) { +    if (event->type() == QEvent::LanguageChange) { +        RetranslateUI(); +    } + +    QWidget::changeEvent(event); +} + +void ConfigureCpuDebug::RetranslateUI() { +    ui->retranslateUi(this); +} diff --git a/src/yuzu/configuration/configure_cpu_debug.h b/src/yuzu/configuration/configure_cpu_debug.h new file mode 100644 index 000000000..c9941ef3b --- /dev/null +++ b/src/yuzu/configuration/configure_cpu_debug.h @@ -0,0 +1,31 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <memory> +#include <QWidget> +#include "core/settings.h" + +namespace Ui { +class ConfigureCpuDebug; +} + +class ConfigureCpuDebug : public QWidget { +    Q_OBJECT + +public: +    explicit ConfigureCpuDebug(QWidget* parent = nullptr); +    ~ConfigureCpuDebug() override; + +    void ApplyConfiguration(); + +private: +    void changeEvent(QEvent* event) override; +    void RetranslateUI(); + +    void SetConfiguration(); + +    std::unique_ptr<Ui::ConfigureCpuDebug> ui; +}; diff --git a/src/yuzu/configuration/configure_cpu_debug.ui b/src/yuzu/configuration/configure_cpu_debug.ui new file mode 100644 index 000000000..a90dc64fe --- /dev/null +++ b/src/yuzu/configuration/configure_cpu_debug.ui @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ConfigureCpuDebug</class> + <widget class="QWidget" name="ConfigureCpuDebug"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>400</width> +    <height>321</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>Form</string> +  </property> +  <layout class="QVBoxLayout"> +   <item> +    <layout class="QVBoxLayout"> +     <item> +      <widget class="QGroupBox"> +       <property name="title"> +        <string>Toggle CPU Optimizations</string> +       </property> +       <layout class="QVBoxLayout"> +        <item> +         <widget class="QLabel"> +          <property name="wordWrap"> +            <bool>1</bool> +          </property> +          <property name="text"> +           <string> +            <div> +            <b>For debugging only.</b> +            <br> +            If you're not sure what these do, keep all of these enabled. +            <br> +            These settings only take effect when CPU Accuracy is "Debug Mode". +            </div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_page_tables"> +          <property name="text"> +           <string>Enable inline page tables</string> +          </property> +          <property name="toolTip"> +           <string> +            <div style="white-space: nowrap">This optimization speeds up memory accesses by the guest program.</div> +            <div style="white-space: nowrap">Enabling it inlines accesses to PageTable::pointers into emitted code.</div> +            <div style="white-space: nowrap">Disabling this forces all memory accesses to go through the Memory::Read/Memory::Write functions.</div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_block_linking"> +          <property name="text"> +           <string>Enable block linking</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>This optimization avoids dispatcher lookups by allowing emitted basic blocks to jump directly to other basic blocks if the destination PC is static.</div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_return_stack_buffer"> +          <property name="text"> +           <string>Enable return stack buffer</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>This optimization avoids dispatcher lookups by keeping track potential return addresses of BL instructions. This approximates what happens with a return stack buffer on a real CPU.</div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_fast_dispatcher"> +          <property name="text"> +           <string>Enable fast dispatcher</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>Enable a two-tiered dispatch system. A faster dispatcher written in assembly has a small MRU cache of jump destinations is used first. If that fails, dispatch falls back to the slower C++ dispatcher.</div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_context_elimination"> +          <property name="text"> +           <string>Enable context elimination</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>Enables an IR optimization that reduces unnecessary accesses to the CPU context structure.</div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_const_prop"> +          <property name="text"> +           <string>Enable constant propagation</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>Enables IR optimizations that involve constant propagation.</div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_misc_ir"> +          <property name="text"> +           <string>Enable miscellaneous optimizations</string> +          </property> +          <property name="toolTip"> +           <string> +            <div>Enables miscellaneous IR optimizations.</div> +           </string> +          </property> +         </widget> +        </item> +        <item> +         <widget class="QCheckBox" name="cpuopt_reduce_misalign_checks"> +          <property name="text"> +           <string>Enable misalignment check reduction</string> +          </property> +          <property name="toolTip"> +           <string> +            <div style="white-space: nowrap">When enabled, a misalignment is only triggered when an access crosses a page boundary.</div> +            <div style="white-space: nowrap">When disabled, a misalignment is triggered on all misaligned accesses.</div> +           </string> +          </property> +         </widget> +        </item> +       </layout> +      </widget> +     </item> +    </layout> +   </item> +   <item> +    <spacer name="verticalSpacer"> +     <property name="orientation"> +      <enum>Qt::Vertical</enum> +     </property> +     <property name="sizeHint" stdset="0"> +      <size> +       <width>20</width> +       <height>40</height> +      </size> +     </property> +    </spacer> +   </item> +   <item> +    <widget class="QLabel" name="label_disable_info"> +     <property name="text"> +      <string>CPU settings are available only when game is not running.</string> +     </property> +     <property name="wordWrap"> +      <bool>true</bool> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp index 2c77441fd..d0e71dd60 100644 --- a/src/yuzu/configuration/configure_debug.cpp +++ b/src/yuzu/configuration/configure_debug.cpp @@ -36,7 +36,6 @@ void ConfigureDebug::SetConfiguration() {      ui->homebrew_args_edit->setText(QString::fromStdString(Settings::values.program_args));      ui->reporting_services->setChecked(Settings::values.reporting_services);      ui->quest_flag->setChecked(Settings::values.quest_flag); -    ui->disable_cpu_opt->setChecked(Settings::values.disable_cpu_opt);      ui->enable_graphics_debugging->setEnabled(!Core::System::GetInstance().IsPoweredOn());      ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug);      ui->disable_macro_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn()); @@ -51,7 +50,6 @@ void ConfigureDebug::ApplyConfiguration() {      Settings::values.program_args = ui->homebrew_args_edit->text().toStdString();      Settings::values.reporting_services = ui->reporting_services->isChecked();      Settings::values.quest_flag = ui->quest_flag->isChecked(); -    Settings::values.disable_cpu_opt = ui->disable_cpu_opt->isChecked();      Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked();      Settings::values.disable_macro_jit = ui->disable_macro_jit->isChecked();      Debugger::ToggleConsole(); diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui index 46f0208c6..272bdd6b8 100644 --- a/src/yuzu/configuration/configure_debug.ui +++ b/src/yuzu/configuration/configure_debug.ui @@ -228,13 +228,6 @@          </property>         </widget>        </item> -      <item> -       <widget class="QCheckBox" name="disable_cpu_opt"> -        <property name="text"> -         <string>Disable CPU JIT optimizations</string> -        </property> -       </widget> -      </item>       </layout>      </widget>     </item> diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp index 5918e9972..a5afb354f 100644 --- a/src/yuzu/configuration/configure_dialog.cpp +++ b/src/yuzu/configuration/configure_dialog.cpp @@ -42,6 +42,8 @@ void ConfigureDialog::ApplyConfiguration() {      ui->filesystemTab->applyConfiguration();      ui->inputTab->ApplyConfiguration();      ui->hotkeysTab->ApplyConfiguration(registry); +    ui->cpuTab->ApplyConfiguration(); +    ui->cpuDebugTab->ApplyConfiguration();      ui->graphicsTab->ApplyConfiguration();      ui->graphicsAdvancedTab->ApplyConfiguration();      ui->audioTab->ApplyConfiguration(); @@ -76,9 +78,10 @@ void ConfigureDialog::RetranslateUI() {  Q_DECLARE_METATYPE(QList<QWidget*>);  void ConfigureDialog::PopulateSelectionList() { -    const std::array<std::pair<QString, QList<QWidget*>>, 5> items{ +    const std::array<std::pair<QString, QList<QWidget*>>, 6> items{          {{tr("General"), {ui->generalTab, ui->webTab, ui->debugTab, ui->uiTab}},           {tr("System"), {ui->systemTab, ui->profileManagerTab, ui->serviceTab, ui->filesystemTab}}, +         {tr("CPU"), {ui->cpuTab, ui->cpuDebugTab}},           {tr("Graphics"), {ui->graphicsTab, ui->graphicsAdvancedTab}},           {tr("Audio"), {ui->audioTab}},           {tr("Controls"), {ui->inputTab, ui->hotkeysTab}}}, @@ -107,6 +110,8 @@ void ConfigureDialog::UpdateVisibleTabs() {          {ui->profileManagerTab, tr("Profiles")},          {ui->inputTab, tr("Input")},          {ui->hotkeysTab, tr("Hotkeys")}, +        {ui->cpuTab, tr("CPU")}, +        {ui->cpuDebugTab, tr("Debug")},          {ui->graphicsTab, tr("Graphics")},          {ui->graphicsAdvancedTab, tr("Advanced")},          {ui->audioTab, tr("Audio")}, diff --git a/src/yuzu/configuration/configure_filesystem.cpp b/src/yuzu/configuration/configure_filesystem.cpp index 835ee821c..a089f5733 100644 --- a/src/yuzu/configuration/configure_filesystem.cpp +++ b/src/yuzu/configuration/configure_filesystem.cpp @@ -11,19 +11,6 @@  #include "yuzu/configuration/configure_filesystem.h"  #include "yuzu/uisettings.h" -namespace { - -template <typename T> -void SetComboBoxFromData(QComboBox* combo_box, T data) { -    const auto index = combo_box->findData(QVariant::fromValue(static_cast<u64>(data))); -    if (index >= combo_box->count() || index < 0) -        return; - -    combo_box->setCurrentIndex(index); -} - -} // Anonymous namespace -  ConfigureFilesystem::ConfigureFilesystem(QWidget* parent)      : QWidget(parent), ui(std::make_unique<Ui::ConfigureFilesystem>()) {      ui->setupUi(this); @@ -73,11 +60,6 @@ void ConfigureFilesystem::setConfiguration() {      ui->cache_game_list->setChecked(UISettings::values.cache_game_list); -    SetComboBoxFromData(ui->nand_size, Settings::values.nand_total_size); -    SetComboBoxFromData(ui->usrnand_size, Settings::values.nand_user_size); -    SetComboBoxFromData(ui->sysnand_size, Settings::values.nand_system_size); -    SetComboBoxFromData(ui->sdmc_size, Settings::values.sdmc_size); -      UpdateEnabledControls();  } @@ -98,15 +80,6 @@ void ConfigureFilesystem::applyConfiguration() {      Settings::values.dump_nso = ui->dump_nso->isChecked();      UISettings::values.cache_game_list = ui->cache_game_list->isChecked(); - -    Settings::values.nand_total_size = static_cast<Settings::NANDTotalSize>( -        ui->nand_size->itemData(ui->nand_size->currentIndex()).toULongLong()); -    Settings::values.nand_system_size = static_cast<Settings::NANDSystemSize>( -        ui->nand_size->itemData(ui->sysnand_size->currentIndex()).toULongLong()); -    Settings::values.nand_user_size = static_cast<Settings::NANDUserSize>( -        ui->nand_size->itemData(ui->usrnand_size->currentIndex()).toULongLong()); -    Settings::values.sdmc_size = static_cast<Settings::SDMCSize>( -        ui->nand_size->itemData(ui->sdmc_size->currentIndex()).toULongLong());  }  void ConfigureFilesystem::SetDirectory(DirectoryTarget target, QLineEdit* edit) { diff --git a/src/yuzu/configuration/configure_filesystem.ui b/src/yuzu/configuration/configure_filesystem.ui index 58cd07f52..84bea0600 100644 --- a/src/yuzu/configuration/configure_filesystem.ui +++ b/src/yuzu/configuration/configure_filesystem.ui @@ -116,127 +116,6 @@        </widget>       </item>       <item> -      <widget class="QGroupBox" name="groupBox_3"> -       <property name="title"> -        <string>Storage Sizes</string> -       </property> -       <layout class="QGridLayout" name="gridLayout_3"> -        <item row="3" column="0"> -         <widget class="QLabel" name="label_5"> -          <property name="text"> -           <string>SD Card</string> -          </property> -         </widget> -        </item> -        <item row="1" column="0"> -         <widget class="QLabel" name="label_4"> -          <property name="text"> -           <string>System NAND</string> -          </property> -         </widget> -        </item> -        <item row="1" column="1"> -         <widget class="QComboBox" name="sysnand_size"> -          <item> -           <property name="text"> -            <string>2.5 GB</string> -           </property> -          </item> -         </widget> -        </item> -        <item row="3" column="1"> -         <widget class="QComboBox" name="sdmc_size"> -          <property name="currentText"> -           <string>32 GB</string> -          </property> -          <item> -           <property name="text"> -            <string>1 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>2 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>4 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>8 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>16 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>32 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>64 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>128 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>256 GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>1 TB</string> -           </property> -          </item> -         </widget> -        </item> -        <item row="2" column="1"> -         <widget class="QComboBox" name="usrnand_size"> -          <item> -           <property name="text"> -            <string>26 GB</string> -           </property> -          </item> -         </widget> -        </item> -        <item row="2" column="0"> -         <widget class="QLabel" name="label_6"> -          <property name="text"> -           <string>User NAND</string> -          </property> -         </widget> -        </item> -        <item row="0" column="0"> -         <widget class="QLabel" name="label_7"> -          <property name="text"> -           <string>NAND</string> -          </property> -         </widget> -        </item> -        <item row="0" column="1"> -         <widget class="QComboBox" name="nand_size"> -          <item> -           <property name="text"> -            <string>29.1 GB</string> -           </property> -          </item> -         </widget> -        </item> -       </layout> -      </widget> -     </item> -     <item>        <widget class="QGroupBox" name="groupBox_4">         <property name="title">          <string>Patch Manager</string> diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp index 1fb62d1cf..20316c9cc 100644 --- a/src/yuzu/configuration/configure_general.cpp +++ b/src/yuzu/configuration/configure_general.cpp @@ -65,6 +65,8 @@ void ConfigureGeneral::ApplyConfiguration() {              Settings::values.use_frame_limit.SetValue(ui->toggle_frame_limit->checkState() ==                                                        Qt::Checked);              Settings::values.frame_limit.SetValue(ui->frame_limit->value()); +        } +        if (Settings::values.use_multi_core.UsingGlobal()) {              Settings::values.use_multi_core.SetValue(ui->use_multi_core->isChecked());          }      } else { | 
