From bbe716ac36f751c4d3dc1ae04d43dccbc9516d3c Mon Sep 17 00:00:00 2001 From: cdozdil Date: Sun, 15 Mar 2026 22:38:06 +0300 Subject: [PATCH] ResizeBuffers fix was crashing FSR-FG, so disabled it for FSR-FG --- OptiScaler/hooks/FG_Hooks.cpp | 66 +++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/OptiScaler/hooks/FG_Hooks.cpp b/OptiScaler/hooks/FG_Hooks.cpp index 1dca0e7f..04edead8 100644 --- a/OptiScaler/hooks/FG_Hooks.cpp +++ b/OptiScaler/hooks/FG_Hooks.cpp @@ -521,25 +521,28 @@ HRESULT FGHooks::hkResizeBuffers(IDXGISwapChain* This, UINT BufferCount, UINT Wi } } - for (UINT i = 0; i < 8; i++) + if (State::Instance().activeFgOutput == FGOutput::XeFG) { - ID3D12Resource* backBuffer = nullptr; - auto bbResult = This->GetBuffer(i, IID_PPV_ARGS(&backBuffer)); + for (UINT i = 0; i < 8; i++) + { + ID3D12Resource* backBuffer = nullptr; + auto bbResult = This->GetBuffer(i, IID_PPV_ARGS(&backBuffer)); - if (bbResult == S_OK) - { - LOG_DEBUG("Backbuffer {}: {:X}", i, (size_t) backBuffer); - auto refCount = backBuffer->Release(); - while (refCount > 1) + if (bbResult == S_OK) { - LOG_DEBUG("Releasing backbuffer {}: RefCount {}", i, refCount); - refCount = backBuffer->Release(); + LOG_DEBUG("Backbuffer {}: {:X}", i, (size_t) backBuffer); + auto refCount = backBuffer->Release(); + while (refCount > 1) + { + LOG_DEBUG("Releasing backbuffer {}: RefCount {}", i, refCount); + refCount = backBuffer->Release(); + } + } + else + { + LOG_DEBUG("GetBuffer failed for index {}: {:X}", i, (UINT) bbResult); + break; } - } - else - { - LOG_DEBUG("GetBuffer failed for index {}: {:X}", i, (UINT) bbResult); - break; } } @@ -750,25 +753,28 @@ HRESULT FGHooks::hkResizeBuffers1(IDXGISwapChain* This, UINT BufferCount, UINT W } } - for (UINT i = 0; i < 8; i++) + if (State::Instance().activeFgOutput == FGOutput::XeFG) { - ID3D12Resource* backBuffer = nullptr; - auto bbResult = This->GetBuffer(i, IID_PPV_ARGS(&backBuffer)); + for (UINT i = 0; i < 8; i++) + { + ID3D12Resource* backBuffer = nullptr; + auto bbResult = This->GetBuffer(i, IID_PPV_ARGS(&backBuffer)); - if (bbResult == S_OK) - { - LOG_DEBUG("Backbuffer {}: {:X}", i, (size_t) backBuffer); - auto refCount = backBuffer->Release(); - while (refCount > 1) + if (bbResult == S_OK) { - LOG_DEBUG("Releasing backbuffer {}: RefCount {}", i, refCount); - refCount = backBuffer->Release(); + LOG_DEBUG("Backbuffer {}: {:X}", i, (size_t) backBuffer); + auto refCount = backBuffer->Release(); + while (refCount > 1) + { + LOG_DEBUG("Releasing backbuffer {}: RefCount {}", i, refCount); + refCount = backBuffer->Release(); + } + } + else + { + LOG_DEBUG("GetBuffer failed for index {}: {:X}", i, (UINT) bbResult); + break; } - } - else - { - LOG_DEBUG("GetBuffer failed for index {}: {:X}", i, (UINT) bbResult); - break; } }