mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-08-26 08:06:33 +00:00
Better version management for active FSR-FG feature
This commit is contained in:
@@ -193,16 +193,17 @@ void FSRFG_Dx12::ConfigureFramePaceTuning()
|
||||
|
||||
feature_version FSRFG_Dx12::Version()
|
||||
{
|
||||
|
||||
if (_fgContext == nullptr && _version.major == 0)
|
||||
{
|
||||
if (!FfxApiProxy::IsFGReady())
|
||||
FfxApiProxy::InitFfxDx12();
|
||||
|
||||
if (FfxApiProxy::IsFGReady())
|
||||
{
|
||||
auto ver = FfxApiProxy::VersionDx12_FG();
|
||||
return ver;
|
||||
_version = FfxApiProxy::VersionDx12_FG();
|
||||
}
|
||||
|
||||
return { 0, 0, 0 };
|
||||
return _version;
|
||||
}
|
||||
|
||||
HWND FSRFG_Dx12::Hwnd() { return _hwnd; }
|
||||
@@ -551,6 +552,7 @@ void FSRFG_Dx12::DestroyFGContext()
|
||||
{
|
||||
_frameCount = 1;
|
||||
_lastDispatchedFrame = 0;
|
||||
_version = {};
|
||||
|
||||
LOG_DEBUG("");
|
||||
|
||||
@@ -825,6 +827,8 @@ void FSRFG_Dx12::CreateContext(ID3D12Device* device, FG_Constants& fgConstants)
|
||||
override.versionId = State::Instance().ffxFGVersionIds[Config::Instance()->FfxFGIndex.value_or_default()];
|
||||
backendDesc.header.pNext = &override.header;
|
||||
|
||||
ParseVersion(State::Instance().ffxFGVersionNames[Config::Instance()->FfxFGIndex.value_or_default()], &_version);
|
||||
|
||||
ffxReturnCode_t retCode = FfxApiProxy::D3D12_CreateContext(&_fgContext, &createFg.header, nullptr);
|
||||
|
||||
State::Instance().skipHeapCapture = false;
|
||||
|
||||
@@ -16,6 +16,7 @@ class FSRFG_Dx12 : public virtual IFGFeature_Dx12
|
||||
ffxContext _fgContext = nullptr;
|
||||
FfxApiSurfaceFormat _lastHudlessFormat = FFX_API_SURFACE_FORMAT_UNKNOWN;
|
||||
FfxApiSurfaceFormat _usingHudlessFormat = FFX_API_SURFACE_FORMAT_UNKNOWN;
|
||||
feature_version _version { 0, 0, 0 };
|
||||
|
||||
uint32_t _maxRenderWidth = 0;
|
||||
uint32_t _maxRenderHeight = 0;
|
||||
@@ -62,6 +63,25 @@ class FSRFG_Dx12 : public virtual IFGFeature_Dx12
|
||||
bool UIFormatTransfer(int index, ID3D12Device* device, ID3D12GraphicsCommandList* cmdList, DXGI_FORMAT targetFormat,
|
||||
Dx12Resource* resource);
|
||||
|
||||
void ParseVersion(const char* version_str, feature_version* _version)
|
||||
{
|
||||
const char* p = version_str;
|
||||
|
||||
// Skip non-digits at front
|
||||
while (*p)
|
||||
{
|
||||
if (isdigit((unsigned char) p[0]))
|
||||
{
|
||||
if (sscanf(p, "%u.%u.%u", &_version->major, &_version->minor, &_version->patch) == 3)
|
||||
return;
|
||||
}
|
||||
|
||||
++p;
|
||||
}
|
||||
|
||||
LOG_WARN("can't parse {0}", version_str);
|
||||
}
|
||||
|
||||
protected:
|
||||
void ReleaseObjects() override final;
|
||||
void CreateObjects(ID3D12Device* InDevice) override final;
|
||||
|
||||
Reference in New Issue
Block a user