From f9abe4049411bd4282534087940332cf0407d217 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Fri, 5 Nov 2021 16:32:13 +0100 Subject: [PATCH] Qt: fix initial TSX selection --- rpcs3/Emu/system_config.cpp | 4 ++-- rpcs3/Emu/system_config.h | 4 ++-- rpcs3/rpcs3qt/settings_dialog.cpp | 11 +++++++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/system_config.cpp b/rpcs3/Emu/system_config.cpp index 8a05b7873b..948fd22f50 100644 --- a/rpcs3/Emu/system_config.cpp +++ b/rpcs3/Emu/system_config.cpp @@ -5,7 +5,7 @@ cfg_root g_cfg{}; -bool cfg_root::node_core::has_rtm() +bool cfg_root::node_core::enable_tsx_by_default() { - return utils::has_rtm(); + return utils::has_rtm() && utils::has_mpx() && !utils::has_tsx_force_abort(); } diff --git a/rpcs3/Emu/system_config.h b/rpcs3/Emu/system_config.h index da0b170b76..dd563b80b6 100644 --- a/rpcs3/Emu/system_config.h +++ b/rpcs3/Emu/system_config.h @@ -14,7 +14,7 @@ struct cfg_root : cfg::node { private: /** We don't wanna include the sysinfo header here */ - static bool has_rtm(); + static bool enable_tsx_by_default(); public: node_core(cfg::node* _this) : cfg::node(_this, "Core") {} @@ -49,7 +49,7 @@ struct cfg_root : cfg::node cfg::uint<0, 16> mfc_transfers_shuffling{ this, "MFC Commands Shuffling Limit", 0 }; cfg::uint<0, 10000> mfc_transfers_timeout{ this, "MFC Commands Timeout", 0, true }; cfg::_bool mfc_shuffling_in_steps{ this, "MFC Commands Shuffling In Steps", false, true }; - cfg::_enum enable_TSX{ this, "Enable TSX", has_rtm() ? tsx_usage::enabled : tsx_usage::disabled }; // Enable TSX. Forcing this on Haswell/Broadwell CPUs should be used carefully + cfg::_enum enable_TSX{ this, "Enable TSX", enable_tsx_by_default() ? tsx_usage::enabled : tsx_usage::disabled }; // Enable TSX. Forcing this on Haswell/Broadwell CPUs should be used carefully cfg::_bool spu_accurate_xfloat{ this, "Accurate xfloat", false }; cfg::_bool spu_approx_xfloat{ this, "Approximate xfloat", true }; cfg::_bool llvm_accurate_dfma{ this, "LLVM Accurate DFMA", true }; // Enable accurate double-precision FMA for CPUs which do not support it natively diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index c9d930264f..8892c57776 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -250,8 +250,15 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std if (!utils::has_mpx() || utils::has_tsx_force_abort()) { - ui->enableTSX->removeItem(ui->enableTSX->findText(m_emu_settings->GetLocalizedSetting(tsx_enabled, emu_settings_type::EnableTSX, static_cast(tsx_usage::enabled)))); - ui->enableTSX->setCurrentIndex(ui->enableTSX->findText(m_emu_settings->GetLocalizedSetting(tsx_default, emu_settings_type::EnableTSX, static_cast(g_cfg.core.enable_TSX.def)))); + const QString current_text = ui->enableTSX->currentText(); + const QString localized_tsx_enabled = m_emu_settings->GetLocalizedSetting(tsx_enabled, emu_settings_type::EnableTSX, static_cast(tsx_usage::enabled)); + + ui->enableTSX->removeItem(ui->enableTSX->findText(localized_tsx_enabled)); + + if (current_text == localized_tsx_enabled) + { + ui->enableTSX->setCurrentText(m_emu_settings->GetLocalizedSetting(tsx_default, emu_settings_type::EnableTSX, static_cast(g_cfg.core.enable_TSX.def))); + } } // connect the toogled signal so that the stateChanged signal in EnhanceCheckBox can be prevented