From 2daa4309892aa72e96a041ca352a544bc910fbeb Mon Sep 17 00:00:00 2001 From: cdozdil Date: Fri, 13 Feb 2026 02:10:17 +0300 Subject: [PATCH] Fix output scaling for FSR3.1 --- OptiScaler/upscalers/fsr31/FSR31Feature_Dx11.cpp | 10 ++++++---- OptiScaler/upscalers/fsr31/FSR31Feature_Dx11On12.cpp | 10 ++++++---- OptiScaler/upscalers/fsr31/FSR31Feature_Dx12.cpp | 10 ++++++---- OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp | 10 ++++++---- OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp | 10 ++++++---- 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/OptiScaler/upscalers/fsr31/FSR31Feature_Dx11.cpp b/OptiScaler/upscalers/fsr31/FSR31Feature_Dx11.cpp index 50d5ea24..6ab7fd87 100644 --- a/OptiScaler/upscalers/fsr31/FSR31Feature_Dx11.cpp +++ b/OptiScaler/upscalers/fsr31/FSR31Feature_Dx11.cpp @@ -467,8 +467,9 @@ bool FSR31FeatureDx11::Evaluate(ID3D11DeviceContext* DeviceContext, NVSDK_NGX_Pa if (InParameters->Get("FSR.upscaleSize.width", ¶ms.upscaleSize.width) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.width *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalWidth = static_cast(params.upscaleSize.width); + params.upscaleSize.width = + static_cast(originalWidth * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.width == 0) { @@ -478,8 +479,9 @@ bool FSR31FeatureDx11::Evaluate(ID3D11DeviceContext* DeviceContext, NVSDK_NGX_Pa if (InParameters->Get("FSR.upscaleSize.height", ¶ms.upscaleSize.height) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.height *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalHeight = static_cast(params.upscaleSize.height); + params.upscaleSize.height = + static_cast(originalHeight * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.height == 0) { diff --git a/OptiScaler/upscalers/fsr31/FSR31Feature_Dx11On12.cpp b/OptiScaler/upscalers/fsr31/FSR31Feature_Dx11On12.cpp index 3002b72a..a4a57075 100644 --- a/OptiScaler/upscalers/fsr31/FSR31Feature_Dx11On12.cpp +++ b/OptiScaler/upscalers/fsr31/FSR31Feature_Dx11On12.cpp @@ -428,8 +428,9 @@ bool FSR31FeatureDx11on12::Evaluate(ID3D11DeviceContext* InDeviceContext, NVSDK_ if (InParameters->Get("FSR.upscaleSize.width", ¶ms.upscaleSize.width) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.width *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalWidth = static_cast(params.upscaleSize.width); + params.upscaleSize.width = + static_cast(originalWidth * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.width == 0) { @@ -439,8 +440,9 @@ bool FSR31FeatureDx11on12::Evaluate(ID3D11DeviceContext* InDeviceContext, NVSDK_ if (InParameters->Get("FSR.upscaleSize.height", ¶ms.upscaleSize.height) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.height *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalHeight = static_cast(params.upscaleSize.height); + params.upscaleSize.height = + static_cast(originalHeight * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.height == 0) { diff --git a/OptiScaler/upscalers/fsr31/FSR31Feature_Dx12.cpp b/OptiScaler/upscalers/fsr31/FSR31Feature_Dx12.cpp index 0b3b0b1b..930ed595 100644 --- a/OptiScaler/upscalers/fsr31/FSR31Feature_Dx12.cpp +++ b/OptiScaler/upscalers/fsr31/FSR31Feature_Dx12.cpp @@ -508,8 +508,9 @@ bool FSR31FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_ if (InParameters->Get("FSR.upscaleSize.width", ¶ms.upscaleSize.width) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.width *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalWidth = static_cast(params.upscaleSize.width); + params.upscaleSize.width = + static_cast(originalWidth * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.width == 0) { @@ -519,8 +520,9 @@ bool FSR31FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_ if (InParameters->Get("FSR.upscaleSize.height", ¶ms.upscaleSize.height) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.height *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalHeight = static_cast(params.upscaleSize.height); + params.upscaleSize.height = + static_cast(originalHeight * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.height == 0) { diff --git a/OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp b/OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp index 722c4a88..241aa1ce 100644 --- a/OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp +++ b/OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp @@ -744,8 +744,9 @@ bool FSR31FeatureVk::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* if (InParameters->Get("FSR.upscaleSize.width", ¶ms.upscaleSize.width) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.width *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalWidth = static_cast(params.upscaleSize.width); + params.upscaleSize.width = + static_cast(originalWidth * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.width == 0) { @@ -755,8 +756,9 @@ bool FSR31FeatureVk::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* if (InParameters->Get("FSR.upscaleSize.height", ¶ms.upscaleSize.height) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.height *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalHeight = static_cast(params.upscaleSize.height); + params.upscaleSize.height = + static_cast(originalHeight * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.height == 0) { diff --git a/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp b/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp index cf4f0fd9..d764a696 100644 --- a/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp +++ b/OptiScaler/upscalers/fsr31/FSR31Feature_VkOn12.cpp @@ -419,8 +419,9 @@ bool FSR31FeatureVkOn12::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Paramet if (InParameters->Get("FSR.upscaleSize.width", ¶ms.upscaleSize.width) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.width *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalWidth = static_cast(params.upscaleSize.width); + params.upscaleSize.width = + static_cast(originalWidth * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.width == 0) { @@ -430,8 +431,9 @@ bool FSR31FeatureVkOn12::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Paramet if (InParameters->Get("FSR.upscaleSize.height", ¶ms.upscaleSize.height) == NVSDK_NGX_Result_Success && Config::Instance()->OutputScalingEnabled.value_or_default()) { - params.upscaleSize.height *= - static_cast(Config::Instance()->OutputScalingMultiplier.value_or_default()); + auto originalHeight = static_cast(params.upscaleSize.height); + params.upscaleSize.height = + static_cast(originalHeight * Config::Instance()->OutputScalingMultiplier.value_or_default()); } else if (params.upscaleSize.height == 0) {