diff --git a/OptiScaler/backends/IFeature.h b/OptiScaler/backends/IFeature.h index d7086da0..38df1fb9 100644 --- a/OptiScaler/backends/IFeature.h +++ b/OptiScaler/backends/IFeature.h @@ -14,16 +14,16 @@ typedef struct _feature_version unsigned int patch; } FeatureVersion; -inline static unsigned int handleCounter = 1000000; class IFeature { private: bool _isInited = false; + inline static unsigned int handleCounter = 1000000; protected: unsigned int _handleId = 0; - IFeatureCreateParams _createParams = {}; + IFeatureCreateParams _createParams; bool _hasColor = false; bool _hasDepth = false; @@ -31,7 +31,7 @@ protected: bool _hasTM = false; bool _hasExposure = false; bool _hasOutput = false; - + unsigned int _renderWidth = 0; unsigned int _renderHeight = 0; unsigned int _targetWidth = 0; @@ -44,20 +44,20 @@ protected: long _frameCount = 0; bool _moduleLoaded = false; - void SetHandle(unsigned int InHandleId) + void SetHandle(unsigned int InHandleId) { _handleId = InHandleId; spdlog::info("IFeatureContext::SetHandle Handle: {0}", _handleId); } - void SetInit(bool InValue) - { - _isInited = InValue; + void SetInit(bool InValue) + { + _isInited = InValue; } public: static unsigned int GetNextHandleId() { return handleCounter++; } - + unsigned int DisplayWidth() const { return _displayWidth; }; unsigned int DisplayHeight() const { return _displayHeight; }; unsigned int TargetWidth() const { return _targetWidth; }; @@ -65,10 +65,11 @@ public: unsigned int RenderWidth() const { return _renderWidth; }; unsigned int RenderHeight() const { return _renderHeight; }; CommonQualityPreset PerfQualityValue() const { return _createParams.QualityPreset(); } - - + + const IFeatureCreateParams CreateParams() { return _createParams; } + bool IsInited() const { return _isInited; } - + float Sharpness() const { return _sharpness; } bool HasColor() const { return _hasColor; } bool HasDepth() const { return _hasDepth; } @@ -76,9 +77,9 @@ public: bool HasTM() const { return _hasTM; } bool HasExposure() const { return _hasExposure; } bool HasOutput() const { return _hasOutput; } - - virtual FeatureVersion Version() = 0; - virtual const char* Name() = 0; + + virtual FeatureVersion Version() { return {}; } + virtual const char* Name() { return "Base"; } bool ModuleLoaded() const { return _moduleLoaded; } long FrameCount() const { return _frameCount; } diff --git a/OptiScaler/backends/IFeatureCreateParams.h b/OptiScaler/backends/IFeatureCreateParams.h index 6e58e80e..635322f9 100644 --- a/OptiScaler/backends/IFeatureCreateParams.h +++ b/OptiScaler/backends/IFeatureCreateParams.h @@ -1,17 +1,6 @@ #pragma once #include "../pch.h" -enum CommonQualityPreset -{ - NativeAA, - UltraQuality, - Quality, - Balanced, - Performance, - UltraPerformance, - Undefined -}; - class IFeatureCreateParams { protected: @@ -37,6 +26,8 @@ protected: public: bool IsInited() const { return _isInited; } + virtual ParamterSource Source() { return Base; } + uint32_t RenderWidth() const { return _renderWidth; } uint32_t RenderHeight() const { return _renderHeight; } uint32_t DisplayWidth() const { return _displayWidth; } diff --git a/OptiScaler/backends/IFeatureCreateParams_DLSS.h b/OptiScaler/backends/IFeatureCreateParams_DLSS.h index 5fd556ab..595ef822 100644 --- a/OptiScaler/backends/IFeatureCreateParams_DLSS.h +++ b/OptiScaler/backends/IFeatureCreateParams_DLSS.h @@ -10,6 +10,7 @@ class IFeatureCreateParams_DLSS : public IFeatureCreateParams { private: const NVNGX_Init_Info _initInfo; + const NVSDK_NGX_Parameter* _nvParameter = nullptr; inline static CommonQualityPreset GetQualityPreset(int pqValue) { @@ -52,6 +53,8 @@ public: if (InParameters == nullptr) return; + _nvParameter = InParameters; + NVSDK_NGX_Result result; unsigned int width = 0; @@ -191,4 +194,8 @@ public: } NVNGX_Init_Info InitInfo() { return _initInfo; } + + const NVSDK_NGX_Parameter* NvParameter() { return _nvParameter; } + + ParamterSource Source() final { return DLSS; } }; \ No newline at end of file diff --git a/OptiScaler/backends/IFeatureEvaluateParams.h b/OptiScaler/backends/IFeatureEvaluateParams.h index 23204451..dd449c43 100644 --- a/OptiScaler/backends/IFeatureEvaluateParams.h +++ b/OptiScaler/backends/IFeatureEvaluateParams.h @@ -47,6 +47,7 @@ protected: float _sharpness = 0.0f; float _exposureScale = 1.0f; + float _preExposure = 1.0f; float _frameTimeDelta = 0.0f; bool _reset = false; @@ -66,6 +67,8 @@ public: } } + virtual ParamterSource Source() { return Base; } + bool IsInited() const { return _isInited; } void* InputColor() const { return _inputColor; } diff --git a/OptiScaler/backends/IFeatureEvaluateParams_DLSS.h b/OptiScaler/backends/IFeatureEvaluateParams_DLSS.h index 6319fabd..ee99a209 100644 --- a/OptiScaler/backends/IFeatureEvaluateParams_DLSS.h +++ b/OptiScaler/backends/IFeatureEvaluateParams_DLSS.h @@ -5,6 +5,10 @@ class IFeatureEvaluateParams_DLSS : public IFeatureEvaluateParams { private: + double _lastFrameTime = 0.0; + + const NVSDK_NGX_Parameter* _nvParameter = nullptr; + void GetRenderResolution(const NVSDK_NGX_Parameter* InParameters) { uint32_t OutWidth; @@ -64,9 +68,15 @@ private: public: IFeatureEvaluateParams_DLSS(const NVSDK_NGX_Parameter* InParameters) : IFeatureEvaluateParams() { + _nvParameter = InParameters; + InParameters->Get(NVSDK_NGX_Parameter_Jitter_Offset_X, &_jitterOffsetX); InParameters->Get(NVSDK_NGX_Parameter_Jitter_Offset_Y, &_jitterOffsetY); InParameters->Get(NVSDK_NGX_Parameter_DLSS_Exposure_Scale, &_exposureScale); + InParameters->Get(NVSDK_NGX_Parameter_DLSS_Pre_Exposure, &_preExposure); + InParameters->Get(NVSDK_NGX_Parameter_MV_Scale_X, &_mvScaleX); + InParameters->Get(NVSDK_NGX_Parameter_MV_Scale_Y, &_mvScaleY); + InParameters->Get(NVSDK_NGX_Parameter_Sharpness, &_sharpness); int reset = 0; InParameters->Get(NVSDK_NGX_Parameter_Reset, &reset); @@ -79,15 +89,13 @@ public: InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, &_inputMask); InParameters->Get(NVSDK_NGX_Parameter_Output, &_outputColor); - InParameters->Get(NVSDK_NGX_Parameter_MV_Scale_X, &_mvScaleX); - InParameters->Get(NVSDK_NGX_Parameter_MV_Scale_Y, &_mvScaleY); float ftDelta = 0.0f; if (InParameters->Get(NVSDK_NGX_Parameter_FrameTimeDeltaInMsec, &ftDelta) == NVSDK_NGX_Result_Success || ftDelta > 1.0f) _frameTimeDelta = ftDelta; - InParameters->Get(NVSDK_NGX_Parameter_Sharpness, &_sharpness); - GetRenderResolution(InParameters); } + + ParamterSource Source() final { return DLSS; } }; \ No newline at end of file diff --git a/OptiScaler/backends/IFeature_Dx12.h b/OptiScaler/backends/IFeature_Dx12.h index a4693182..429237b2 100644 --- a/OptiScaler/backends/IFeature_Dx12.h +++ b/OptiScaler/backends/IFeature_Dx12.h @@ -25,10 +25,6 @@ protected: public: virtual bool Init(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCommandList) = 0; virtual bool Evaluate(ID3D12GraphicsCommandList* InCommandList, const IFeatureEvaluateParams* InParams) = 0; - virtual bool Evaluate(ID3D12GraphicsCommandList* InCommandList, const IFeatureEvaluateParams* InParams) = 0; - - bool BeforeEvaluate(ID3D12GraphicsCommandList* InCommandList, const IFeatureEvaluateParams* InParams, ID3D12Resource* OutputTexture); - void AfterEvaluate(ID3D12GraphicsCommandList* InCommandList, const IFeatureEvaluateParams* InParams, ID3D12Resource* OutputTexture); IFeature_Dx12(unsigned int InHandleId, const IFeatureCreateParams InParameters); diff --git a/OptiScaler/pch.h b/OptiScaler/pch.h index 076ed166..6aaa6b37 100644 --- a/OptiScaler/pch.h +++ b/OptiScaler/pch.h @@ -18,5 +18,24 @@ #define SPDLOG_USE_STD_FORMAT #include "spdlog/spdlog.h" +enum ParamterSource +{ + Base, + DLSS, + XeSS, + FSR +}; + +enum CommonQualityPreset +{ + NativeAA, + UltraQuality, + Quality, + Balanced, + Performance, + UltraPerformance, + Undefined +}; + inline HMODULE dllModule; inline DWORD processId;