From 4dfb8ceef08e6e1ba666642c112a4e5ec448b18d Mon Sep 17 00:00:00 2001 From: cdozdil Date: Tue, 28 Oct 2025 16:46:01 +0300 Subject: [PATCH] Switch Dx11 swap effects with Dx12 supported ones --- OptiScaler/hooks/FG_Hooks.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/OptiScaler/hooks/FG_Hooks.cpp b/OptiScaler/hooks/FG_Hooks.cpp index 7307539a..b5d684e2 100644 --- a/OptiScaler/hooks/FG_Hooks.cpp +++ b/OptiScaler/hooks/FG_Hooks.cpp @@ -97,6 +97,18 @@ HRESULT FGHooks::CreateSwapChain(IDXGIFactory* pFactory, IUnknown* pDevice, DXGI if (State::Instance().activeFgOutput == FGOutput::XeFG && !pDesc->Windowed) LOG_WARN("Using exclusive fullscreen with XeFG!!!"); + // These effects are not supported in DX12 + if (pDesc->SwapEffect == DXGI_SWAP_EFFECT_SEQUENTIAL) + { + LOG_WARN("DXGI_SWAP_EFFECT_SEQUENTIAL is not supported in DX12, changing to FLIP_SEQUENTIAL"); + pDesc->SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + } + else if (pDesc->SwapEffect == DXGI_SWAP_EFFECT_DISCARD) + { + LOG_WARN("DXGI_SWAP_EFFECT_DISCARD is not supported in DX12, changing to FLIP_DISCARD"); + pDesc->SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; + } + auto scResult = fg->CreateSwapchain(pFactory, cq, pDesc, ppSwapChain); if (Config::Instance()->FGDontUseSwapchainBuffers.value_or_default()) @@ -166,6 +178,18 @@ HRESULT FGHooks::CreateSwapChainForHwnd(IDXGIFactory* pFactory, IUnknown* pDevic if (State::Instance().activeFgOutput == FGOutput::XeFG && pFullscreenDesc != nullptr && !pFullscreenDesc->Windowed) LOG_WARN("Using exclusive fullscreen with XeFG!!!"); + // These effects are not supported in DX12 + if (pDesc->SwapEffect == DXGI_SWAP_EFFECT_SEQUENTIAL) + { + LOG_WARN("DXGI_SWAP_EFFECT_SEQUENTIAL is not supported in DX12, changing to FLIP_SEQUENTIAL"); + pDesc->SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + } + else if (pDesc->SwapEffect == DXGI_SWAP_EFFECT_DISCARD) + { + LOG_WARN("DXGI_SWAP_EFFECT_DISCARD is not supported in DX12, changing to FLIP_DISCARD"); + pDesc->SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; + } + auto scResult = fg->CreateSwapchain1(pFactory, cq, hWnd, pDesc, pFullscreenDesc, ppSwapChain); if (Config::Instance()->FGDontUseSwapchainBuffers.value_or_default())