From b41a44dd600c6d2deab30a4dd9068f0484ab9dce Mon Sep 17 00:00:00 2001
From: FakeMichau <49685661+FakeMichau@users.noreply.github.com>
Date: Tue, 13 Oct 2026 21:56:36 +0200
Subject: [PATCH] Factor out common OptiFG functions
Slopped.
---
OptiScaler/OptiScaler.vcxproj | 2 +
OptiScaler/OptiScaler.vcxproj.filters | 6 ++
OptiScaler/inputs/FG/FSR3_Dx12_FG.cpp | 59 +-------------
OptiScaler/inputs/FG/Upscaler_Inputs.cpp | 73 +++++++++++++++++
OptiScaler/inputs/FG/Upscaler_Inputs.h | 20 +++++
.../inputs/FG/Upscaler_Inputs_Dx11wDx12.cpp | 77 ++----------------
OptiScaler/inputs/FG/Upscaler_Inputs_Dx12.cpp | 78 ++-----------------
OptiScaler/inputs/FG/Upscaler_Inputs_Vk.cpp | 73 ++---------------
8 files changed, 121 insertions(+), 267 deletions(-)
create mode 100644 OptiScaler/inputs/FG/Upscaler_Inputs.cpp
create mode 100644 OptiScaler/inputs/FG/Upscaler_Inputs.h
diff --git a/OptiScaler/OptiScaler.vcxproj b/OptiScaler/OptiScaler.vcxproj
index f95473c9..12704e65 100644
--- a/OptiScaler/OptiScaler.vcxproj
+++ b/OptiScaler/OptiScaler.vcxproj
@@ -491,6 +491,7 @@ copy NUL "$(SolutionDir)x64\Release\a\!! EXTRACT ALL FILES TO GAME FOLDER !!" /Y
+
@@ -787,6 +788,7 @@ copy NUL "$(SolutionDir)x64\Release\a\!! EXTRACT ALL FILES TO GAME FOLDER !!" /Y
+
diff --git a/OptiScaler/OptiScaler.vcxproj.filters b/OptiScaler/OptiScaler.vcxproj.filters
index 5ee20120..c99505ca 100644
--- a/OptiScaler/OptiScaler.vcxproj.filters
+++ b/OptiScaler/OptiScaler.vcxproj.filters
@@ -551,6 +551,9 @@
Header Files
+
+ Header Files
+
Header Files
@@ -1364,6 +1367,9 @@
Source Files
+
+ Source Files
+
Source Files
diff --git a/OptiScaler/inputs/FG/FSR3_Dx12_FG.cpp b/OptiScaler/inputs/FG/FSR3_Dx12_FG.cpp
index 63221a9d..a07b1162 100644
--- a/OptiScaler/inputs/FG/FSR3_Dx12_FG.cpp
+++ b/OptiScaler/inputs/FG/FSR3_Dx12_FG.cpp
@@ -1,5 +1,6 @@
#include "pch.h"
#include "FSR3_Dx12_FG.h"
+#include "Upscaler_Inputs.h"
#include "Config.h"
#include "Util.h"
@@ -1312,65 +1313,13 @@ void FSR3FG::SetUpscalerInputs(ID3D12GraphicsCommandList* InCmdList, NVSDK_NGX_P
fg->EvaluateState(_device, _fgConst);
- // FSR Camera values
- float cameraNear = 0.0f;
- float cameraFar = 0.0f;
- float cameraVFov = 0.0f;
- float meterFactor = 0.0f;
float mvScaleX = 0.0f;
float mvScaleY = 0.0f;
float jitterX = 0.0f;
float jitterY = 0.0f;
- float tempCameraNear = 0.0f;
- float tempCameraFar = 0.0f;
-
- auto& state = State::Instance();
- auto& cfg = *Config::Instance();
- const auto& ngxParams = *InParameters;
-
- ngxParams.Get(OptiKeys::FSR_NearPlane, &tempCameraNear);
- ngxParams.Get(OptiKeys::FSR_FarPlane, &tempCameraFar);
-
- if (!cfg.FsrUseFsrInputValues.value_or_default() || (tempCameraNear == 0.0f && tempCameraFar == 0.0f))
- {
- if (feature->DepthInverted())
- {
- cameraFar = cfg.FsrCameraNear.value_or_default();
- cameraNear = cfg.FsrCameraFar.value_or_default();
- }
- else
- {
- cameraFar = cfg.FsrCameraFar.value_or_default();
- cameraNear = cfg.FsrCameraNear.value_or_default();
- }
- }
- else
- {
- cameraNear = tempCameraNear;
- cameraFar = tempCameraFar;
- }
-
- if (!cfg.FsrUseFsrInputValues.value_or_default() ||
- ngxParams.Get(OptiKeys::FSR_CameraFovVertical, &cameraVFov) != NVSDK_NGX_Result_Success)
- {
- if (cfg.FsrVerticalFov.has_value())
- cameraVFov = GetRadiansFromDeg(cfg.FsrVerticalFov.value());
- else if (cfg.FsrHorizontalFov.value_or_default() > 0.0f)
- {
- const float hFovRad = GetRadiansFromDeg(cfg.FsrHorizontalFov.value());
- cameraVFov =
- GetVerticalFovFromHorizontal(hFovRad, (float) feature->TargetWidth(), (float) feature->TargetHeight());
- }
- else
- cameraVFov = GetRadiansFromDeg(60);
- }
-
- if (!cfg.FsrUseFsrInputValues.value_or_default())
- ngxParams.Get(OptiKeys::FSR_ViewSpaceToMetersFactor, &meterFactor);
-
- State::Instance().lastFsrCameraFar = cameraFar;
- State::Instance().lastFsrCameraNear = cameraNear;
+ // FSR Camera values
+ auto camera = UpscalerInputs::GetCameraValues(*InParameters, feature);
int reset = 0;
InParameters->Get(NVSDK_NGX_Parameter_Reset, &reset);
@@ -1381,7 +1330,7 @@ void FSR3FG::SetUpscalerInputs(ID3D12GraphicsCommandList* InCmdList, NVSDK_NGX_P
InParameters->Get(NVSDK_NGX_Parameter_Jitter_Offset_Y, &jitterY);
auto aspectRatio = (float) feature->DisplayWidth() / (float) feature->DisplayHeight();
- fg->SetCameraValues(cameraNear, cameraFar, cameraVFov, aspectRatio, meterFactor);
+ fg->SetCameraValues(camera.cameraNear, camera.cameraFar, camera.cameraVFov, aspectRatio, camera.meterFactor);
fg->SetFrameTimeDelta(State::Instance().lastFGFrameTime);
fg->SetMVScale(mvScaleX, mvScaleY);
fg->SetJitter(jitterX, jitterY);
diff --git a/OptiScaler/inputs/FG/Upscaler_Inputs.cpp b/OptiScaler/inputs/FG/Upscaler_Inputs.cpp
new file mode 100644
index 00000000..f8500887
--- /dev/null
+++ b/OptiScaler/inputs/FG/Upscaler_Inputs.cpp
@@ -0,0 +1,73 @@
+#include "pch.h"
+#include "Upscaler_Inputs.h"
+
+#include
+#include
+#include
+
+using namespace OptiMath;
+
+UpscalerInputs::CameraValues UpscalerInputs::GetCameraValues(const NVSDK_NGX_Parameter& parameters, IFeature* feature)
+{
+ auto& cfg = *Config::Instance();
+ const bool useFsrInputs = cfg.FsrUseFsrInputValues.value_or_default();
+
+ CameraValues values {};
+
+ parameters.Get(OptiKeys::FSR_NearPlane, &values.cameraNear);
+ parameters.Get(OptiKeys::FSR_FarPlane, &values.cameraFar);
+
+ if (!useFsrInputs || (values.cameraNear == 0.0f && values.cameraFar == 0.0f))
+ {
+ values.cameraNear = cfg.FsrCameraNear.value_or_default();
+ values.cameraFar = cfg.FsrCameraFar.value_or_default();
+
+ if (feature->DepthInverted())
+ std::swap(values.cameraNear, values.cameraFar);
+ }
+
+ if (!useFsrInputs ||
+ parameters.Get(OptiKeys::FSR_CameraFovVertical, &values.cameraVFov) != NVSDK_NGX_Result_Success)
+ {
+ if (cfg.FsrVerticalFov.has_value())
+ values.cameraVFov = GetRadiansFromDeg(cfg.FsrVerticalFov.value());
+ else if (cfg.FsrHorizontalFov.value_or_default() > 0.0f)
+ values.cameraVFov =
+ GetVerticalFovFromHorizontal(GetRadiansFromDeg(cfg.FsrHorizontalFov.value()),
+ (float) feature->TargetWidth(), (float) feature->TargetHeight());
+ else
+ values.cameraVFov = GetRadiansFromDeg(60);
+ }
+
+ if (!useFsrInputs)
+ parameters.Get(OptiKeys::FSR_ViewSpaceToMetersFactor, &values.meterFactor);
+
+ State::Instance().lastFsrCameraNear = values.cameraNear;
+ State::Instance().lastFsrCameraFar = values.cameraFar;
+
+ return values;
+}
+
+FG_Constants UpscalerInputs::GetFGConstants(IFeature* feature)
+{
+ FG_Constants constants {};
+ constants.displayWidth = feature->DisplayWidth();
+ constants.displayHeight = feature->DisplayHeight();
+
+ if (feature->IsHdr())
+ constants.flags |= FG_Flags::Hdr;
+
+ if (feature->DepthInverted())
+ constants.flags |= FG_Flags::InvertedDepth;
+
+ if (feature->JitteredMV())
+ constants.flags |= FG_Flags::JitteredMVs;
+
+ if (!feature->LowResMV())
+ constants.flags |= FG_Flags::DisplayResolutionMVs;
+
+ if (Config::Instance()->FGAsync.value_or_default())
+ constants.flags |= FG_Flags::Async;
+
+ return constants;
+}
diff --git a/OptiScaler/inputs/FG/Upscaler_Inputs.h b/OptiScaler/inputs/FG/Upscaler_Inputs.h
new file mode 100644
index 00000000..b2efb619
--- /dev/null
+++ b/OptiScaler/inputs/FG/Upscaler_Inputs.h
@@ -0,0 +1,20 @@
+#pragma once
+#include "SysUtils.h"
+#include
+#include
+#include
+
+namespace UpscalerInputs
+{
+struct CameraValues
+{
+ float cameraNear = 0.0f;
+ float cameraFar = 0.0f;
+ float cameraVFov = 0.0f;
+ float meterFactor = 0.0f;
+};
+
+// Also updates State::lastFsrCameraNear/Far
+CameraValues GetCameraValues(const NVSDK_NGX_Parameter& parameters, IFeature* feature);
+FG_Constants GetFGConstants(IFeature* feature);
+} // namespace UpscalerInputs
diff --git a/OptiScaler/inputs/FG/Upscaler_Inputs_Dx11wDx12.cpp b/OptiScaler/inputs/FG/Upscaler_Inputs_Dx11wDx12.cpp
index d86059ca..f097b1f4 100644
--- a/OptiScaler/inputs/FG/Upscaler_Inputs_Dx11wDx12.cpp
+++ b/OptiScaler/inputs/FG/Upscaler_Inputs_Dx11wDx12.cpp
@@ -1,5 +1,6 @@
#include "pch.h"
#include "Upscaler_Inputs_Dx11wDx12.h"
+#include "Upscaler_Inputs.h"
#include "MathUtils.h"
@@ -92,64 +93,13 @@ void UpscalerInputsDx11wDx12::UpscaleStart(NVSDK_NGX_Parameter* InParameters, IF
return;
}
- // FSR Camera values
- float cameraNear = 0.0f;
- float cameraFar = 0.0f;
- float cameraVFov = 0.0f;
- float meterFactor = 0.0f;
float mvScaleX = 0.0f;
float mvScaleY = 0.0f;
float jitterX = 0.0f;
float jitterY = 0.0f;
- float tempCameraNear = 0.0f;
- float tempCameraFar = 0.0f;
-
- auto& cfg = *Config::Instance();
- const auto& ngxParams = *InParameters;
-
- ngxParams.Get(OptiKeys::FSR_NearPlane, &tempCameraNear);
- ngxParams.Get(OptiKeys::FSR_FarPlane, &tempCameraFar);
-
- if (!cfg.FsrUseFsrInputValues.value_or_default() || (tempCameraNear == 0.0f && tempCameraFar == 0.0f))
- {
- if (feature->DepthInverted())
- {
- cameraFar = cfg.FsrCameraNear.value_or_default();
- cameraNear = cfg.FsrCameraFar.value_or_default();
- }
- else
- {
- cameraFar = cfg.FsrCameraFar.value_or_default();
- cameraNear = cfg.FsrCameraNear.value_or_default();
- }
- }
- else
- {
- cameraNear = tempCameraNear;
- cameraFar = tempCameraFar;
- }
-
- if (!cfg.FsrUseFsrInputValues.value_or_default() ||
- ngxParams.Get(OptiKeys::FSR_CameraFovVertical, &cameraVFov) != NVSDK_NGX_Result_Success)
- {
- if (cfg.FsrVerticalFov.has_value())
- cameraVFov = GetRadiansFromDeg(cfg.FsrVerticalFov.value());
- else if (cfg.FsrHorizontalFov.value_or_default() > 0.0f)
- {
- const float hFovRad = GetRadiansFromDeg(cfg.FsrHorizontalFov.value());
- cameraVFov =
- GetVerticalFovFromHorizontal(hFovRad, (float) feature->TargetWidth(), (float) feature->TargetHeight());
- }
- else
- cameraVFov = GetRadiansFromDeg(60);
- }
-
- if (!cfg.FsrUseFsrInputValues.value_or_default())
- ngxParams.Get(OptiKeys::FSR_ViewSpaceToMetersFactor, &meterFactor);
-
- State::Instance().lastFsrCameraFar = cameraFar;
- State::Instance().lastFsrCameraNear = cameraNear;
+ // FSR Camera values
+ auto camera = UpscalerInputs::GetCameraValues(*InParameters, feature);
if (State::Instance().activeFgInput != FGInput::Upscaler || _dx12Device == nullptr)
return;
@@ -174,24 +124,7 @@ void UpscalerInputsDx11wDx12::UpscaleStart(NVSDK_NGX_Parameter* InParameters, IF
if (fg == nullptr)
return;
- FG_Constants fgConstants {};
- fgConstants.displayWidth = feature->DisplayWidth();
- fgConstants.displayHeight = feature->DisplayHeight();
-
- if (feature->IsHdr())
- fgConstants.flags |= FG_Flags::Hdr;
-
- if (feature->DepthInverted())
- fgConstants.flags |= FG_Flags::InvertedDepth;
-
- if (feature->JitteredMV())
- fgConstants.flags |= FG_Flags::JitteredMVs;
-
- if (!feature->LowResMV())
- fgConstants.flags |= FG_Flags::DisplayResolutionMVs;
-
- if (Config::Instance()->FGAsync.value_or_default())
- fgConstants.flags |= FG_Flags::Async;
+ auto fgConstants = UpscalerInputs::GetFGConstants(feature);
fg->EvaluateState(_dx12Device, fgConstants);
@@ -206,7 +139,7 @@ void UpscalerInputsDx11wDx12::UpscaleStart(NVSDK_NGX_Parameter* InParameters, IF
fg->StartNewFrame();
auto aspectRatio = (float) feature->DisplayWidth() / (float) feature->DisplayHeight();
- fg->SetCameraValues(cameraNear, cameraFar, cameraVFov, aspectRatio, meterFactor);
+ fg->SetCameraValues(camera.cameraNear, camera.cameraFar, camera.cameraVFov, aspectRatio, camera.meterFactor);
fg->SetFrameTimeDelta(State::Instance().lastFGFrameTime);
fg->SetMVScale(mvScaleX, mvScaleY);
fg->SetJitter(jitterX, jitterY);
diff --git a/OptiScaler/inputs/FG/Upscaler_Inputs_Dx12.cpp b/OptiScaler/inputs/FG/Upscaler_Inputs_Dx12.cpp
index c581ff51..8e3bf305 100644
--- a/OptiScaler/inputs/FG/Upscaler_Inputs_Dx12.cpp
+++ b/OptiScaler/inputs/FG/Upscaler_Inputs_Dx12.cpp
@@ -1,5 +1,6 @@
#include "pch.h"
#include "Upscaler_Inputs_Dx12.h"
+#include "Upscaler_Inputs.h"
#include
#include
#include "shaders/depth_scale/DS_Dx12.h"
@@ -31,89 +32,20 @@ void UpscalerInputsDx12::UpscaleStart(ID3D12GraphicsCommandList* InCmdList, NVSD
{
Hudfix_Dx12::SetSkipStatus(true);
- // FSR Camera values
- float cameraNear = 0.0f;
- float cameraFar = 0.0f;
- float cameraVFov = 0.0f;
- float meterFactor = 0.0f;
float mvScaleX = 0.0f;
float mvScaleY = 0.0f;
float jitterX = 0.0f;
float jitterY = 0.0f;
- float tempCameraNear = 0.0f;
- float tempCameraFar = 0.0f;
-
- auto& state = State::Instance();
- auto& cfg = *Config::Instance();
- const auto& ngxParams = *InParameters;
-
- ngxParams.Get(OptiKeys::FSR_NearPlane, &tempCameraNear);
- ngxParams.Get(OptiKeys::FSR_FarPlane, &tempCameraFar);
-
- if (!cfg.FsrUseFsrInputValues.value_or_default() || (tempCameraNear == 0.0f && tempCameraFar == 0.0f))
- {
- if (feature->DepthInverted())
- {
- cameraFar = cfg.FsrCameraNear.value_or_default();
- cameraNear = cfg.FsrCameraFar.value_or_default();
- }
- else
- {
- cameraFar = cfg.FsrCameraFar.value_or_default();
- cameraNear = cfg.FsrCameraNear.value_or_default();
- }
- }
- else
- {
- cameraNear = tempCameraNear;
- cameraFar = tempCameraFar;
- }
-
- if (!cfg.FsrUseFsrInputValues.value_or_default() ||
- ngxParams.Get(OptiKeys::FSR_CameraFovVertical, &cameraVFov) != NVSDK_NGX_Result_Success)
- {
- if (cfg.FsrVerticalFov.has_value())
- cameraVFov = GetRadiansFromDeg(cfg.FsrVerticalFov.value());
- else if (cfg.FsrHorizontalFov.value_or_default() > 0.0f)
- {
- const float hFovRad = GetRadiansFromDeg(cfg.FsrHorizontalFov.value());
- cameraVFov =
- GetVerticalFovFromHorizontal(hFovRad, (float) feature->TargetWidth(), (float) feature->TargetHeight());
- }
- else
- cameraVFov = GetRadiansFromDeg(60);
- }
-
- if (!cfg.FsrUseFsrInputValues.value_or_default())
- ngxParams.Get(OptiKeys::FSR_ViewSpaceToMetersFactor, &meterFactor);
-
- State::Instance().lastFsrCameraFar = cameraFar;
- State::Instance().lastFsrCameraNear = cameraNear;
+ // FSR Camera values
+ auto camera = UpscalerInputs::GetCameraValues(*InParameters, feature);
auto fg = State::Instance().currentFG;
if (fg == nullptr || State::Instance().activeFgInput != FGInput::Upscaler || _device == nullptr)
return;
- FG_Constants fgConstants {};
- fgConstants.displayWidth = feature->DisplayWidth();
- fgConstants.displayHeight = feature->DisplayHeight();
-
- if (feature->IsHdr())
- fgConstants.flags |= FG_Flags::Hdr;
-
- if (feature->DepthInverted())
- fgConstants.flags |= FG_Flags::InvertedDepth;
-
- if (feature->JitteredMV())
- fgConstants.flags |= FG_Flags::JitteredMVs;
-
- if (!feature->LowResMV())
- fgConstants.flags |= FG_Flags::DisplayResolutionMVs;
-
- if (Config::Instance()->FGAsync.value_or_default())
- fgConstants.flags |= FG_Flags::Async;
+ auto fgConstants = UpscalerInputs::GetFGConstants(feature);
fg->EvaluateState(_device, fgConstants);
@@ -128,7 +60,7 @@ void UpscalerInputsDx12::UpscaleStart(ID3D12GraphicsCommandList* InCmdList, NVSD
fg->StartNewFrame();
auto aspectRatio = (float) feature->DisplayWidth() / (float) feature->DisplayHeight();
- fg->SetCameraValues(cameraNear, cameraFar, cameraVFov, aspectRatio, meterFactor);
+ fg->SetCameraValues(camera.cameraNear, camera.cameraFar, camera.cameraVFov, aspectRatio, camera.meterFactor);
fg->SetFrameTimeDelta(State::Instance().lastFGFrameTime);
fg->SetMVScale(mvScaleX, mvScaleY);
fg->SetJitter(jitterX, jitterY);
diff --git a/OptiScaler/inputs/FG/Upscaler_Inputs_Vk.cpp b/OptiScaler/inputs/FG/Upscaler_Inputs_Vk.cpp
index 56d6a4e3..f63cab5b 100644
--- a/OptiScaler/inputs/FG/Upscaler_Inputs_Vk.cpp
+++ b/OptiScaler/inputs/FG/Upscaler_Inputs_Vk.cpp
@@ -1,5 +1,6 @@
#include "pch.h"
#include "Upscaler_Inputs_Vk.h"
+#include "Upscaler_Inputs.h"
#include
#include
@@ -9,50 +10,6 @@
using namespace OptiMath;
-// Same camera values as the DX12 OptiFG
-static void SetCameraValues(IFGFeature* fg, const NVSDK_NGX_Parameter& parameters, IFeature* feature)
-{
- auto& cfg = *Config::Instance();
- const bool useFsrInputs = cfg.FsrUseFsrInputValues.value_or_default();
-
- float cameraNear = 0.0f;
- float cameraFar = 0.0f;
- float cameraVFov = 0.0f;
- float meterFactor = 0.0f;
-
- parameters.Get(OptiKeys::FSR_NearPlane, &cameraNear);
- parameters.Get(OptiKeys::FSR_FarPlane, &cameraFar);
-
- if (!useFsrInputs || (cameraNear == 0.0f && cameraFar == 0.0f))
- {
- cameraNear = cfg.FsrCameraNear.value_or_default();
- cameraFar = cfg.FsrCameraFar.value_or_default();
-
- if (feature->DepthInverted())
- std::swap(cameraNear, cameraFar);
- }
-
- if (!useFsrInputs || parameters.Get(OptiKeys::FSR_CameraFovVertical, &cameraVFov) != NVSDK_NGX_Result_Success)
- {
- if (cfg.FsrVerticalFov.has_value())
- cameraVFov = GetRadiansFromDeg(cfg.FsrVerticalFov.value());
- else if (cfg.FsrHorizontalFov.value_or_default() > 0.0f)
- cameraVFov = GetVerticalFovFromHorizontal(GetRadiansFromDeg(cfg.FsrHorizontalFov.value()),
- (float) feature->TargetWidth(), (float) feature->TargetHeight());
- else
- cameraVFov = GetRadiansFromDeg(60);
- }
-
- if (!useFsrInputs)
- parameters.Get(OptiKeys::FSR_ViewSpaceToMetersFactor, &meterFactor);
-
- State::Instance().lastFsrCameraNear = cameraNear;
- State::Instance().lastFsrCameraFar = cameraFar;
-
- auto aspectRatio = (float) feature->DisplayWidth() / (float) feature->DisplayHeight();
- fg->SetCameraValues(cameraNear, cameraFar, cameraVFov, aspectRatio, meterFactor);
-}
-
static void SetResource(IFGFeature_Vk* fg, NVSDK_NGX_Parameter* parameters, const char* name, FG_ResourceType type,
VkCommandBuffer cmdBuffer, uint32_t width, uint32_t height)
{
@@ -87,27 +44,7 @@ void UpscalerInputsVk::UpscaleStart(VkCommandBuffer cmdBuffer, NVSDK_NGX_Paramet
if (fg == nullptr || state.activeFgInput != FGInput::Upscaler || !fg->HasSwapchain())
return;
- auto config = Config::Instance();
-
- FG_Constants constants {};
- constants.displayWidth = feature->DisplayWidth();
- constants.displayHeight = feature->DisplayHeight();
-
- if (feature->IsHdr())
- constants.flags |= FG_Flags::Hdr;
-
- if (feature->DepthInverted())
- constants.flags |= FG_Flags::InvertedDepth;
-
- if (feature->JitteredMV())
- constants.flags |= FG_Flags::JitteredMVs;
-
- if (!feature->LowResMV())
- constants.flags |= FG_Flags::DisplayResolutionMVs;
-
- if (config->FGAsync.value_or_default())
- constants.flags |= FG_Flags::Async;
-
+ auto constants = UpscalerInputs::GetFGConstants(feature);
fg->EvaluateState(constants);
// Present dispatches the previous frame's data
@@ -132,14 +69,16 @@ void UpscalerInputsVk::UpscaleStart(VkCommandBuffer cmdBuffer, NVSDK_NGX_Paramet
parameters->Get(NVSDK_NGX_Parameter_Jitter_Offset_X, &jitterX);
parameters->Get(NVSDK_NGX_Parameter_Jitter_Offset_Y, &jitterY);
- SetCameraValues(fg, *parameters, feature);
+ auto camera = UpscalerInputs::GetCameraValues(*parameters, feature);
+ auto aspectRatio = (float) feature->DisplayWidth() / (float) feature->DisplayHeight();
+ fg->SetCameraValues(camera.cameraNear, camera.cameraFar, camera.cameraVFov, aspectRatio, camera.meterFactor);
fg->SetFrameTimeDelta(state.lastFGFrameTime);
fg->SetMVScale(mvScaleX, mvScaleY);
fg->SetJitter(jitterX, jitterY);
fg->SetReset(reset);
fg->SetInterpolationRect(feature->DisplayWidth(), feature->DisplayHeight());
- if (!config->IsFGEnabled())
+ if (!Config::Instance()->IsFGEnabled())
return;
if (!fg->IsActive() && !fg->IsPaused())