From 52da51d4b2d019bb6188ac4e2fda37b60d147930 Mon Sep 17 00:00:00 2001 From: FakeMichau <49685661+FakeMichau@users.noreply.github.com> Date: Thu, 11 Dec 2025 12:50:50 +0100 Subject: [PATCH] Add FFX FG logging when using trace log --- OptiScaler/Config.h | 11 +++++------ OptiScaler/framegen/ffx/FSRFG_Dx12.cpp | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/OptiScaler/Config.h b/OptiScaler/Config.h index e206d170..4cac442b 100644 --- a/OptiScaler/Config.h +++ b/OptiScaler/Config.h @@ -102,13 +102,12 @@ template class CustomOptio } constexpr T value_or_default() && - requires(defaultState != NoDefault) - { - return this->has_value() ? std::move(this->value()) : std::move(_defaultValue); - } + requires(defaultState != NoDefault) { + return this->has_value() ? std::move(this->value()) : std::move(_defaultValue); + } - constexpr std::optional value_for_config(bool forceSave = false) - requires(defaultState == WithDefault) + constexpr std::optional value_for_config(bool forceSave = false) + requires(defaultState == WithDefault) { if (_volatile) { diff --git a/OptiScaler/framegen/ffx/FSRFG_Dx12.cpp b/OptiScaler/framegen/ffx/FSRFG_Dx12.cpp index 9992b971..152cdb13 100644 --- a/OptiScaler/framegen/ffx/FSRFG_Dx12.cpp +++ b/OptiScaler/framegen/ffx/FSRFG_Dx12.cpp @@ -210,6 +210,16 @@ HWND FSRFG_Dx12::Hwnd() { return _hwnd; } const char* FSRFG_Dx12::Name() { return "FSR-FG"; } +static void fgLogCallback(uint32_t type, const wchar_t* message) +{ + auto message_str = wstring_to_string(std::wstring(message)); + + if (type == FFX_API_MESSAGE_TYPE_ERROR) + spdlog::error("FFX FG Callback: {}", message_str); + else if (type == FFX_API_MESSAGE_TYPE_WARNING) + spdlog::warn("FFX FG Callback: {}", message_str); +} + bool FSRFG_Dx12::Dispatch() { LOG_DEBUG(); @@ -374,6 +384,12 @@ bool FSRFG_Dx12::Dispatch() ffxReturnCode_t retCode = FfxApiProxy::D3D12_Configure(&_fgContext, &fgConfig.header); LOG_DEBUG("D3D12_Configure result: {0:X}, frame: {1}, fIndex: {2}", retCode, willDispatchFrame, fIndex); + ffxConfigureDescGlobalDebug1 fgLogging = {}; + fgLogging.header.type = FFX_API_CONFIGURE_DESC_TYPE_GLOBALDEBUG1; + fgLogging.fpMessage = &fgLogCallback; + fgLogging.debugLevel = FFX_API_CONFIGURE_GLOBALDEBUG_LEVEL_VERBOSE; + retCode = FfxApiProxy::D3D12_Configure(&_fgContext, &fgLogging.header); + bool dispatchResult = false; if (retCode == FFX_API_RETURN_OK && _isActive) { @@ -800,6 +816,9 @@ void FSRFG_Dx12::CreateContext(ID3D12Device* device, FG_Constants& fgConstants) if (fgConstants.flags & FG_Flags::InfiniteDepth) createFg.flags |= FFX_FRAMEGENERATION_ENABLE_DEPTH_INFINITE; + if (spdlog::default_logger()->level() == SPDLOG_LEVEL_TRACE) + createFg.flags |= FFX_FRAMEGENERATION_ENABLE_DEBUG_CHECKING; + createFg.backBufferFormat = ffxApiGetSurfaceFormatDX12(desc.BufferDesc.Format); if (_lastHudlessFormat != FFX_API_SURFACE_FORMAT_UNKNOWN)