From b109499cb5db6ae939a9c74fb9b5fd764e3b668c Mon Sep 17 00:00:00 2001 From: Dmugetsu Date: Mon, 17 Mar 2025 12:30:13 -0600 Subject: [PATCH] RCAS under graphics tab --- src/common/config.cpp | 11 +++++ src/common/config.h | 2 + src/qt_gui/settings_dialog.cpp | 16 +++++++ src/qt_gui/settings_dialog.h | 2 + src/qt_gui/settings_dialog.ui | 42 +++++++++++++++++++ .../renderer_vulkan/host_passes/fsr_pass.cpp | 2 +- .../renderer_vulkan/host_passes/fsr_pass.h | 3 +- 7 files changed, 76 insertions(+), 2 deletions(-) diff --git a/src/common/config.cpp b/src/common/config.cpp index 514024c30..d508bbc48 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -40,6 +40,7 @@ static u32 screenWidth = 1280; static u32 screenHeight = 720; static s32 gpuId = -1; // Vulkan physical device index. Set to negative for auto select static std::string logFilter; +static float rcas_attenuation = 0.25f; static std::string logType = "async"; static std::string userName = "shadPS4"; static std::string updateChannel; @@ -214,6 +215,14 @@ s32 getGpuId() { return gpuId; } +float getRcasAttenuation() { + return rcas_attenuation; +} + +void setRcasAttenuation(float value) { + rcas_attenuation = value; +} + std::string getLogFilter() { return logFilter; } @@ -763,6 +772,7 @@ void load(const std::filesystem::path& path) { screenWidth = toml::find_or(gpu, "screenWidth", screenWidth); screenHeight = toml::find_or(gpu, "screenHeight", screenHeight); + rcas_attenuation = toml::find_or(gpu, "rcas_attenuation", 0.25f); isNullGpu = toml::find_or(gpu, "nullGpu", false); shouldCopyGPUBuffers = toml::find_or(gpu, "copyGPUBuffers", false); shouldDumpShaders = toml::find_or(gpu, "dumpShaders", false); @@ -902,6 +912,7 @@ void save(const std::filesystem::path& path) { data["Input"]["useUnifiedInputConfig"] = useUnifiedInputConfig; data["GPU"]["screenWidth"] = screenWidth; data["GPU"]["screenHeight"] = screenHeight; + data["GPU"]["rcas_attenuation"] = rcas_attenuation; data["GPU"]["nullGpu"] = isNullGpu; data["GPU"]["copyGPUBuffers"] = shouldCopyGPUBuffers; data["GPU"]["dumpShaders"] = shouldDumpShaders; diff --git a/src/common/config.h b/src/common/config.h index 82d65d30e..fd6731ced 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -15,6 +15,8 @@ void load(const std::filesystem::path& path); void save(const std::filesystem::path& path); void saveMainWindow(const std::filesystem::path& path); +float getRcasAttenuation(); +void setRcasAttenuation(float value); std::string getTrophyKey(); void setTrophyKey(std::string key); bool GetLoadGameSizeEnabled(); diff --git a/src/qt_gui/settings_dialog.cpp b/src/qt_gui/settings_dialog.cpp index 41caccec9..298386d4c 100644 --- a/src/qt_gui/settings_dialog.cpp +++ b/src/qt_gui/settings_dialog.cpp @@ -485,6 +485,9 @@ void SettingsDialog::LoadValuesFromConfig() { ui->checkCompatibilityOnStartupCheckBox->setChecked( toml::find_or(data, "General", "checkCompatibilityOnStartup", false)); + ui->rcasAttenuationSlider->setValue(static_cast(Config::getRcasAttenuation() * 1000)); + ui->rcasAttenuationSpinBox->setValue(Config::getRcasAttenuation()); + #ifdef ENABLE_UPDATER ui->updateCheckBox->setChecked(toml::find_or(data, "General", "autoUpdate", false)); ui->changelogCheckBox->setChecked( @@ -782,6 +785,7 @@ void SettingsDialog::UpdateSettings() { Config::setBackgroundImageOpacity(ui->backgroundImageOpacitySlider->value()); emit BackgroundOpacityChanged(ui->backgroundImageOpacitySlider->value()); Config::setShowBackgroundImage(ui->showBackgroundImageCheckBox->isChecked()); + Config::setRcasAttenuation(ui->rcasAttenuationSpinBox->value()); #ifdef ENABLE_DISCORD_RPC auto* rpc = Common::Singleton::Instance(); @@ -796,6 +800,18 @@ void SettingsDialog::UpdateSettings() { BackgroundMusicPlayer::getInstance().setVolume(ui->BGMVolumeSlider->value()); } +void SettingsDialog::OnRcasAttenuationChanged(int value) { + float attenuation = static_cast(value) / 1000.0f; + ui->rcasAttenuationSpinBox->setValue(attenuation); + Config::setRcasAttenuation(attenuation); +} + +void SettingsDialog::OnRcasAttenuationSpinBoxChanged(double value) { + int int_value = static_cast(value * 1000); + ui->rcasAttenuationSlider->setValue(int_value); + Config::setRcasAttenuation(static_cast(value)); +} + void SettingsDialog::ResetInstallFolders() { std::filesystem::path userdir = Common::FS::GetUserPath(Common::FS::PathType::UserDir); diff --git a/src/qt_gui/settings_dialog.h b/src/qt_gui/settings_dialog.h index 09aa2b855..65d1a9f86 100644 --- a/src/qt_gui/settings_dialog.h +++ b/src/qt_gui/settings_dialog.h @@ -43,6 +43,8 @@ private: void OnLanguageChanged(int index); void OnCursorStateChanged(s16 index); void closeEvent(QCloseEvent* event) override; + void OnRcasAttenuationChanged(int value); + void OnRcasAttenuationSpinBoxChanged(double value); std::unique_ptr ui; diff --git a/src/qt_gui/settings_dialog.ui b/src/qt_gui/settings_dialog.ui index 5600a0db7..9dd7096bb 100644 --- a/src/qt_gui/settings_dialog.ui +++ b/src/qt_gui/settings_dialog.ui @@ -1127,6 +1127,48 @@ + + + + RCAS Attenuation + + + + + + + 0 + + + 3000 + + + 1 + + + 100 + + + Qt::Horizontal + + + + + + + 0.000 + + + 3.000 + + + 0.001 + + + 3 + + + diff --git a/src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp b/src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp index 1c54207e0..01479adc9 100644 --- a/src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp +++ b/src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp @@ -273,7 +273,7 @@ vk::ImageView FsrPass::Render(vk::CommandBuffer cmdbuf, vk::ImageView input, { // rcas consts = {}; - FsrRcasCon(reinterpret_cast(&consts.Const0), settings.rcas_attenuation); + FsrRcasCon(reinterpret_cast(&consts.Const0), Config::getRcasAttenuation()); consts.Sample[0] = hdr ? 1 : 0; std::array img_info{{ diff --git a/src/video_core/renderer_vulkan/host_passes/fsr_pass.h b/src/video_core/renderer_vulkan/host_passes/fsr_pass.h index 3d48d85be..2f328e0d6 100644 --- a/src/video_core/renderer_vulkan/host_passes/fsr_pass.h +++ b/src/video_core/renderer_vulkan/host_passes/fsr_pass.h @@ -4,6 +4,7 @@ #pragma once #include "common/types.h" +#include "common/config.h" #include "video_core/renderer_vulkan/vk_common.h" #include "video_core/texture_cache/image.h" @@ -14,7 +15,7 @@ public: struct Settings { bool enable{true}; bool use_rcas{true}; - float rcas_attenuation{0.25f}; + float rcas_attenuation{Config::getRcasAttenuation()}; }; void Create(vk::Device device, VmaAllocator allocator, u32 num_images);