diff --git a/OptiScaler/backends/IFeature.cpp b/OptiScaler/backends/IFeature.cpp index 7790c302..140897e6 100644 --- a/OptiScaler/backends/IFeature.cpp +++ b/OptiScaler/backends/IFeature.cpp @@ -8,13 +8,13 @@ void IFeature::SetHandle(unsigned int InHandleId) spdlog::info("IFeatureContext::SetHandle Handle: {0}", _handle->Id); } -bool IFeature::SetInitParameters(const NVSDK_NGX_Parameter* InParameters) +bool IFeature::SetInitParameters(NVSDK_NGX_Parameter* InParameters) { unsigned int width = 0; unsigned int outWidth = 0; unsigned int height = 0; unsigned int outHeight = 0; - int pqValue = 1; + int pqValue = 0; InParameters->Get(NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, &_featureFlags); @@ -42,12 +42,32 @@ bool IFeature::SetInitParameters(const NVSDK_NGX_Parameter* InParameters) _displayWidth = width > outWidth ? width : outWidth; _displayHeight = height > outHeight ? height : outHeight; - _renderWidth = width < outWidth ? width : outWidth; - _renderHeight = height < outHeight ? height : outHeight; _targetWidth = _displayWidth; _targetHeight = _displayHeight; + _renderWidth = width < outWidth ? width : outWidth; + _renderHeight = height < outHeight ? height : outHeight; + _perfQualityValue = (NVSDK_NGX_PerfQuality_Value)pqValue; + //Should not be needed but who knows + if (_perfQualityValue == NVSDK_NGX_PerfQuality_Value_DLAA) + { + _renderWidth = _displayWidth; + _renderHeight = _displayHeight; + } + + //Should not be needed but who knows + if (_renderWidth == _displayWidth && _renderHeight == _displayHeight && _perfQualityValue != NVSDK_NGX_PerfQuality_Value_DLAA) + { + _perfQualityValue == NVSDK_NGX_PerfQuality_Value_DLAA; + pqValue = (int)_perfQualityValue; + InParameters->Set(NVSDK_NGX_Parameter_PerfQualityValue, pqValue); + InParameters->Set(NVSDK_NGX_Parameter_Width, _displayWidth); + InParameters->Set(NVSDK_NGX_Parameter_Height, _displayHeight); + InParameters->Set(NVSDK_NGX_Parameter_OutWidth, _displayWidth); + InParameters->Set(NVSDK_NGX_Parameter_OutHeight, _displayHeight); + } + spdlog::info("IFeatureContext::SetInitParameters Render Resolution: {0}x{1}, Display Resolution {2}x{3}, Quality: {4}", _renderWidth, _renderHeight, _displayWidth, _displayHeight, pqValue); @@ -58,7 +78,7 @@ bool IFeature::SetInitParameters(const NVSDK_NGX_Parameter* InParameters) return false; } -void IFeature::GetRenderResolution(const NVSDK_NGX_Parameter* InParameters, unsigned int* OutWidth, unsigned int* OutHeight) +void IFeature::GetRenderResolution(const NVSDK_NGX_Parameter* InParameters, unsigned int* OutWidth, unsigned int* OutHeight) { if (InParameters->Get(NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Width, OutWidth) != NVSDK_NGX_Result_Success || InParameters->Get(NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Height, OutHeight) != NVSDK_NGX_Result_Success) @@ -70,7 +90,6 @@ void IFeature::GetRenderResolution(const NVSDK_NGX_Parameter* InParameters, unsi do { - if (InParameters->Get(NVSDK_NGX_Parameter_Width, &width) == NVSDK_NGX_Result_Success && InParameters->Get(NVSDK_NGX_Parameter_Height, &height) == NVSDK_NGX_Result_Success) { diff --git a/OptiScaler/backends/IFeature.h b/OptiScaler/backends/IFeature.h index 2ab34f39..a266eda7 100644 --- a/OptiScaler/backends/IFeature.h +++ b/OptiScaler/backends/IFeature.h @@ -36,7 +36,7 @@ protected: bool _moduleLoaded = false; void SetHandle(unsigned int InHandleId); - bool SetInitParameters(const NVSDK_NGX_Parameter* InParameters); + bool SetInitParameters(NVSDK_NGX_Parameter* InParameters); void GetRenderResolution(const NVSDK_NGX_Parameter* InParameters, unsigned int* OutWidth, unsigned int* OutHeight); virtual void SetInit(bool InValue) { _isInited = InValue; } diff --git a/OptiScaler/backends/dlss/DLSSFeature.cpp b/OptiScaler/backends/dlss/DLSSFeature.cpp index 59d7e3e5..d2e4d208 100644 --- a/OptiScaler/backends/dlss/DLSSFeature.cpp +++ b/OptiScaler/backends/dlss/DLSSFeature.cpp @@ -197,6 +197,7 @@ void DLSSFeature::ProcessEvaluateParams(NVSDK_NGX_Parameter* InParameters) InParameters->Set(NVSDK_NGX_Parameter_Sharpness, 0.0f); } + // Read render resolution unsigned int width; unsigned int height; GetRenderResolution(InParameters, &width, &height); diff --git a/OptiScaler/backends/dlssd/DLSSDFeature.cpp b/OptiScaler/backends/dlssd/DLSSDFeature.cpp index fbf4d75c..3a05f9ce 100644 --- a/OptiScaler/backends/dlssd/DLSSDFeature.cpp +++ b/OptiScaler/backends/dlssd/DLSSDFeature.cpp @@ -27,6 +27,7 @@ void DLSSDFeature::ProcessEvaluateParams(NVSDK_NGX_Parameter* InParameters) InParameters->Set(NVSDK_NGX_Parameter_Sharpness, 0.0f); } + // Read render resolution unsigned int width; unsigned int height; GetRenderResolution(InParameters, &width, &height);