Qt: Add FSR options to settings GUI (#3504)

* Qt: Add FSR settings to settings GUI

* Move FSR settings from Imgui.ini to main config

* move passing fsr settings to presenter constuctor

* cleanup: use struct instead of function call

* cleanup: make variable names consistent with others

* Update fsr settings real-time in qt, save button in Imgui

* Linux build fix, missing running game check

* syntax fix

* Change gamerunning checks to if (presenter)
This commit is contained in:
rainmakerv2
2025-09-03 03:03:33 +08:00
committed by GitHub
parent d9b4618085
commit 77b1d11796
8 changed files with 189 additions and 35 deletions

View File

@@ -29,6 +29,9 @@
#include "settings_dialog.h"
#include "ui_settings_dialog.h"
#include "video_core/renderer_vulkan/vk_instance.h"
#include "video_core/renderer_vulkan/vk_presenter.h"
extern std::unique_ptr<Vulkan::Presenter> presenter;
QStringList languageNames = {"Arabic",
"Czech",
@@ -263,7 +266,7 @@ SettingsDialog::SettingsDialog(std::shared_ptr<gui_settings> gui_settings,
});
}
// Gui TAB
// GUI TAB
{
connect(ui->backgroundImageOpacitySlider, &QSlider::valueChanged, this,
[this](int value) { emit BackgroundOpacityChanged(value); });
@@ -284,7 +287,7 @@ SettingsDialog::SettingsDialog(std::shared_ptr<gui_settings> gui_settings,
});
}
// User TAB
// USER TAB
{
connect(ui->OpenCustomTrophyLocationButton, &QPushButton::clicked, this, []() {
QString userPath;
@@ -294,7 +297,7 @@ SettingsDialog::SettingsDialog(std::shared_ptr<gui_settings> gui_settings,
});
}
// Input TAB
// INPUT TAB
{
connect(ui->hideCursorComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
[this](s16 index) { OnCursorStateChanged(index); });
@@ -385,6 +388,32 @@ SettingsDialog::SettingsDialog(std::shared_ptr<gui_settings> gui_settings,
});
}
// GRAPHICS TAB
connect(ui->RCASSlider, &QSlider::valueChanged, this, [this](int value) {
QString RCASValue = QString::number(value / 1000.0, 'f', 3);
ui->RCASValue->setText(RCASValue);
});
if (presenter) {
connect(ui->RCASSlider, &QSlider::valueChanged, this, [this](int value) {
presenter->GetFsrSettingsRef().rcas_attenuation = static_cast<float>(value / 1000.0f);
});
#if (QT_VERSION < QT_VERSION_CHECK(6, 7, 0))
connect(ui->FSRCheckBox, &QCheckBox::stateChanged, this,
[this](int state) { presenter->GetFsrSettingsRef().enable = state; });
connect(ui->RCASCheckBox, &QCheckBox::stateChanged, this,
[this](int state) { presenter->GetFsrSettingsRef().use_rcas = state; });
#else
connect(ui->FSRCheckBox, &QCheckBox::checkStateChanged, this,
[this](Qt::CheckState state) { presenter->GetFsrSettingsRef().enable = state; });
connect(ui->RCASCheckBox, &QCheckBox::checkStateChanged, this,
[this](Qt::CheckState state) { presenter->GetFsrSettingsRef().use_rcas = state; });
#endif
}
// Descriptions
{
// General
@@ -525,6 +554,11 @@ void SettingsDialog::LoadValuesFromConfig() {
ui->dumpShadersCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "dumpShaders", false));
ui->nullGpuCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "nullGpu", false));
ui->enableHDRCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "allowHDR", false));
ui->FSRCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "fsrEnabled", true));
ui->RCASCheckBox->setChecked(toml::find_or<bool>(data, "GPU", "rcasEnabled", true));
ui->RCASSlider->setValue(toml::find_or<int>(data, "GPU", "rcasAttenuation", 500));
ui->RCASValue->setText(QString::number(ui->RCASSlider->value() / 1000.0, 'f', 3));
ui->playBGMCheckBox->setChecked(m_gui_settings->GetValue(gui::gl_playBackgroundMusic).toBool());
ui->disableTrophycheckBox->setChecked(
toml::find_or<bool>(data, "General", "isTrophyPopupDisabled", false));
@@ -883,6 +917,9 @@ void SettingsDialog::UpdateSettings() {
Config::setVblankDiv(ui->vblankSpinBox->value());
Config::setDumpShaders(ui->dumpShadersCheckBox->isChecked());
Config::setNullGpu(ui->nullGpuCheckBox->isChecked());
Config::setFsrEnabled(ui->FSRCheckBox->isChecked());
Config::setRcasEnabled(ui->RCASCheckBox->isChecked());
Config::setRcasAttenuation(ui->RCASSlider->value());
Config::setLoadGameSizeEnabled(ui->gameSizeCheckBox->isChecked());
Config::setShowSplash(ui->showSplashCheckBox->isChecked());
Config::setDebugDump(ui->debugDump->isChecked());
@@ -978,6 +1015,13 @@ void SettingsDialog::SyncRealTimeWidgetstoConfig() {
Config::setAllGameInstallDirs(settings_install_dirs_config);
}
if (presenter) {
presenter->GetFsrSettingsRef().enable = Config::getFsrEnabled();
presenter->GetFsrSettingsRef().use_rcas = Config::getRcasEnabled();
presenter->GetFsrSettingsRef().rcas_attenuation =
static_cast<float>(Config::getRcasAttenuation() / 1000.f);
}
}
void SettingsDialog::setDefaultValues() {
m_gui_settings->SetValue(gui::gl_showBackgroundImage, true);

View File

@@ -54,7 +54,6 @@ private:
QString defaultTextEdit;
int initialHeight;
bool is_saving = false;
std::shared_ptr<gui_settings> m_gui_settings;
};

View File

@@ -59,7 +59,7 @@
</size>
</property>
<property name="currentIndex">
<number>5</number>
<number>2</number>
</property>
<widget class="QScrollArea" name="generalTab">
<property name="widgetResizable">
@@ -73,8 +73,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>944</width>
<height>537</height>
<width>946</width>
<height>536</height>
</rect>
</property>
<layout class="QVBoxLayout" name="generalTabVLayout" stretch="0">
@@ -452,8 +452,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>414</width>
<height>69</height>
<width>402</width>
<height>68</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
@@ -538,8 +538,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>944</width>
<height>537</height>
<width>946</width>
<height>536</height>
</rect>
</property>
<layout class="QVBoxLayout" name="guiTabVLayout" stretch="0">
@@ -987,8 +987,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>944</width>
<height>537</height>
<width>946</width>
<height>536</height>
</rect>
</property>
<layout class="QVBoxLayout" name="graphicsTabVLayout" stretch="0,0">
@@ -1271,6 +1271,75 @@
<property name="bottomMargin">
<number>12</number>
</property>
<item>
<widget class="QGroupBox" name="FSRGroupBox">
<property name="title">
<string>FSR Settings</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QCheckBox" name="FSRCheckBox">
<property name="text">
<string>Enable FSR</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="RCASCheckBox">
<property name="text">
<string>Enable RCAS (sharpening)</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QLabel" name="RCASAtenLabel">
<property name="font">
<font>
<pointsize>9</pointsize>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>RCAS Attenuation:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="RCASValue">
<property name="font">
<font>
<pointsize>9</pointsize>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>0.250</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QSlider" name="RCASSlider">
<property name="maximum">
<number>3000</number>
</property>
<property name="value">
<number>250</number>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="AdvancedSpacer">
<property name="orientation">
@@ -1316,8 +1385,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>944</width>
<height>537</height>
<width>946</width>
<height>536</height>
</rect>
</property>
<layout class="QVBoxLayout" name="userTabVLayout" stretch="0,0,1">
@@ -1558,8 +1627,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>944</width>
<height>537</height>
<width>946</width>
<height>536</height>
</rect>
</property>
<layout class="QVBoxLayout" name="inputTabVLayout" stretch="0,0">
@@ -1830,8 +1899,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>944</width>
<height>537</height>
<width>946</width>
<height>536</height>
</rect>
</property>
<layout class="QVBoxLayout" name="pathsTabLayout">
@@ -1999,8 +2068,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>944</width>
<height>537</height>
<width>946</width>
<height>536</height>
</rect>
</property>
<layout class="QVBoxLayout" name="debugTabVLayout" stretch="0,0">