From 394cb6598d47e75335ef74de6a40629be098a8ee Mon Sep 17 00:00:00 2001 From: cdozdil Date: Mon, 28 Jul 2025 17:51:28 +0300 Subject: [PATCH] Added a new quirk for Wuchang FSR crash --- OptiScaler/dllmain.cpp | 3 +++ OptiScaler/inputs/FfxApi_Dx12.cpp | 17 ++++++++++++++--- OptiScaler/misc/Quirks.h | 8 ++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/OptiScaler/dllmain.cpp b/OptiScaler/dllmain.cpp index 4314f681..8efa1e5e 100644 --- a/OptiScaler/dllmain.cpp +++ b/OptiScaler/dllmain.cpp @@ -1006,6 +1006,9 @@ static void CheckQuirks() if (quirks & GameQuirk::DontUseUnrealBarriers && !Config::Instance()->MVResourceBarrier.has_value()) Config::Instance()->MVResourceBarrier.set_volatile_value(128); + if (quirks & GameQuirk::SkipFirst10Frames && !Config::Instance()->SkipFirstFrames.has_value()) + Config::Instance()->SkipFirstFrames.set_volatile_value(10); + State::Instance().gameQuirks = quirks; } diff --git a/OptiScaler/inputs/FfxApi_Dx12.cpp b/OptiScaler/inputs/FfxApi_Dx12.cpp index cd3eb47b..4d090f1c 100644 --- a/OptiScaler/inputs/FfxApi_Dx12.cpp +++ b/OptiScaler/inputs/FfxApi_Dx12.cpp @@ -590,7 +590,11 @@ ffxReturnCode_t ffxDispatch_Dx12(ffxContext* context, ffxDispatchDescHeader* des params->Set(NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Height, dispatchDesc->renderSize.height); params->Set(NVSDK_NGX_Parameter_Depth, dispatchDesc->depth.resource); params->Set(NVSDK_NGX_Parameter_ExposureTexture, dispatchDesc->exposure.resource); - params->Set(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, dispatchDesc->reactive.resource); + + if (dispatchDesc->reactive.description.width >= dispatchDesc->renderSize.width && + dispatchDesc->reactive.description.height >= dispatchDesc->renderSize.height) + params->Set(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, dispatchDesc->reactive.resource); + params->Set(NVSDK_NGX_Parameter_Color, dispatchDesc->color.resource); params->Set(NVSDK_NGX_Parameter_MotionVectors, dispatchDesc->motionVectors.resource); params->Set(NVSDK_NGX_Parameter_Output, dispatchDesc->output.resource); @@ -599,8 +603,15 @@ ffxReturnCode_t ffxDispatch_Dx12(ffxContext* context, ffxDispatchDescHeader* des params->Set("FSR.cameraFovAngleVertical", dispatchDesc->cameraFovAngleVertical); params->Set("FSR.frameTimeDelta", dispatchDesc->frameTimeDelta); params->Set("FSR.viewSpaceToMetersFactor", dispatchDesc->viewSpaceToMetersFactor); - params->Set("FSR.transparencyAndComposition", dispatchDesc->transparencyAndComposition.resource); - params->Set("FSR.reactive", dispatchDesc->reactive.resource); + + if (dispatchDesc->transparencyAndComposition.description.width >= dispatchDesc->renderSize.width && + dispatchDesc->transparencyAndComposition.description.height >= dispatchDesc->renderSize.height) + params->Set("FSR.transparencyAndComposition", dispatchDesc->transparencyAndComposition.resource); + + if (dispatchDesc->reactive.description.width >= dispatchDesc->renderSize.width && + dispatchDesc->reactive.description.height >= dispatchDesc->renderSize.height) + params->Set("FSR.reactive", dispatchDesc->reactive.resource); + params->Set(NVSDK_NGX_Parameter_Sharpness, dispatchDesc->sharpness); params->Set("FSR.upscaleSize.width", dispatchDesc->upscaleSize.width); params->Set("FSR.upscaleSize.height", dispatchDesc->upscaleSize.height); diff --git a/OptiScaler/misc/Quirks.h b/OptiScaler/misc/Quirks.h index c18e5952..bf0b0f2a 100644 --- a/OptiScaler/misc/Quirks.h +++ b/OptiScaler/misc/Quirks.h @@ -21,6 +21,7 @@ enum class GameQuirk : uint64_t DisableOptiXessPipelineCreation, DontUseNTShared, DontUseUnrealBarriers, + SkipFirst10Frames, // Quirks that are applied deeper in code CyberpunkHudlessStateOverride, @@ -162,6 +163,11 @@ static const QuirkEntry quirkTable[] = { // no spoof needed for DLSS inputs, but no DLSSG and Reflex QUIRK_ENTRY("returnal-win64-shipping.exe", GameQuirk::DisableDxgiSpoofing, GameQuirk::DontUseUnrealBarriers), + // WUCHANG: Fallen Feathers + // Skip 1 frame use of upscaler which cause crash + QUIRK_ENTRY("project_plague-deck-shipping.exe", GameQuirk::SkipFirst10Frames), + QUIRK_ENTRY("project_plague-win64-shipping.exe", GameQuirk::SkipFirst10Frames), + // UNCHARTED: Legacy of Thieves Collection // no spoof needed for DLSS inputs QUIRK_ENTRY("u4.exe", GameQuirk::DisableDxgiSpoofing), @@ -253,6 +259,8 @@ static void printQuirks(flag_set& quirks) 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"); + if (quirks & GameQuirk::SkipFirst10Frames) + spdlog::info("Quirk: Skipping upscaling for first 10 frames"); return; }