From 743aaf4e12bd057704c0ae9443c25c40156f4d15 Mon Sep 17 00:00:00 2001 From: cdozdil Date: Wed, 8 Oct 2025 00:08:48 +0300 Subject: [PATCH] Use active swapchain api info for comparisons --- OptiScaler/hooks/Streamline_Hooks.cpp | 2 +- OptiScaler/menu/menu_common.cpp | 51 +++++++++++---------- OptiScaler/upscalers/dlss/DLSSFeature.cpp | 5 +- OptiScaler/upscalers/dlssd/DLSSDFeature.cpp | 5 +- 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/OptiScaler/hooks/Streamline_Hooks.cpp b/OptiScaler/hooks/Streamline_Hooks.cpp index 13a581db..f6fdc330 100644 --- a/OptiScaler/hooks/Streamline_Hooks.cpp +++ b/OptiScaler/hooks/Streamline_Hooks.cpp @@ -543,7 +543,7 @@ sl::Result StreamlineHooks::hkslDLSSGSetOptions(const sl::ViewportHandle& viewpo sl::DLSSGOptions newOptions = options; newOptions.mode = newOptions.mode == sl::DLSSGMode::eOff ? sl::DLSSGMode::eOff : sl::DLSSGMode::eOn; - if (State::Instance().api == API::Vulkan) + if (State::Instance().swapchainApi == API::Vulkan) { // Only matters for Vulkan, DX doesn't use this delay if (options.mode != sl::DLSSGMode::eOff && !MenuOverlayBase::IsVisible()) diff --git a/OptiScaler/menu/menu_common.cpp b/OptiScaler/menu/menu_common.cpp index 8c812737..b7f8c606 100644 --- a/OptiScaler/menu/menu_common.cpp +++ b/OptiScaler/menu/menu_common.cpp @@ -1464,7 +1464,8 @@ bool MenuCommon::RenderMenu() inputFG = false; if (state.activeFgInput != FGInput::NoFG && state.activeFgOutput != FGOutput::NoFG && - state.api != API::DX11 && (state.api != API::Vulkan || state.activeFgInput == FGInput::Nukems)) + state.swapchainApi != API::DX11 && + (state.swapchainApi != API::Vulkan || state.activeFgInput == FGInput::Nukems)) { Config::Instance()->FGEnabled = !Config::Instance()->FGEnabled.value_or_default(); @@ -2256,13 +2257,13 @@ bool MenuCommon::RenderMenu() ImGui::SeparatorText("Upscalers"); ShowTooltip("Which copium you choose?"); - GetCurrentBackendInfo(state.api, ¤tBackend, ¤tBackendName); + GetCurrentBackendInfo(state.swapchainApi, ¤tBackend, ¤tBackendName); std::string spoofingText; ImGui::PushItemWidth(180.0f * Config::Instance()->MenuScale.value_or_default()); - switch (state.api) + switch (state.swapchainApi) { case DX11: if (state.DeviceAdapterNames.contains(state.currentD3D11Device)) @@ -2366,7 +2367,7 @@ bool MenuCommon::RenderMenu() if (currentFeature != nullptr && !currentFeature->IsFrozen()) { // Dx11 with Dx12 - if (state.api == DX11 && Config::Instance()->Dx11Upscaler.value_or_default() != "fsr22" && + if (state.swapchainApi == DX11 && Config::Instance()->Dx11Upscaler.value_or_default() != "fsr22" && Config::Instance()->Dx11Upscaler.value_or_default() != "dlss" && Config::Instance()->Dx11Upscaler.value_or_default() != "fsr31") { @@ -2867,8 +2868,8 @@ bool MenuCommon::RenderMenu() // disabledMaskInput[optiFgIndex] = true; // fgInputDesc[optiFgIndex] = "Old overlay menu is unsupported"; //} - // else if (state.api != DX12) - if (state.api != DX12) + // else if (state.swapchainApi != DX12) + if (state.swapchainApi != DX12) { disabledMaskInput[optiFgIndex] = true; fgInputDesc[optiFgIndex] = "Unsupported API"; @@ -2905,7 +2906,7 @@ bool MenuCommon::RenderMenu() if (Config::Instance()->FGInput.value_or_default() == FGInput::DLSSG) Config::Instance()->FGInput.reset(); } - else if (state.api != DX12) + else if (state.swapchainApi != DX12) { disabledMaskInput[dlssgInputIndex] = true; fgInputDesc[dlssgInputIndex] = "Unsupported API"; @@ -2913,7 +2914,7 @@ bool MenuCommon::RenderMenu() // FSRFG inputs requirements auto constexpr fsrfgInputIndex = (uint32_t) FGInput::FSRFG; - if (state.api != DX12) + if (state.swapchainApi != DX12) { disabledMaskInput[fsrfgInputIndex] = true; fgInputDesc[fsrfgInputIndex] = "Unsupported API"; @@ -2952,7 +2953,7 @@ bool MenuCommon::RenderMenu() // Nukem's FG mod requirements auto constexpr nukemsInputIndex = (uint32_t) FGInput::Nukems; auto constexpr nukemsOutputIndex = (uint32_t) FGOutput::Nukems; - if (state.api == DX11) + if (state.swapchainApi == DX11) { disabledMaskInput[nukemsInputIndex] = true; fgInputDesc[nukemsInputIndex] = "Unsupported API"; @@ -2977,7 +2978,7 @@ bool MenuCommon::RenderMenu() // FSR FG / XeFG output requirements auto constexpr fsrfgOutputIndex = (uint32_t) FGOutput::FSRFG; auto constexpr xefgOutputIndex = (uint32_t) FGOutput::XeFG; - if (state.api != DX12) + if (state.swapchainApi != DX12) { disabledMaskOutput[fsrfgOutputIndex] = true; fgOutputDesc[fsrfgOutputIndex] = "Unsupported API"; @@ -2991,7 +2992,7 @@ bool MenuCommon::RenderMenu() Config::Instance()->FGOutput = Config::Instance()->FGOutput.value_or_default(); // need to have a value before combo - if (state.api != DX11) + if (state.swapchainApi != DX11) { ImGui::SeparatorText("Frame Generation"); @@ -3116,7 +3117,7 @@ bool MenuCommon::RenderMenu() // FSR FG controls if (state.activeFgOutput == FGOutput::FSRFG && state.activeFgInput != FGInput::NoFG && - !state.isWorkingAsNvngx && state.api == DX12) + !state.isWorkingAsNvngx && state.swapchainApi == DX12) { if (state.activeFgInput != FGInput::Upscaler || (currentFeature != nullptr && !currentFeature->IsFrozen()) && FfxApiProxy::IsFGReady()) @@ -3314,7 +3315,7 @@ bool MenuCommon::RenderMenu() // XeFG controls if (state.activeFgOutput == FGOutput::XeFG && state.activeFgInput != FGInput::NoFG && - !state.isWorkingAsNvngx && state.api == DX12) + !state.isWorkingAsNvngx && state.swapchainApi == DX12) { if (state.activeFgInput != FGInput::Upscaler || (currentFeature != nullptr && !currentFeature->IsFrozen()) && XeFGProxy::InitXeFG()) @@ -3486,7 +3487,7 @@ bool MenuCommon::RenderMenu() } // OptiFG - if (state.api == DX12 && !state.isWorkingAsNvngx && state.activeFgInput == FGInput::Upscaler) + if (state.swapchainApi == DX12 && !state.isWorkingAsNvngx && state.activeFgInput == FGInput::Upscaler) { SeparatorWithHelpMarker("Frame Generation (OptiFG)", "Using upscaler data for FG"); @@ -3712,7 +3713,7 @@ bool MenuCommon::RenderMenu() } // DLSSG Mod - if (state.api != DX11 && !state.isWorkingAsNvngx && state.activeFgInput == FGInput::Nukems && + if (state.swapchainApi != DX11 && !state.isWorkingAsNvngx && state.activeFgInput == FGInput::Nukems && state.activeFgOutput == FGOutput::Nukems) { SeparatorWithHelpMarker("Frame Generation (FSR-FG via Nukem's DLSSG)", @@ -3733,7 +3734,7 @@ bool MenuCommon::RenderMenu() "DLSS first"); } - if (state.api == DX12) + if (state.swapchainApi == DX12) { ImGui::Text("Current DLSSG state:"); ImGui::SameLine(); @@ -3748,7 +3749,7 @@ bool MenuCommon::RenderMenu() ShowHelpMarker("Makes a copy of the depth buffer\nCan fix broken visuals in some games on AMD " "GPUs under Windows\nCan cause stutters so best to use only when necessary"); } - else if (state.api == Vulkan) + else if (state.swapchainApi == Vulkan) { ImGui::TextColored(ImVec4(1.f, 0.8f, 0.f, 1.f), "DLSSG is purposefully disabled when this menu is visible"); @@ -3779,7 +3780,7 @@ bool MenuCommon::RenderMenu() } // FSR-FG Inputs - if (state.api == DX12 && !state.isWorkingAsNvngx && + if (state.swapchainApi == DX12 && !state.isWorkingAsNvngx && (state.activeFgInput == FGInput::FSRFG || state.activeFgInput == FGInput::FSRFG30)) { SeparatorWithHelpMarker("Frame Generation (FSR-FG Inputs)", "Select FSR-FG in-game"); @@ -3806,7 +3807,7 @@ bool MenuCommon::RenderMenu() } // Streamline FG Inputs - if (state.api == DX12 && !state.isWorkingAsNvngx && state.activeFgInput == FGInput::DLSSG) + if (state.swapchainApi == DX12 && !state.isWorkingAsNvngx && state.activeFgInput == FGInput::DLSSG) { SeparatorWithHelpMarker("Frame Generation (Streamline FG Inputs)", "Select DLSS FG in-game"); @@ -4077,7 +4078,7 @@ bool MenuCommon::RenderMenu() ImGui::EndDisabled(); // RCAS - if (state.api == DX12 || state.api == DX11) + if (state.swapchainApi == DX12 || state.swapchainApi == DX11) { // xess or dlss version >= 2.5.1 constexpr feature_version requiredDlssVersion = { 2, 5, 1 }; @@ -4231,7 +4232,7 @@ bool MenuCommon::RenderMenu() if (currentFeature != nullptr && !currentFeature->IsFrozen()) { // OUTPUT SCALING ----------------------------- - if (state.api == DX12 || state.api == DX11) + if (state.swapchainApi == DX12 || state.swapchainApi == DX11) { // if motion vectors are not display size ImGui::BeginDisabled(!currentFeature->LowResMV()); @@ -4333,7 +4334,7 @@ bool MenuCommon::RenderMenu() ImGui::TableNextColumn(); // AutoExposure is always enabled for XeSS with native Dx11 - bool autoExposureDisabled = state.api == API::DX11 && currentBackend == "xess"; + bool autoExposureDisabled = state.swapchainApi == API::DX11 && currentBackend == "xess"; ImGui::BeginDisabled(autoExposureDisabled); if (bool autoExposure = currentFeature->AutoExposure(); @@ -4447,7 +4448,7 @@ bool MenuCommon::RenderMenu() ImGui::BeginDisabled( Config::Instance()->DisableReactiveMask.value_or(currentBackend == "xess")); - bool binaryMask = state.api == Vulkan || currentBackend == "xess"; + bool binaryMask = state.swapchainApi == Vulkan || currentBackend == "xess"; auto defaultBias = binaryMask ? 0.0f : 0.45f; auto maskBias = Config::Instance()->DlssReactiveMaskBias.value_or(defaultBias); @@ -4540,7 +4541,7 @@ bool MenuCommon::RenderMenu() } // HOTFIXES ----------------------------- - if (state.api == DX12) + if (state.swapchainApi == DX12) { ImGui::Spacing(); if (ImGui::CollapsingHeader("Root Signatures")) @@ -4725,7 +4726,7 @@ bool MenuCommon::RenderMenu() } // DX11 & DX12 ----------------------------- - if (state.api != Vulkan) + if (state.swapchainApi != Vulkan) { // V-SYNC ----------------------------- ImGui::Spacing(); diff --git a/OptiScaler/upscalers/dlss/DLSSFeature.cpp b/OptiScaler/upscalers/dlss/DLSSFeature.cpp index 5a9eb225..08baadbe 100644 --- a/OptiScaler/upscalers/dlss/DLSSFeature.cpp +++ b/OptiScaler/upscalers/dlss/DLSSFeature.cpp @@ -12,7 +12,7 @@ void DLSSFeature::ProcessEvaluateParams(NVSDK_NGX_Parameter* InParameters) // override sharpness if (Config::Instance()->OverrideSharpness.value_or_default() && - !(State::Instance().api != Vulkan && Config::Instance()->RcasEnabled.value_or_default())) + !(State::Instance().swapchainApi != Vulkan && Config::Instance()->RcasEnabled.value_or_default())) { auto sharpness = Config::Instance()->Sharpness.value_or_default(); @@ -65,7 +65,8 @@ void DLSSFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters) InParameters->Set(NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, featureFlags); // Resolution ----------------------------- - if (State::Instance().api != Vulkan && Config::Instance()->OutputScalingEnabled.value_or_default() && LowResMV()) + if (State::Instance().swapchainApi != Vulkan && Config::Instance()->OutputScalingEnabled.value_or_default() && + LowResMV()) { LOG_DEBUG("Output Scaling is active"); diff --git a/OptiScaler/upscalers/dlssd/DLSSDFeature.cpp b/OptiScaler/upscalers/dlssd/DLSSDFeature.cpp index 117e0336..cc2eec57 100644 --- a/OptiScaler/upscalers/dlssd/DLSSDFeature.cpp +++ b/OptiScaler/upscalers/dlssd/DLSSDFeature.cpp @@ -12,7 +12,7 @@ void DLSSDFeature::ProcessEvaluateParams(NVSDK_NGX_Parameter* InParameters) // override sharpness if (Config::Instance()->OverrideSharpness.value_or_default() && - !(State::Instance().api == DX12 && Config::Instance()->RcasEnabled.value_or_default())) + !(State::Instance().swapchainApi == DX12 && Config::Instance()->RcasEnabled.value_or_default())) { auto sharpness = Config::Instance()->Sharpness.value_or_default(); @@ -61,7 +61,8 @@ void DLSSDFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters) InParameters->Set(NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, featureFlags); // Resolution ----------------------------- - if (State::Instance().api != Vulkan && Config::Instance()->OutputScalingEnabled.value_or_default() && LowResMV()) + if (State::Instance().swapchainApi != Vulkan && Config::Instance()->OutputScalingEnabled.value_or_default() && + LowResMV()) { float ssMulti = Config::Instance()->OutputScalingMultiplier.value_or_default();