mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-11-06 05:54:46 +00:00
Factor out common OptiFG functions
Slopped.
This commit is contained in:
1 parent
880402ba20
commit
b41a44dd60
8 files changed
+121
-267
No files matched your search
@@ -491,6 +491,7 @@ copy NUL "$(SolutionDir)x64\Release\a\!! EXTRACT ALL FILES TO GAME FOLDER !!" /Y
|
||||
<ClInclude Include="inputs\FG\XeFG_Inputs_Dx12.h" />
|
||||
<ClInclude Include="inputs\FfxApi_Vk.h" />
|
||||
<ClInclude Include="inputs\FG\Upscaler_Inputs_Dx12.h" />
|
||||
<ClInclude Include="inputs\FG\Upscaler_Inputs.h" />
|
||||
<ClInclude Include="inputs\FG\Upscaler_Inputs_Vk.h" />
|
||||
<ClInclude Include="inputs\NVNGX_DLSS.h" />
|
||||
<ClInclude Include="inputs\XeSS_Base.h" />
|
||||
@@ -787,6 +788,7 @@ copy NUL "$(SolutionDir)x64\Release\a\!! EXTRACT ALL FILES TO GAME FOLDER !!" /Y
|
||||
<ClCompile Include="inputs\FG\XeFG_Inputs_Dx12.cpp" />
|
||||
<ClCompile Include="inputs\FfxApi_Vk.cpp" />
|
||||
<ClCompile Include="inputs\FG\Upscaler_Inputs_Dx12.cpp" />
|
||||
<ClCompile Include="inputs\FG\Upscaler_Inputs.cpp" />
|
||||
<ClCompile Include="inputs\FG\Upscaler_Inputs_Vk.cpp" />
|
||||
<ClCompile Include="inputs\XeSS_Base.cpp" />
|
||||
<ClCompile Include="inputs\XeSS_Common.cpp" />
|
||||
|
||||
@@ -551,6 +551,9 @@
|
||||
<ClInclude Include="inputs\FG\Upscaler_Inputs_Dx12.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="inputs\FG\Upscaler_Inputs.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="inputs\FG\Upscaler_Inputs_Vk.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -1364,6 +1367,9 @@
|
||||
<ClCompile Include="inputs\FG\Upscaler_Inputs_Dx12.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="inputs\FG\Upscaler_Inputs.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="inputs\FG\Upscaler_Inputs_Vk.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
#include "pch.h"
|
||||
#include "Upscaler_Inputs.h"
|
||||
|
||||
#include <State.h>
|
||||
#include <Config.h>
|
||||
#include <MathUtils.h>
|
||||
|
||||
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;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
#include "SysUtils.h"
|
||||
#include <NVNGX_Parameter.h>
|
||||
#include <upscalers/IFeature.h>
|
||||
#include <framegen/IFGFeature.h>
|
||||
|
||||
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
|
||||
@@ -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);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "pch.h"
|
||||
#include "Upscaler_Inputs_Dx12.h"
|
||||
#include "Upscaler_Inputs.h"
|
||||
#include <hudfix/Hudfix_Dx12.h>
|
||||
#include <resource_tracking/ResTrack_dx12.h>
|
||||
#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);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "pch.h"
|
||||
#include "Upscaler_Inputs_Vk.h"
|
||||
#include "Upscaler_Inputs.h"
|
||||
|
||||
#include <State.h>
|
||||
#include <Config.h>
|
||||
@@ -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())
|
||||
|
||||
Reference in new issue
Block a user