From c0f8565e460a4ac190224d33b98ed0db7783fd4d Mon Sep 17 00:00:00 2001 From: cdozdil Date: Thu, 26 Feb 2026 22:09:52 +0300 Subject: [PATCH] Better FSR upscaler name selection --- OptiScaler/State.h | 1 + OptiScaler/fsr4/FSR4Upgrade.cpp | 12 ++++++++++-- OptiScaler/menu/menu_common.cpp | 12 +++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/OptiScaler/State.h b/OptiScaler/State.h index da50be93..534db371 100644 --- a/OptiScaler/State.h +++ b/OptiScaler/State.h @@ -198,6 +198,7 @@ class State // Other checks bool isRunningOnNvidia = false; + std::optional isRunningOnRDNA4; bool isPascalOrOlder = false; bool isDxgiMode = false; bool isD3D12Mode = false; diff --git a/OptiScaler/fsr4/FSR4Upgrade.cpp b/OptiScaler/fsr4/FSR4Upgrade.cpp index d9012cba..b0e6275b 100644 --- a/OptiScaler/fsr4/FSR4Upgrade.cpp +++ b/OptiScaler/fsr4/FSR4Upgrade.cpp @@ -133,7 +133,7 @@ std::vector GetDriverStore() void CheckForGPU() { - if (Config::Instance()->Fsr4Update.has_value()) + if (State::Instance().isRunningOnRDNA4.has_value()) return; // Call init for any case @@ -177,7 +177,12 @@ void CheckForGPU() { // If GPU Name contains 90XX or GFX12 (Linux) always set it to true if (szName.find(L" 90") != std::wstring::npos || szName.find(L" GFX12") != std::wstring::npos) - Config::Instance()->Fsr4Update.set_volatile_value(true); + { + if (!Config::Instance()->Fsr4Update.has_value()) + Config::Instance()->Fsr4Update.set_volatile_value(true); + + State::Instance().isRunningOnRDNA4 = true; + } } } else @@ -193,6 +198,9 @@ void CheckForGPU() factory->Release(); factory = nullptr; + if (!State::Instance().isRunningOnRDNA4.has_value()) + State::Instance().isRunningOnRDNA4 = false; + LOG_INFO("Fsr4Update: {}", Config::Instance()->Fsr4Update.value_or_default()); } diff --git a/OptiScaler/menu/menu_common.cpp b/OptiScaler/menu/menu_common.cpp index a7af67fe..aa0fa1c9 100644 --- a/OptiScaler/menu/menu_common.cpp +++ b/OptiScaler/menu/menu_common.cpp @@ -1025,7 +1025,9 @@ void MenuCommon::GetCurrentBackendInfo(const API api, std::string* code, std::st void MenuCommon::AddDx11Backends(std::string* code, std::string* name) { std::string selectedUpscalerName = ""; - std::string fsr3xName = Config::Instance()->Fsr4Update.value_or_default() ? "FSR 3.X/4 w/Dx12" : "FSR 3.X w/Dx12"; + bool fsr4Possible = + Config::Instance()->Fsr4Update.value_or_default() || State::Instance().isRunningOnRDNA4.value_or(false); + std::string fsr3xName = fsr4Possible ? "FSR 3.X/4 w/Dx12" : "FSR 3.X w/Dx12"; if (State::Instance().newBackend == "fsr22" || (State::Instance().newBackend == "" && *code == "fsr22")) selectedUpscalerName = "FSR 2.2.1"; @@ -1078,7 +1080,9 @@ void MenuCommon::AddDx11Backends(std::string* code, std::string* name) void MenuCommon::AddDx12Backends(std::string* code, std::string* name) { std::string selectedUpscalerName = ""; - std::string fsr3xName = Config::Instance()->Fsr4Update.value_or_default() ? "FSR 3.X/4" : "FSR 3.X"; + bool fsr4Possible = + Config::Instance()->Fsr4Update.value_or_default() || State::Instance().isRunningOnRDNA4.value_or(false); + std::string fsr3xName = fsr4Possible ? "FSR 3.X/4 w/Dx12" : "FSR 3.X w/Dx12"; if (State::Instance().newBackend == "fsr21" || (State::Instance().newBackend == "" && *code == "fsr21")) selectedUpscalerName = "FSR 2.1.2"; @@ -1116,7 +1120,9 @@ void MenuCommon::AddDx12Backends(std::string* code, std::string* name) void MenuCommon::AddVulkanBackends(std::string* code, std::string* name) { std::string selectedUpscalerName = ""; - std::string fsr3xName = Config::Instance()->Fsr4Update.value_or_default() ? "FSR 3.X/4 w/Dx12" : "FSR 3.X w/Dx12"; + bool fsr4Possible = + Config::Instance()->Fsr4Update.value_or_default() || State::Instance().isRunningOnRDNA4.value_or(false); + std::string fsr3xName = fsr4Possible ? "FSR 3.X/4 w/Dx12" : "FSR 3.X w/Dx12"; if (State::Instance().newBackend == "fsr21" || (State::Instance().newBackend == "" && *code == "fsr21")) selectedUpscalerName = "FSR 2.1.2";