From 0892998af170ecbbe45dff87d8352bdfb97bca82 Mon Sep 17 00:00:00 2001 From: Martino Fontana Date: Mon, 24 Jul 2023 20:12:32 +0200 Subject: [PATCH 1/3] Qt/GameConfigWidget: Add `reverse` argument for `{Save,Load}CheckBox` In order to not hard code `if (key == "FastDiscSpeed")` --- .../DolphinQt/Config/GameConfigWidget.cpp | 35 +++++-------------- .../Core/DolphinQt/Config/GameConfigWidget.h | 6 ++-- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp index a702c90f84..3ab83c11ff 100644 --- a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp +++ b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp @@ -219,30 +219,19 @@ void GameConfigWidget::ConnectWidgets() } void GameConfigWidget::LoadCheckBox(QCheckBox* checkbox, const std::string& section, - const std::string& key) + const std::string& key, bool reverse) { bool checked; - if (key == "FastDiscSpeed") - { - if (m_gameini_local.GetOrCreateSection(section)->Get("FastDiscSpeed", &checked)) - return checkbox->setCheckState(!checked ? Qt::Checked : Qt::Unchecked); + if (m_gameini_local.GetOrCreateSection(section)->Get(key, &checked)) + return checkbox->setCheckState(checked ^ reverse ? Qt::Checked : Qt::Unchecked); - if (m_gameini_default.GetOrCreateSection(section)->Get("FastDiscSpeed", &checked)) - return checkbox->setCheckState(!checked ? Qt::Checked : Qt::Unchecked); - } - else - { - if (m_gameini_local.GetOrCreateSection(section)->Get(key, &checked)) - return checkbox->setCheckState(checked ? Qt::Checked : Qt::Unchecked); - - if (m_gameini_default.GetOrCreateSection(section)->Get(key, &checked)) - return checkbox->setCheckState(checked ? Qt::Checked : Qt::Unchecked); - } + if (m_gameini_default.GetOrCreateSection(section)->Get(key, &checked)) + return checkbox->setCheckState(checked ^ reverse ? Qt::Checked : Qt::Unchecked); checkbox->setCheckState(Qt::PartiallyChecked); } void GameConfigWidget::SaveCheckBox(QCheckBox* checkbox, const std::string& section, - const std::string& key) + const std::string& key, bool reverse) { // Delete any existing entries from the local gameini if checkbox is undetermined. // Otherwise, write the current value to the local gameini if the value differs from the default @@ -256,13 +245,7 @@ void GameConfigWidget::SaveCheckBox(QCheckBox* checkbox, const std::string& sect return; } - bool checked = checkbox->checkState() == Qt::Checked; - - if (key == "FastDiscSpeed") - { - m_gameini_local.GetOrCreateSection(section)->Set(key, !checked); - return; - } + bool checked = (checkbox->checkState() == Qt::Checked) ^ reverse; if (m_gameini_default.Exists(section, key)) { @@ -293,7 +276,7 @@ void GameConfigWidget::LoadSettings() LoadCheckBox(m_enable_mmu, "Core", "MMU"); LoadCheckBox(m_enable_fprf, "Core", "FPRF"); LoadCheckBox(m_sync_gpu, "Core", "SyncGPU"); - LoadCheckBox(m_enable_fast_disc, "Core", "FastDiscSpeed"); + LoadCheckBox(m_enable_fast_disc, "Core", "FastDiscSpeed", true); LoadCheckBox(m_use_dsp_hle, "Core", "DSPHLE"); std::string determinism_mode; @@ -343,7 +326,7 @@ void GameConfigWidget::SaveSettings() SaveCheckBox(m_enable_mmu, "Core", "MMU"); SaveCheckBox(m_enable_fprf, "Core", "FPRF"); SaveCheckBox(m_sync_gpu, "Core", "SyncGPU"); - SaveCheckBox(m_enable_fast_disc, "Core", "FastDiscSpeed"); + SaveCheckBox(m_enable_fast_disc, "Core", "FastDiscSpeed", true); SaveCheckBox(m_use_dsp_hle, "Core", "DSPHLE"); int determinism_num = m_deterministic_dual_core->currentIndex(); diff --git a/Source/Core/DolphinQt/Config/GameConfigWidget.h b/Source/Core/DolphinQt/Config/GameConfigWidget.h index 44ae2375f5..7eda19cdc5 100644 --- a/Source/Core/DolphinQt/Config/GameConfigWidget.h +++ b/Source/Core/DolphinQt/Config/GameConfigWidget.h @@ -35,8 +35,10 @@ private: void LoadSettings(); void SaveSettings(); - void SaveCheckBox(QCheckBox* checkbox, const std::string& section, const std::string& key); - void LoadCheckBox(QCheckBox* checkbox, const std::string& section, const std::string& key); + void SaveCheckBox(QCheckBox* checkbox, const std::string& section, const std::string& key, + bool reverse = false); + void LoadCheckBox(QCheckBox* checkbox, const std::string& section, const std::string& key, + bool reverse = false); QString m_gameini_sys_path; QString m_gameini_local_path; From 41f81aca6933d9ec93fa0f4e23429df3bd935137 Mon Sep 17 00:00:00 2001 From: Martino Fontana Date: Mon, 24 Jul 2023 20:51:02 +0200 Subject: [PATCH 2/3] Qt/GameConfigWidget: Rename `m_enable_fast_disc` to `m_emulate_disc_speed` --- .../DolphinQt/Config/GameConfigWidget.cpp | 19 ++++++++++--------- .../Core/DolphinQt/Config/GameConfigWidget.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp index 3ab83c11ff..8bbf7376aa 100644 --- a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp +++ b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp @@ -88,7 +88,7 @@ void GameConfigWidget::CreateWidgets() m_enable_mmu = new QCheckBox(tr("Enable MMU")); m_enable_fprf = new QCheckBox(tr("Enable FPRF")); m_sync_gpu = new QCheckBox(tr("Synchronize GPU thread")); - m_enable_fast_disc = new QCheckBox(tr("Emulate Disc Speed")); + m_emulate_disc_speed = new QCheckBox(tr("Emulate Disc Speed")); m_use_dsp_hle = new QCheckBox(tr("DSP HLE (fast)")); m_deterministic_dual_core = new QComboBox; @@ -102,15 +102,16 @@ void GameConfigWidget::CreateWidgets() "games. (ON = Compatible, OFF = Fast)")); m_sync_gpu->setToolTip(tr("Synchronizes the GPU and CPU threads to help prevent random freezes " "in Dual core mode. (ON = Compatible, OFF = Fast)")); - m_enable_fast_disc->setToolTip(tr("Enable emulated disc speed. Disabling this can cause crashes " - "and other problems in some games. " - "(ON = Compatible, OFF = Unlocked)")); + m_emulate_disc_speed->setToolTip( + tr("Enable emulated disc speed. Disabling this can cause crashes " + "and other problems in some games. " + "(ON = Compatible, OFF = Unlocked)")); core_layout->addWidget(m_enable_dual_core, 0, 0); core_layout->addWidget(m_enable_mmu, 1, 0); core_layout->addWidget(m_enable_fprf, 2, 0); core_layout->addWidget(m_sync_gpu, 3, 0); - core_layout->addWidget(m_enable_fast_disc, 4, 0); + core_layout->addWidget(m_emulate_disc_speed, 4, 0); core_layout->addWidget(m_use_dsp_hle, 5, 0); core_layout->addWidget(new QLabel(tr("Deterministic dual core:")), 6, 0); core_layout->addWidget(m_deterministic_dual_core, 6, 1); @@ -160,7 +161,7 @@ void GameConfigWidget::CreateWidgets() general_layout->addWidget(m_refresh_config, 1, 0, 1, -1); for (QCheckBox* item : {m_enable_dual_core, m_enable_mmu, m_enable_fprf, m_sync_gpu, - m_enable_fast_disc, m_use_dsp_hle, m_use_monoscopic_shadows}) + m_emulate_disc_speed, m_use_dsp_hle, m_use_monoscopic_shadows}) item->setTristate(true); auto* general_widget = new QWidget; @@ -207,7 +208,7 @@ void GameConfigWidget::ConnectWidgets() connect(m_refresh_config, &QPushButton::clicked, this, &GameConfigWidget::LoadSettings); for (QCheckBox* box : {m_enable_dual_core, m_enable_mmu, m_enable_fprf, m_sync_gpu, - m_enable_fast_disc, m_use_dsp_hle, m_use_monoscopic_shadows}) + m_emulate_disc_speed, m_use_dsp_hle, m_use_monoscopic_shadows}) connect(box, &QCheckBox::stateChanged, this, &GameConfigWidget::SaveSettings); connect(m_deterministic_dual_core, qOverload(&QComboBox::currentIndexChanged), this, @@ -276,7 +277,7 @@ void GameConfigWidget::LoadSettings() LoadCheckBox(m_enable_mmu, "Core", "MMU"); LoadCheckBox(m_enable_fprf, "Core", "FPRF"); LoadCheckBox(m_sync_gpu, "Core", "SyncGPU"); - LoadCheckBox(m_enable_fast_disc, "Core", "FastDiscSpeed", true); + LoadCheckBox(m_emulate_disc_speed, "Core", "FastDiscSpeed", true); LoadCheckBox(m_use_dsp_hle, "Core", "DSPHLE"); std::string determinism_mode; @@ -326,7 +327,7 @@ void GameConfigWidget::SaveSettings() SaveCheckBox(m_enable_mmu, "Core", "MMU"); SaveCheckBox(m_enable_fprf, "Core", "FPRF"); SaveCheckBox(m_sync_gpu, "Core", "SyncGPU"); - SaveCheckBox(m_enable_fast_disc, "Core", "FastDiscSpeed", true); + SaveCheckBox(m_emulate_disc_speed, "Core", "FastDiscSpeed", true); SaveCheckBox(m_use_dsp_hle, "Core", "DSPHLE"); int determinism_num = m_deterministic_dual_core->currentIndex(); diff --git a/Source/Core/DolphinQt/Config/GameConfigWidget.h b/Source/Core/DolphinQt/Config/GameConfigWidget.h index 7eda19cdc5..2184549dc6 100644 --- a/Source/Core/DolphinQt/Config/GameConfigWidget.h +++ b/Source/Core/DolphinQt/Config/GameConfigWidget.h @@ -50,7 +50,7 @@ private: QCheckBox* m_enable_mmu; QCheckBox* m_enable_fprf; QCheckBox* m_sync_gpu; - QCheckBox* m_enable_fast_disc; + QCheckBox* m_emulate_disc_speed; QCheckBox* m_use_dsp_hle; QCheckBox* m_use_monoscopic_shadows; From 1e5e319783cb69a106556a9e3b0ab77b7aff1021 Mon Sep 17 00:00:00 2001 From: Martino Fontana Date: Mon, 24 Jul 2023 20:12:44 +0200 Subject: [PATCH 3/3] Qt/GameConfigWidget: Add Manual Texture Sampling --- .../Core/DolphinQt/Config/GameConfigWidget.cpp | 18 ++++++++++++------ .../Core/DolphinQt/Config/GameConfigWidget.h | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp index 8bbf7376aa..d918f5cd62 100644 --- a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp +++ b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp @@ -90,6 +90,7 @@ void GameConfigWidget::CreateWidgets() m_sync_gpu = new QCheckBox(tr("Synchronize GPU thread")); m_emulate_disc_speed = new QCheckBox(tr("Emulate Disc Speed")); m_use_dsp_hle = new QCheckBox(tr("DSP HLE (fast)")); + m_manual_texture_sampling = new QCheckBox(tr("Manual Texture Sampling")); m_deterministic_dual_core = new QComboBox; for (const auto& item : {tr("Not Set"), tr("auto"), tr("none"), tr("fake-completion")}) @@ -113,8 +114,9 @@ void GameConfigWidget::CreateWidgets() core_layout->addWidget(m_sync_gpu, 3, 0); core_layout->addWidget(m_emulate_disc_speed, 4, 0); core_layout->addWidget(m_use_dsp_hle, 5, 0); - core_layout->addWidget(new QLabel(tr("Deterministic dual core:")), 6, 0); - core_layout->addWidget(m_deterministic_dual_core, 6, 1); + core_layout->addWidget(m_manual_texture_sampling, 6, 0); + core_layout->addWidget(new QLabel(tr("Deterministic dual core:")), 7, 0); + core_layout->addWidget(m_deterministic_dual_core, 7, 1); // Stereoscopy auto* stereoscopy_box = new QGroupBox(tr("Stereoscopy")); @@ -160,8 +162,9 @@ void GameConfigWidget::CreateWidgets() general_layout->addWidget(m_refresh_config, 1, 0, 1, -1); - for (QCheckBox* item : {m_enable_dual_core, m_enable_mmu, m_enable_fprf, m_sync_gpu, - m_emulate_disc_speed, m_use_dsp_hle, m_use_monoscopic_shadows}) + for (QCheckBox* item : + {m_enable_dual_core, m_enable_mmu, m_enable_fprf, m_sync_gpu, m_emulate_disc_speed, + m_use_dsp_hle, m_manual_texture_sampling, m_use_monoscopic_shadows}) item->setTristate(true); auto* general_widget = new QWidget; @@ -207,8 +210,9 @@ void GameConfigWidget::ConnectWidgets() // Buttons connect(m_refresh_config, &QPushButton::clicked, this, &GameConfigWidget::LoadSettings); - for (QCheckBox* box : {m_enable_dual_core, m_enable_mmu, m_enable_fprf, m_sync_gpu, - m_emulate_disc_speed, m_use_dsp_hle, m_use_monoscopic_shadows}) + for (QCheckBox* box : + {m_enable_dual_core, m_enable_mmu, m_enable_fprf, m_sync_gpu, m_emulate_disc_speed, + m_use_dsp_hle, m_manual_texture_sampling, m_use_monoscopic_shadows}) connect(box, &QCheckBox::stateChanged, this, &GameConfigWidget::SaveSettings); connect(m_deterministic_dual_core, qOverload(&QComboBox::currentIndexChanged), this, @@ -279,6 +283,7 @@ void GameConfigWidget::LoadSettings() LoadCheckBox(m_sync_gpu, "Core", "SyncGPU"); LoadCheckBox(m_emulate_disc_speed, "Core", "FastDiscSpeed", true); LoadCheckBox(m_use_dsp_hle, "Core", "DSPHLE"); + LoadCheckBox(m_manual_texture_sampling, "Video_Hacks", "FastTextureSampling", true); std::string determinism_mode; @@ -329,6 +334,7 @@ void GameConfigWidget::SaveSettings() SaveCheckBox(m_sync_gpu, "Core", "SyncGPU"); SaveCheckBox(m_emulate_disc_speed, "Core", "FastDiscSpeed", true); SaveCheckBox(m_use_dsp_hle, "Core", "DSPHLE"); + SaveCheckBox(m_manual_texture_sampling, "Video_Hacks", "FastTextureSampling", true); int determinism_num = m_deterministic_dual_core->currentIndex(); diff --git a/Source/Core/DolphinQt/Config/GameConfigWidget.h b/Source/Core/DolphinQt/Config/GameConfigWidget.h index 2184549dc6..7ad4e64925 100644 --- a/Source/Core/DolphinQt/Config/GameConfigWidget.h +++ b/Source/Core/DolphinQt/Config/GameConfigWidget.h @@ -53,6 +53,7 @@ private: QCheckBox* m_emulate_disc_speed; QCheckBox* m_use_dsp_hle; QCheckBox* m_use_monoscopic_shadows; + QCheckBox* m_manual_texture_sampling; QPushButton* m_refresh_config;