diff --git a/OptiScaler/dllmain.cpp b/OptiScaler/dllmain.cpp index 7fc49c42..80a67233 100644 --- a/OptiScaler/dllmain.cpp +++ b/OptiScaler/dllmain.cpp @@ -973,6 +973,12 @@ static void CheckQuirks() if (quirks & GameQuirk::DontUseNTShared && !Config::Instance()->DontUseNTShared.has_value()) Config::Instance()->DontUseNTShared.set_volatile_value(true); + if (quirks & GameQuirk::DontUseUnrealBarriers && !Config::Instance()->ColorResourceBarrier.has_value()) + Config::Instance()->ColorResourceBarrier.set_volatile_value(128); + + if (quirks & GameQuirk::DontUseUnrealBarriers && !Config::Instance()->MVResourceBarrier.has_value()) + Config::Instance()->MVResourceBarrier.set_volatile_value(128); + State::Instance().gameQuirks = quirks; } diff --git a/OptiScaler/misc/Quirks.h b/OptiScaler/misc/Quirks.h index 8f9ae994..59a6332b 100644 --- a/OptiScaler/misc/Quirks.h +++ b/OptiScaler/misc/Quirks.h @@ -20,6 +20,7 @@ enum class GameQuirk : uint64_t EnableVulkanExtensionSpoofing, DisableOptiXessPipelineCreation, DontUseNTShared, + DontUseUnrealBarriers, // Quirks that are applied deeper in code CyberpunkHudlessStateOverride, @@ -159,7 +160,7 @@ static const QuirkEntry quirkTable[] = { // Returnal // no spoof needed for DLSS inputs, but no DLSSG and Reflex - QUIRK_ENTRY("returnal-win64-shipping.exe", GameQuirk::DisableDxgiSpoofing), + QUIRK_ENTRY("returnal-win64-shipping.exe", GameQuirk::DisableDxgiSpoofing, GameQuirk::DontUseUnrealBarriers), // UNCHARTED: Legacy of Thieves Collection // no spoof needed for DLSS inputs @@ -249,6 +250,8 @@ static void printQuirks(flag_set& quirks) spdlog::info("Quirk: Disable custom pipeline creation for XeSS"); if (quirks & GameQuirk::DontUseNTShared) spdlog::info("Quirk: Don't use NTShared enabled"); + if (quirks & GameQuirk::DontUseUnrealBarriers) + spdlog::info("Quirk: Don't use resource barrier fix for Unreal Engine games"); return; } diff --git a/OptiScaler/upscalers/xess/XeSSFeature_Dx12.cpp b/OptiScaler/upscalers/xess/XeSSFeature_Dx12.cpp index 9ceb7888..f10ddecf 100644 --- a/OptiScaler/upscalers/xess/XeSSFeature_Dx12.cpp +++ b/OptiScaler/upscalers/xess/XeSSFeature_Dx12.cpp @@ -243,14 +243,17 @@ bool XeSSFeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_N else LOG_DEBUG("AutoExposure enabled!"); - bool supportsFloatResponsivePixelMask = Version() >= feature_version { 2, 0, 1 }; ID3D12Resource* paramReactiveMask = nullptr; + InParameters->Get("FSR.reactive", ¶mReactiveMask); + bool supportsFloatResponsivePixelMask = Version() >= feature_version { 2, 0, 1 }; - if (supportsFloatResponsivePixelMask && - InParameters->Get("FSR.reactive", ¶mReactiveMask) == NVSDK_NGX_Result_Success) + if (supportsFloatResponsivePixelMask && paramReactiveMask != nullptr) { - if (!Config::Instance()->DisableReactiveMask.value_or(!supportsFloatResponsivePixelMask)) + if (!Config::Instance()->DisableReactiveMask.value_or(false)) + { + LOG_DEBUG("Using FSR reactive mask"); params.pResponsivePixelMaskTexture = paramReactiveMask; + } } else {