From a99d64c14305f586d772597661dc331cd197edce Mon Sep 17 00:00:00 2001 From: cdozdil Date: Wed, 2 Oct 2024 00:04:18 +0300 Subject: [PATCH] added velocity factor --- OptiScaler/backends/fsr31/FSR31Feature.h | 9 ++++++--- OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp | 13 +++++++++++++ OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp | 13 +++++++++++++ OptiScaler/backends/fsr31/FSR31Feature_Vk.cpp | 12 ++++++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/OptiScaler/backends/fsr31/FSR31Feature.h b/OptiScaler/backends/fsr31/FSR31Feature.h index 8642ddf7..086ec92b 100644 --- a/OptiScaler/backends/fsr31/FSR31Feature.h +++ b/OptiScaler/backends/fsr31/FSR31Feature.h @@ -39,10 +39,10 @@ private: bool _depthInverted = false; unsigned int _lastWidth = 0; unsigned int _lastHeight = 0; - static inline feature_version _version{ 3, 1, 0 }; + static inline feature_version _version{ 3, 1, 1 }; protected: - std::string _name = "FSR 3.1.0"; + std::string _name = "FSR 3.X"; ffxContext _context = nullptr; ffxCreateContextDescUpscale _contextDesc = {}; @@ -59,11 +59,14 @@ protected: double GetDeltaTime(); void SetDepthInverted(bool InValue); - static inline void parse_version(const char* version_str) { + static inline void parse_version(const char* version_str) + { if (sscanf_s(version_str, "%u.%u.%u", &_version.major, &_version.minor, &_version.patch) != 3) LOG_WARN("can't parse {0}", version_str); } + float _velocity = 0.0f; + public: bool IsDepthInverted() const; feature_version Version() final { return _version; } diff --git a/OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp b/OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp index dc2e5abe..ea0eb3fb 100644 --- a/OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp +++ b/OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp @@ -346,6 +346,19 @@ bool FSR31FeatureDx11on12::Evaluate(ID3D11DeviceContext* InDeviceContext, NVSDK_ params.preExposure = 1.0f; params.viewSpaceToMetersFactor = 1.0f; + if (_velocity != Config::Instance()->FsrVelocity.value_or(0.3f)) + { + _velocity = Config::Instance()->FsrVelocity.value_or(0.3f); + ffxConfigureDescUpscaleKeyValue m_upscalerKeyValueConfig{}; + m_upscalerKeyValueConfig.header.type = FFX_API_CONFIGURE_DESC_TYPE_UPSCALE_KEYVALUE; + m_upscalerKeyValueConfig.key = FFX_API_CONFIGURE_UPSCALE_KEY_FVELOCITYFACTOR; + m_upscalerKeyValueConfig.ptr = &_velocity; + auto result = _configure(&_context, &m_upscalerKeyValueConfig.header); + + if (result != FFX_API_RETURN_OK) + LOG_WARN("Velocity configure result: {}", (UINT)result); + } + LOG_DEBUG("Dispatch!!"); auto ffxresult = _dispatch(&_context, ¶ms.header); diff --git a/OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp b/OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp index 4ea26647..f95f568f 100644 --- a/OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp +++ b/OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp @@ -370,6 +370,19 @@ bool FSR31FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_ params.preExposure = 1.0f; InParameters->Get(NVSDK_NGX_Parameter_DLSS_Pre_Exposure, ¶ms.preExposure); + if (_velocity != Config::Instance()->FsrVelocity.value_or(0.3f)) + { + _velocity = Config::Instance()->FsrVelocity.value_or(0.3f); + ffxConfigureDescUpscaleKeyValue m_upscalerKeyValueConfig{}; + m_upscalerKeyValueConfig.header.type = FFX_API_CONFIGURE_DESC_TYPE_UPSCALE_KEYVALUE; + m_upscalerKeyValueConfig.key = FFX_API_CONFIGURE_UPSCALE_KEY_FVELOCITYFACTOR; + m_upscalerKeyValueConfig.ptr = &_velocity; + auto result = _configure(&_context, &m_upscalerKeyValueConfig.header); + + if (result != FFX_API_RETURN_OK) + LOG_WARN("Velocity configure result: {}", (UINT)result); + } + LOG_DEBUG("Dispatch!!"); auto result = _dispatch(&_context, ¶ms.header); diff --git a/OptiScaler/backends/fsr31/FSR31Feature_Vk.cpp b/OptiScaler/backends/fsr31/FSR31Feature_Vk.cpp index f2e5cf1c..16b73092 100644 --- a/OptiScaler/backends/fsr31/FSR31Feature_Vk.cpp +++ b/OptiScaler/backends/fsr31/FSR31Feature_Vk.cpp @@ -476,6 +476,18 @@ bool FSR31FeatureVk::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* params.preExposure = 1.0f; InParameters->Get(NVSDK_NGX_Parameter_DLSS_Pre_Exposure, ¶ms.preExposure); + if (_velocity != Config::Instance()->FsrVelocity.value_or(0.3f)) + { + _velocity = Config::Instance()->FsrVelocity.value_or(0.3f); + ffxConfigureDescUpscaleKeyValue m_upscalerKeyValueConfig{}; + m_upscalerKeyValueConfig.header.type = FFX_API_CONFIGURE_DESC_TYPE_UPSCALE_KEYVALUE; + m_upscalerKeyValueConfig.key = FFX_API_CONFIGURE_UPSCALE_KEY_FVELOCITYFACTOR; + m_upscalerKeyValueConfig.ptr = &_velocity; + auto result = _configure(&_context, &m_upscalerKeyValueConfig.header); + + if (result != FFX_API_RETURN_OK) + LOG_WARN("Velocity configure result: {}", (UINT)result); + } LOG_DEBUG("Dispatch!!"); auto result = _dispatch(&_context, ¶ms.header);