From f826f95c70b09565d923b51a6dcb10b34fe1b445 Mon Sep 17 00:00:00 2001 From: Ani Date: Sat, 11 Apr 2026 00:11:10 +0200 Subject: [PATCH] gui: Group CPU accuracy settings together --- rpcs3/Emu/system_config.h | 2 +- rpcs3/rpcs3qt/emu_settings_type.h | 4 +- rpcs3/rpcs3qt/settings_dialog.cpp | 4 +- rpcs3/rpcs3qt/settings_dialog.ui | 203 +++++++++++++++++------------- rpcs3/rpcs3qt/tooltips.h | 2 +- 5 files changed, 120 insertions(+), 95 deletions(-) diff --git a/rpcs3/Emu/system_config.h b/rpcs3/Emu/system_config.h index 7a84455dae..f8c621ad25 100644 --- a/rpcs3/Emu/system_config.h +++ b/rpcs3/Emu/system_config.h @@ -66,10 +66,10 @@ struct cfg_root : cfg::node cfg::_int<-64, 64> stub_ppu_traps{ this, "Stub PPU Traps", 0, true }; // Hack, skip PPU traps for rare cases where the trap is continueable (specify relative instructions to skip) cfg::_bool precise_spu_verification{ this, "Precise SPU Verification", false }; // Disables use of xorsum based spu verification if enabled. cfg::_bool ppu_llvm_nj_fixup{ this, "PPU LLVM Java Mode Handling", true }; // Partially respect current Java Mode for alti-vec ops by PPU LLVM + cfg::_bool ppu_fix_vnan{ this, "PPU Vector NaN Handling", true }; // Accuracy. Partial. cfg::_bool use_accurate_dfma{ this, "Use Accurate DFMA", true }; // Enable accurate double-precision FMA for CPUs which do not support it natively cfg::_bool ppu_set_sat_bit{ this, "PPU Set Saturation Bit", false }; // Accuracy. If unset, completely disable saturation flag handling. cfg::_bool ppu_use_nj_bit{ this, "PPU Accurate Non-Java Mode", false }; // Accuracy. If set, accurately emulate NJ flag. Implies NJ fixup. - cfg::_bool ppu_fix_vnan{ this, "PPU Fixup Vector NaN Values", true }; // Accuracy. Partial. cfg::_bool ppu_set_vnan{ this, "PPU Accurate Vector NaN Values", false }; // Accuracy. Implies ppu_fix_vnan. cfg::_bool ppu_set_fpcc{ this, "PPU Set FPCC Bits", false }; // Accuracy. diff --git a/rpcs3/rpcs3qt/emu_settings_type.h b/rpcs3/rpcs3qt/emu_settings_type.h index db3e3556da..bc2f1e5cce 100644 --- a/rpcs3/rpcs3qt/emu_settings_type.h +++ b/rpcs3/rpcs3qt/emu_settings_type.h @@ -42,10 +42,10 @@ enum class emu_settings_type PerformanceReport, FullWidthAVX512, PPUNJFixup, + PPUVNANFixup, AccurateDFMA, AccuratePPUSAT, AccuratePPUNJ, - FixupPPUVNAN, AccuratePPUVNAN, AccuratePPUFPCC, MaxPreemptCount, @@ -258,10 +258,10 @@ inline static const std::map settings_location { emu_settings_type::FullWidthAVX512, { "Core", "Full Width AVX-512"}}, { emu_settings_type::NumPPUThreads, { "Core", "PPU Threads"}}, { emu_settings_type::PPUNJFixup, { "Core", "PPU LLVM Java Mode Handling"}}, + { emu_settings_type::PPUVNANFixup, { "Core", "PPU Vector NaN Handling"}}, { emu_settings_type::AccurateDFMA, { "Core", "Use Accurate DFMA"}}, { emu_settings_type::AccuratePPUSAT, { "Core", "PPU Set Saturation Bit"}}, { emu_settings_type::AccuratePPUNJ, { "Core", "PPU Accurate Non-Java Mode"}}, - { emu_settings_type::FixupPPUVNAN, { "Core", "PPU Fixup Vector NaN Values"}}, { emu_settings_type::AccuratePPUVNAN, { "Core", "PPU Accurate Vector NaN Values"}}, { emu_settings_type::AccuratePPUFPCC, { "Core", "PPU Set FPCC Bits"}}, { emu_settings_type::MaxPreemptCount, { "Core", "Max CPU Preempt Count"}}, diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 7e7f115d22..8ff2da2018 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -1499,8 +1499,8 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std m_emu_settings->EnhanceCheckBox(ui->ppuNJFixup, emu_settings_type::PPUNJFixup); SubscribeTooltip(ui->ppuNJFixup, tooltips.settings.fixup_ppunj); - m_emu_settings->EnhanceCheckBox(ui->fixupPPUVNAN, emu_settings_type::FixupPPUVNAN); - SubscribeTooltip(ui->fixupPPUVNAN, tooltips.settings.fixup_ppuvnan); + m_emu_settings->EnhanceCheckBox(ui->PPUVNANfixup, emu_settings_type::PPUVNANFixup); + SubscribeTooltip(ui->PPUVNANfixup, tooltips.settings.fixup_ppuvnan); m_emu_settings->EnhanceCheckBox(ui->llvmPrecompilation, emu_settings_type::LLVMPrecompilation); SubscribeTooltip(ui->llvmPrecompilation, tooltips.settings.llvm_precompilation); diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui index d3b98a2608..6c8c14fc42 100644 --- a/rpcs3/rpcs3qt/settings_dialog.ui +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -3543,7 +3543,7 @@ 1 - 0.5 + 0.500000000000000 @@ -3571,7 +3571,7 @@ 1 - 0.5 + 0.500000000000000 @@ -4309,6 +4309,13 @@ + + + + Disable Asynchronous Memory Manager + + + @@ -4316,6 +4323,20 @@ + + + + Disable Hardware ColorSpace Remapping + + + + + + + Disable On-Disk Shader Cache + + + @@ -4382,27 +4403,6 @@ - - - - Disable Asynchronous Memory Manager - - - - - - - Disable On-Disk Shader Cache - - - - - - - Disable Hardware ColorSpace Remapping - - - @@ -4428,13 +4428,6 @@ Core - - - - Accurate DFMA - - - @@ -4456,20 +4449,6 @@ - - - - PPU Debug - - - - - - - SPU Debug - - - @@ -4477,59 +4456,24 @@ + + + + PPU Debug + + + - Set DAZ and FTZ + PPU Set DAZ and FTZ - + - Accurate PPU Saturation Bit - - - - - - - Accurate PPU Non-Java Mode - - - - - - - PPU Non-Java Mode Fixup - - - - - - - Accurate PPU Vector NaN Handling - - - - - - - Accurate PPU Float Condition Control - - - - - - - Accurate Cache Line Stores - - - - - - - PPU Vector NaN Fixup + SPU Debug @@ -4556,6 +4500,87 @@ + + + + CPU Accuracy + + + + + + Accurate PPU/SPU Double-Precision FMA + + + + + + + Accurate PPU/SPU Cache Line Stores + + + + + + + Accurate PPU Float Condition Control + + + + + + + Accurate PPU Saturation Bit + + + + + + + Accurate PPU Non-Java Mode + + + + + + + Accurate PPU Vector NaN Handling + + + + + + + Approximate PPU Non-Java Mode + + + + + + + Approximate PPU Vector NaN Handling + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::MinimumExpanding + + + + 0 + 0 + + + + + + + diff --git a/rpcs3/rpcs3qt/tooltips.h b/rpcs3/rpcs3qt/tooltips.h index caccc1c47b..9ec1355392 100644 --- a/rpcs3/rpcs3qt/tooltips.h +++ b/rpcs3/rpcs3qt/tooltips.h @@ -28,8 +28,8 @@ public: const QString debug_console_mode = tr("Increases the amount of usable system memory to match a DECR console and more.\nCauses some software to behave differently than on retail hardware."); const QString accurate_rsx_access = tr("Forces RSX pauses on SPU MFC_GETLLAR and SPU MFC_PUTLLUC operations."); const QString accurate_spu_dma = tr("Accurately processes SPU DMA operations."); - const QString fixup_ppunj = tr("Legacy option. Fixup result vector values in Non-Java Mode in PPU LLVM.\nIf unsure, do not modify this setting."); const QString accurate_dfma = tr("Use accurate double-precision FMA instructions in PPU and SPU backends.\nWhile disabling it might give a decent performance boost if your CPU doesn't support FMA, it may also introduce subtle bugs that otherwise do not occur.\nYou shouldn't disable it if your CPU supports FMA."); + const QString fixup_ppunj = tr("Legacy option. Fixup result vector values in Non-Java Mode in PPU LLVM.\nIf unsure, do not modify this setting."); const QString fixup_ppuvnan = tr("Fixup NaN results in vector instructions in PPU backends.\nIf unsure, do not modify this setting."); const QString silence_all_logs = tr("Stop writing any logs after game startup. Don't use unless you believe it's necessary."); const QString read_color = tr("Initializes render target memory using vm memory.");