From c4c00ef7cd0806559079eaa4b8e9222235a3613d Mon Sep 17 00:00:00 2001 From: cdozdil Date: Mon, 30 Mar 2026 18:50:55 +0300 Subject: [PATCH] Disable XeFG before changing composition or interpolation count --- OptiScaler/framegen/xefg/XeFG_Dx12.cpp | 28 +++++++++++--------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/OptiScaler/framegen/xefg/XeFG_Dx12.cpp b/OptiScaler/framegen/xefg/XeFG_Dx12.cpp index 3dd542db..bf20e8fd 100644 --- a/OptiScaler/framegen/xefg/XeFG_Dx12.cpp +++ b/OptiScaler/framegen/xefg/XeFG_Dx12.cpp @@ -713,6 +713,12 @@ bool XeFG_Dx12::Dispatch() if (XeFGProxy::SetUiCompositionState() != nullptr && Config::Instance()->FGXeFGUIComposition.value_or_default() != _uiComposition && IsUsingHudless(fIndex)) { + // To prevent XeLL issues + LOG_DEBUG("UI Composition state changed {}, skipping rendering for 10 frames", _uiComposition); + state.FGchanged = true; + UpdateTarget(); + Deactivate(); + _uiComposition = Config::Instance()->FGXeFGUIComposition.value_or_default(); auto uiState = @@ -722,17 +728,7 @@ bool XeFG_Dx12::Dispatch() auto uiResult = XeFGProxy::SetUiCompositionState()(_swapChainContext, uiState); if (uiResult != XEFG_SWAPCHAIN_RESULT_SUCCESS) - { LOG_ERROR("SetUiCompositionState error: {} ({})", magic_enum::enum_name(uiResult), (UINT) uiResult); - } - else - { - // To prevent XeLL issues - LOG_DEBUG("UI Composition state changed {}, skipping rendering for 10 frames", _uiComposition); - state.FGchanged = true; - UpdateTarget(); - Deactivate(); - } } if (XeFGProxy::SetNumInterpolatedFrames() != nullptr) @@ -750,22 +746,22 @@ bool XeFG_Dx12::Dispatch() LOG_INFO("Interpolation count changed {} -> {}", _framesToInterpolate, Config::Instance()->FGXeFGInterpolationCount.value_or_default()); + state.FGchanged = true; + UpdateTarget(); + Deactivate(); + ScopedSkipSpoofing skipSpoofing {}; auto intResult = XeFGProxy::SetNumInterpolatedFrames()( _swapChainContext, Config::Instance()->FGXeFGInterpolationCount.value_or_default()); + _framesToInterpolate = Config::Instance()->FGXeFGInterpolationCount.value_or_default(); + if (intResult != XEFG_SWAPCHAIN_RESULT_SUCCESS) { LOG_ERROR("SetNumInterpolatedFrames error: {} ({})", magic_enum::enum_name(intResult), (UINT) intResult); } - else - { - LOG_DEBUG("Interpolation count set to: {}", - Config::Instance()->FGXeFGInterpolationCount.value_or_default()); - _framesToInterpolate = Config::Instance()->FGXeFGInterpolationCount.value_or_default(); - } } }