From 53be488f4d166f7c47ea2965b36a7be8caa4bd98 Mon Sep 17 00:00:00 2001 From: cdozdil Date: Thu, 21 Aug 2025 00:31:48 +0300 Subject: [PATCH] Use Upscaler input logic for DLSSGFG inputs --- OptiScaler/framegen/ffx/FSRFG_Dx12.cpp | 14 +++++++++----- OptiScaler/framegen/xefg/XeFG_Dx12.cpp | 14 +++++++++----- OptiScaler/resource_tracking/ResTrack_dx12.cpp | 5 +++-- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/OptiScaler/framegen/ffx/FSRFG_Dx12.cpp b/OptiScaler/framegen/ffx/FSRFG_Dx12.cpp index e5d23671..e090e200 100644 --- a/OptiScaler/framegen/ffx/FSRFG_Dx12.cpp +++ b/OptiScaler/framegen/ffx/FSRFG_Dx12.cpp @@ -731,7 +731,8 @@ void FSRFG_Dx12::EvaluateState(ID3D12Device* device, FG_Constants& fgConstants) CreateContext(device, fgConstants); // Pause for 10 frames - if (State::Instance().activeFgInput == FGInput::Upscaler) + if (State::Instance().activeFgInput == FGInput::Upscaler || + State::Instance().activeFgInput == FGInput::DLSSG) UpdateTarget(); } // If there is a change deactivate it @@ -740,7 +741,8 @@ void FSRFG_Dx12::EvaluateState(ID3D12Device* device, FG_Constants& fgConstants) Deactivate(); // Pause for 10 frames - if (State::Instance().activeFgInput == FGInput::Upscaler) + if (State::Instance().activeFgInput == FGInput::Upscaler || + State::Instance().activeFgInput == FGInput::DLSSG) UpdateTarget(); // Destroy if Swapchain has a change destroy FG Context too @@ -748,14 +750,16 @@ void FSRFG_Dx12::EvaluateState(ID3D12Device* device, FG_Constants& fgConstants) DestroyFGContext(); } - if (State::Instance().activeFgInput == FGInput::Upscaler && _fgContext != nullptr && !IsPaused() && !IsActive()) + if ((State::Instance().activeFgInput == FGInput::Upscaler || + State::Instance().activeFgInput == FGInput::DLSSG) && + _fgContext != nullptr && !IsPaused() && !IsActive()) Activate(); } else if (IsActive()) { Deactivate(); - if (State::Instance().activeFgInput == FGInput::Upscaler) + if (State::Instance().activeFgInput == FGInput::Upscaler || State::Instance().activeFgInput == FGInput::DLSSG) { State::Instance().ClearCapturedHudlesses = true; Hudfix_Dx12::ResetCounters(); @@ -768,7 +772,7 @@ void FSRFG_Dx12::EvaluateState(ID3D12Device* device, FG_Constants& fgConstants) State::Instance().FGchanged = false; - if (State::Instance().activeFgInput == FGInput::Upscaler) + if (State::Instance().activeFgInput == FGInput::Upscaler || State::Instance().activeFgInput == FGInput::DLSSG) Hudfix_Dx12::ResetCounters(); // Pause for 10 frames diff --git a/OptiScaler/framegen/xefg/XeFG_Dx12.cpp b/OptiScaler/framegen/xefg/XeFG_Dx12.cpp index 331e7644..c7363502 100644 --- a/OptiScaler/framegen/xefg/XeFG_Dx12.cpp +++ b/OptiScaler/framegen/xefg/XeFG_Dx12.cpp @@ -577,7 +577,8 @@ void XeFG_Dx12::EvaluateState(ID3D12Device* device, FG_Constants& fgConstants) CreateContext(device, fgConstants); // Pause for 10 frames - if (State::Instance().activeFgInput == FGInput::Upscaler) + if (State::Instance().activeFgInput == FGInput::Upscaler || + State::Instance().activeFgInput == FGInput::DLSSG) UpdateTarget(); } // If there is a change deactivate it @@ -586,7 +587,8 @@ void XeFG_Dx12::EvaluateState(ID3D12Device* device, FG_Constants& fgConstants) Deactivate(); // Pause for 10 frames - if (State::Instance().activeFgInput == FGInput::Upscaler) + if (State::Instance().activeFgInput == FGInput::Upscaler || + State::Instance().activeFgInput == FGInput::DLSSG) UpdateTarget(); // Destroy if Swapchain has a change destroy FG Context too @@ -594,14 +596,16 @@ void XeFG_Dx12::EvaluateState(ID3D12Device* device, FG_Constants& fgConstants) DestroyFGContext(); } - if (State::Instance().activeFgInput == FGInput::Upscaler && _fgContext != nullptr && !IsPaused() && !IsActive()) + if ((State::Instance().activeFgInput == FGInput::Upscaler || + State::Instance().activeFgInput == FGInput::DLSSG) && + _fgContext != nullptr && !IsPaused() && !IsActive()) Activate(); } else { Deactivate(); - if (State::Instance().activeFgInput == FGInput::Upscaler) + if (State::Instance().activeFgInput == FGInput::Upscaler || State::Instance().activeFgInput == FGInput::DLSSG) { State::Instance().ClearCapturedHudlesses = true; Hudfix_Dx12::ResetCounters(); @@ -614,7 +618,7 @@ void XeFG_Dx12::EvaluateState(ID3D12Device* device, FG_Constants& fgConstants) State::Instance().FGchanged = false; - if (State::Instance().activeFgInput == FGInput::Upscaler) + if (State::Instance().activeFgInput == FGInput::Upscaler || State::Instance().activeFgInput == FGInput::DLSSG) Hudfix_Dx12::ResetCounters(); // Pause for 10 frames diff --git a/OptiScaler/resource_tracking/ResTrack_dx12.cpp b/OptiScaler/resource_tracking/ResTrack_dx12.cpp index 74a8b076..4d541bb3 100644 --- a/OptiScaler/resource_tracking/ResTrack_dx12.cpp +++ b/OptiScaler/resource_tracking/ResTrack_dx12.cpp @@ -1814,7 +1814,7 @@ void ResTrack_Dx12::HookDevice(ID3D12Device* device) // Get the vtable pointer PVOID* pVTable = *(PVOID**) realDevice; - // hudless + // Hudfix o_CreateDescriptorHeap = (PFN_CreateDescriptorHeap) pVTable[14]; o_CreateConstantBufferView = (PFN_CreateConstantBufferView) pVTable[17]; o_CreateShaderResourceView = (PFN_CreateShaderResourceView) pVTable[18]; @@ -1826,6 +1826,7 @@ void ResTrack_Dx12::HookDevice(ID3D12Device* device) o_CopyDescriptorsSimple = (PFN_CopyDescriptorsSimple) pVTable[24]; // Apply the detour + // Only needed for Hudfix if (o_CreateDescriptorHeap != nullptr && State::Instance().activeFgInput == FGInput::Upscaler) { DetourTransactionBegin(); @@ -1859,7 +1860,7 @@ void ResTrack_Dx12::HookDevice(ID3D12Device* device) HookCommandList(device); } - // Only needed for hudfix + // Only needed for Hudfix if (State::Instance().activeFgInput == FGInput::Upscaler) HookResource(device); }