This commit is contained in:
cdozdil
2025-10-31 19:06:29 +03:00
7 changed files with 337 additions and 98 deletions
+99 -96
View File
@@ -1,15 +1,15 @@
; -------------------------------------------------------
[Upscalers]
; -------------------------------------------------------
; Select upscaler for Dx11 games
; Select Upscaler for Dx11 games
; fsr22 (native DX11), fsr31 (native DX11), xess (native DX11, Arc only), xess_12 (dx11on12), fsr21_12 (dx11on12), fsr22_12 (dx11on12), fsr31_12 (dx11on12, FSR4), dlss - Default (auto) is fsr22
Dx11Upscaler=auto
; Select upscaler for Dx12 games
; Select Upscaler for Dx12 games
; xess, fsr21, fsr22, fsr31 (also for FSR4), dlss - Default (auto) is xess
Dx12Upscaler=auto
; Select upscaler for Vulkan games
; Select Upscaler for Vulkan games
; fsr21, fsr22, fsr31, xess, dlss - Default (auto) is fsr21
VulkanUpscaler=auto
@@ -18,17 +18,17 @@ VulkanUpscaler=auto
; -------------------------------------------------------
[FrameGen]
; -------------------------------------------------------
; Enables frame generation
; Enables Frame Generation
; true or false - Default (auto) is false
Enabled=auto
; Selected FG Input/Source
; nukems - Limited to FSR 3 FG. Requires DLSSG in the game. Supports hudless out of the box. Uses streamline swapchain for pacing.
; fsrfg - Can be used with any FG Output. Supports hudless out of the box.
; dlssg - Can be used with any FG Output. Supports hudless out of the box. Limited to games that use Streamline v2 and DLSSG
; dlssg - Can be used with any FG Output. Supports Hudless out of the box. Limited to games that use Streamline v2 and DLSSG
; nukems - Limited to FSR 3 FG. Requires DLSSG in the game. Supports Hudless out of the box. Uses Streamline swapchain for pacing.
; fsrfg - Can be used with any FG Output. Supports Hudless out of the box.
; upscaler - Upscaler must be enabled. Can be used with any FG Output, but might be imperfect with some. To prevent UI glitching, Hudfix is required
; fsrfg30 - Can be used with any FG Output. Supports hudless out of the box.
; nofg, upscaler, fsrfg, dlssg, nukems - Default (auto) is nofg
; fsrfg30 - Can be used with any FG Output. Supports Hudless out of the box.
; nofg, dlssg, nukems, fsrfg, upscaler, fsrfg30 - Default (auto) is nofg
FGInput=auto
; Selected FG Output
@@ -38,7 +38,7 @@ FGInput=auto
; nofg, fsrfg, xefg, nukems - Default (auto) is nofg
FGOutput=auto
; Enables frame generation debug view
; Enables Frame Generation Debug View
; true or false - Default (auto) is false
DebugView=auto
@@ -50,7 +50,7 @@ DrawUIOverFG=auto
; true or false - Default (auto) is true
UIPremultipliedAlpha=auto
; Control hudless, even if FG source provides one
; Control Hudless, even if FG source provides one
; true or false - Default (auto) is false
DisableHudless=auto
@@ -67,19 +67,19 @@ SkipReset=auto
; -------------------------------------------------------
[FSRFG]
; -------------------------------------------------------
; Enables FSR3.1 frame generation tear lines
; Enables FSR3.1 Frame Generation Tear Lines
; true or false - Default (auto) is false
DebugTearLines=auto
; Enables FSR3.1 frame generation interpolation skip lines
; Enables FSR3.1 Frame Generation interpolation skip lines
; true or false - Default (auto) is false
DebugResetLines=auto
; Enables FSR3.1 frame generation pacing lines
; Enables FSR3.1 Frame Generation pacing lines
; true or false - Default (auto) is false
DebugPacingLines=auto
; Enables async FSR3.1 frame generation
; Enables async FSR3.1 Frame Generation
; true or false - Default (auto) is false
AllowAsync=auto
@@ -162,11 +162,11 @@ JitteredMV=auto
; true or false - Default (auto) is false
HighResMV=auto
; Enables XeFG frame generation debug squares
; Enables XeFG debug squares
; true or false - Default (auto) is false
DebugView=auto
; Forces borderless mode instead of exclusive fullscreen
; Forces Borderless mode instead of Exclusive Fullscreen
; It might cause stability issues on mode changes
; or IQ issues when exclusive fullscreen mode is
; smaller than diplay resolution
@@ -201,7 +201,7 @@ ModifySCIndex=auto
[OptiFG]
; -------------------------------------------------------
; Enables HUD fix FSR3.1 frame generation
; Enables HUD fix FSR3.1 Frame Generation
; Might cause crashes, specially with Async
; true or false - Default (auto) is false
HUDFix=auto
@@ -352,11 +352,11 @@ UseFsr3Inputs=auto
; true or false - Default (auto) is false
Fsr3Pattern=auto
; OptiScaler will hook FidelityFX (amd_fidelityfx_dx12.dll) Api Inputs
; OptiScaler will hook FidelityFX (amd_fidelityfx_dx12.dll) API Inputs
; true or false - Default (auto) is true
EnableFfxInputs=auto
; OptiScaler will use FidelityFX Api Inputs
; OptiScaler will use FidelityFX API Inputs
; true or false - Default (auto) is true
UseFfxInputs=auto
@@ -369,8 +369,8 @@ EnableHotSwapping=auto
; -------------------------------------------------------
[Framerate]
; -------------------------------------------------------
; Frame rate limit that uses Reflex therefore the game has to support Reflex and have it enabled
; AMD users can use fakenvapi to get this feature working
; Frame rate limit that uses Reflex, therefore the game has to support Reflex and have it enabled
; AMD users can use Fakenvapi to get this feature working
; float - Default (auto) is 0.0 (disabled)
FramerateLimit=auto
@@ -387,7 +387,8 @@ BuildPipelines=auto
; true or false - Default (auto) is false
CreateHeaps=auto
;Select XeSS network model
; Select XeSS network model
; Currently doesn't seem to do anything
; 0 = KPSS | 1 = Splat | 2 = Model 3 | 3 = Model 4 | 4 = Model 5 | 5 = Model 6
; Default (auto) is 0
NetworkModel=auto
@@ -411,7 +412,7 @@ Dx11LibraryPath=auto
; 0.0 to 180.0 - Default (auto) is 60.0
VerticalFov=auto
; If vertical fov is not defined will be used to calculate vertical fov
; If Vertical FOV is not defined will be used to calculate Vertical FOV
; 0.0 to 180.0 - Default (auto) is off
HorizontalFov=auto
@@ -423,43 +424,43 @@ CameraNear=auto
; 0.0 to max float value - Default (auto) is 10000.0
CameraFar=auto
; Enables usage of camera values (near, far, fov)
; Enables usage of camera values (near, far, FOV)
; received from FSR2/3 or FFX inputs
; true or false - Default (auto) is true
UseFsrInputValues=auto
; Enables debug view for FSR3.X upscaler
; Enables Debug View for FSR3.X upscaler
; true or false - Default (auto) is false
DebugView=auto
; Selects upscaler backend for FSR3.X
; 0 = FSR 3.1.2 | 1 = FSR 2.3.2
; 0 or 1 (for now) - Default (auto) is 0
; Selects upscaler backend for FSR3.X/4
; 0 = FSR 4.0.2 | 1 = FSR 3.1.5 | 2 = FSR 2.3.4
; Depending on GPU - Default (auto) is 0 - FSR4 for RDNA4, FSR3 for the rest
UpscalerIndex=auto
; Sets velocity factor for FSR3.1.1 and above
; Sets Velocity Factor for FSR3.1.1 and above
; Value of 0.0f can improve temporal stability of bright pixels.
; 0.0 to 1.0 - Default (auto) is 1.0
VelocityFactor=auto
; Sets reactiveness scale for FSR3.1.4 and above
; Sets Reactiveness Scale for FSR3.1.4 and above
; Meant for development purpose to test if writing a larger value to reactive mask, reduces ghosting
; 0.0 to infinite - Default (auto) is 1.0
ReactiveScale=auto
; Sets shading scale for FSR3.1.4 and above
; Sets Shading Scale for FSR3.1.4 and above
; Increasing this scales fsr3.1 computed shading change value at read to have higher reactiveness.
; 0.0 to infinite - Default (auto) is 1.0
ShadingScale=auto
; Sets accumulation added per frame for FSR3.1.4 and above
; Sets Accumulation added per frame for FSR3.1.4 and above
; Corresponds to amount of accumulation added per frame at pixel coordinate where disocclusion occurred or when reactive mask value is > 0.0f.
; Decreasing this and drawing the ghosting object (IE no mv) to reactive mask with value close to 1.0f can decrease temporal ghosting.
; Decreasing this value could result in more thin feature pixels flickering.
; 0.0 to 1.0 - Default (auto) is 0.333
AccAddPerFrame=auto
; Sets minimum disocclusion accumulation for FSR3.1.4 and above
; Sets Minimum Disocclusion Accumulation for FSR3.1.4 and above
; Increasing this value may reduce white pixel temporal flickering around swaying thin objects that are disoccluding one another often.
; Too high value may increase ghosting. A sufficiently negative value means for pixel coordinate at frame N that is disoccluded,
; add fAccumulationAddedPerFrame starting at frame N+2.
@@ -476,24 +477,24 @@ UseReactiveMaskForTransparency=auto
DlssReactiveMaskBias=auto
; Enables updating of FSR3.X to FSR4
; true or false - Default (auto) is depends on GPU
; true or false - Default (auto) depends on GPU - true for RDNA4
Fsr4Update=auto
; Select FSR4 model to use
; 0 = model used for FSR AA/Quality, 5 = model used for FSR Ultra Performance
; 0 = For FSR Native AA, 1 = Ultra Quality/Quality, 2 = Balanced, 3 = Performance, 4 = DRS, 5 = Ultra Performance
; From 0 to 5 - Default (auto) is game's default
Fsr4Model=auto
; Enable FSR4 debug view visualization
; Enable FSR4 Debug View visualization
; Might consume more VRAM
; true or false - Default (auto) is false
Fsr4EnableDebugView=auto
; Enable FSR4 watermark
; Enable FSR4 Watermark
; true or false - Default (auto) is false
Fsr4EnableWatermark=auto
; Indicates input color resource uses non-linear color space
; Indicates input color resource uses Non-Linear color space
; Might improve IQ of FSR4
; true or false - Default (auto) is false
FsrNonLinearColorSpace=auto
@@ -510,7 +511,7 @@ FsrNonLinearPQ=auto
; Updates the DirectX 12 Agility SDK
; Enabling the use of FSR4 on Windows 10 in older titles like Cyberpunk 2077
; You MUST copy D3D12_OptiScaler folder next to games exe!
; You MUST copy D3D12_OptiScaler folder next to game's exe!
; true or false - Default (auto) is false
FsrAgilitySDKUpgrade=auto
@@ -546,7 +547,7 @@ FeaturePath=auto
; Override path of nvngx_dlss.dll
; Example - D:\Downloads\OptiScaler\nvngx_dlss.dll
; Default (auto) is means override disabled
; Default (auto) means override disabled
NVNGX_DLSS_Path=auto
; Set this to true to enable custom render preset overrides
@@ -554,7 +555,7 @@ NVNGX_DLSS_Path=auto
RenderPresetOverride=auto
; Render presets for quality settings
; Depends on DLSS version but most recent order is
; Depends on DLSS version, but most recent order is
; 0 = Default | 1 = A | 2 = B | 3 = C | 4 = D | 5 = E | 6 = F | 7 = G
; 8 = H | 9 = I | 10 = J | 11 = K | 12 = L | 13 = M | 14 = N | 15 = O
; Default (auto) is 0
@@ -576,7 +577,7 @@ UseGenericAppIdWithDlss=auto
[Nukems]
; -------------------------------------------------------
; Fix broken visuals in some games (mostly non-UE) on AMD GPUs under Windows
; Can cause stutters so best to use only when necessary
; Can cause stutters, so best to use only when necessary and mentioned
; true or false - Default (auto) is false
MakeDepthCopy=auto
@@ -585,7 +586,7 @@ MakeDepthCopy=auto
; -------------------------------------------------------
[Menu]
; -------------------------------------------------------
; Enables new overlay ImGui menus
; Enables new Overlay ImGui menus
; without this option OptiScaler will disable all FG features
; true or false - Default (auto) is when OptiScaler is nvngx.dll false otherwise true
OverlayMenu=auto
@@ -596,16 +597,17 @@ Scale=auto
; Shortcut key for opening menu
; For all keycode values you can check this address
; Match Description with key Value
; https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
; Integer value - Default (auto) is 0x2D -> VK_INSERT, previous default key VK_HOME is 0x24
; Integer value - Default (auto) is 0x2D -> VK_INSERT/Insert key, previous default key VK_HOME/Home key is 0x24
; -1 -> No shortcut key
ShortcutKey=auto
; Extends scaling ratio limits to 0.1 - 6.0
; Extends Scaling Ratio limits to 0.1 - 6.0
; true or false - Default (auto) is false
ExtendedLimits=auto
; Use high quality font for menu
; Use High Quality Font for Menu
; Might use more VRAM
; If you see a black overlay or experience menu related crashes with Vulkan, try disabling
; true or false - Default (auto) is true
@@ -617,11 +619,11 @@ UseHQFont=auto
; Default (auto) is Hack-Regular bundled with OptiScaler
TTFFontPath=auto
; Disables startup splash message
; Disables Startup Splash message
; true or false - Default (auto) is false
DisableSplash=auto
; Enables Fps overlay
; Enables FPS overlay
; true or false - Default (auto) is false
ShowFps=auto
@@ -629,36 +631,36 @@ ShowFps=auto
; 0.5 to 2.0 - Default (auto) is using the same scale as menu
FpsScale=auto
; Fps overlay position
; FPS overlay position
; 0 = Top Left | 1 = Top Right | 2 = Bottom Left | 3 Bottom Right
; 0 to 3 - Default (auto) is 0
FpsOverlayPos=auto
; Fps overlay type
; FPS overlay type
; 0 = Just FPS | 1 = Simple | 2 = Detailed | 3 = Detailed + Graph | 4 Full | 5 Full + Graph | 6 Reflex timings
; 0 to 6 - Default (auto) is 0
FpsOverlayType=auto
; Shortcut key for fps overlay
; Integer value - Default (auto) is 0x21 -> VK_PRIOR
; Shortcut key for FPS overlay
; Integer value - Default (auto) is 0x21 -> VK_PRIOR/Page up key
; -1 -> No shortcut key
FpsShortcutKey=auto
; Shortcut key for fps overlay type cycle
; Integer value - Default (auto) is 0x22 -> VK_NEXT
; Shortcut key for FPS overlay type cycle
; Integer value - Default (auto) is 0x22 -> VK_NEXT/Page down key
; -1 -> No shortcut key
FpsCycleShortcutKey=auto
; Enables Horizontal Fps overlay layout
; Enables Horizontal FPS overlay layout
; true or false - Default (auto) is false
FpsOverlayHorizontal=auto
; Fps Overlay background alpha
; FPS Overlay background alpha
; 0.0 to 1.0 - Default (auto) is 0.4
FpsOverlayAlpha=auto
; Shortcut key for enable/disable FG
; Integer value - Default (auto) is 0x23 -> VK_END
; Shortcut key for FG enabled/disabled
; Integer value - Default (auto) is 0x23 -> VK_END/End key
; -1 -> No shortcut key
FGShortcutKey=auto
@@ -667,21 +669,21 @@ FGShortcutKey=auto
; -------------------------------------------------------
[Spoofing]
; -------------------------------------------------------
; VerdorId to spoof
; VendorID to spoof
; 0x10de = Nvidia | 0x8086 = Intel | 0x1002 = AMD
; Integer value - Default (auto) is 0x10de
SpoofedVendorId=auto
; DeviceId to spoof
; DeviceID to spoof
; 0x2684 = 4090 | 0x56A0 = A770 | 0x7550 9070 XT
; Integer value - Default (auto) is 0x2684 (4090)
SpoofedDeviceId=auto
; Target VerdorId to be spoofed
; Target VendorID to be spoofed
; Integer value - Default (auto) is all
TargetVendorId=auto
; Target DeviceId to be spoofed
; Target DeviceID to be spoofed
; Default (auto) is all
TargetDeviceId=auto
@@ -690,13 +692,13 @@ TargetDeviceId=auto
; Default (auto) is NVIDIA GeForce RTX 4090
SpoofedGPUName=auto
; Enables GPU spoofing for Streamline even if Dxgi spoofing is disabled for the rest of the game
; Usually allows for using fakenvapi without spoofing the whole game, and sometimes DLSS/DLSSG
; Enables GPU spoofing for Streamline, even if Dxgi spoofing is disabled for the rest of the game
; Usually allows for using Fakenvapi without spoofing the whole game, and sometimes DLSS/DLSSG
; true or false - Default (auto) is true
StreamlineSpoofing=auto
; Enables Nvidia GPU spoofing for DXGI
; true or false - Default (auto) is true
; true or false - Default (auto) is true for AMD/Intel, false for Nvidia
Dxgi=auto
; Enables wrapping of DxgiFactory instead of hooking
@@ -705,7 +707,7 @@ Dxgi=auto
DxgiFactoryWrapping=auto
; Skips DXGI GPU spoofing when caller method in the list (example: slInit|slGetPluginFunction|nvapi_QueryInterface)
; Be careful this will disable spoofing for rest of the calls also does not work on Linux
; Be careful this will disable spoofing for rest of the calls, also does not work on Linux
; method names seperated with pipe "|" - Default (auto) is disabled
DxgiBlacklist=auto
@@ -725,8 +727,8 @@ VulkanExtensionSpoofing=auto
; Spoofed amount in GBs - Default (auto) is disabled
VulkanVRAM=auto
; Enables spoofing of hardware accelerated gpu scheduling
; Required for nukem's mod, lets RTX40xx series users use DLSSG without HAGS enabled
; Enables spoofing of Hardware Accelerated GPU Scheduling
; Required for Nukem's mod, also lets RTX40xx series users use DLSSG without HAGS enabled
; true or false - Default (auto) is false, unless DLSSG mod is enabled
SpoofHAGS=auto
@@ -748,13 +750,13 @@ UEIntelAtomics=auto
; Default is .\plugins
Path=auto
; OptiScaler loads *.asi files in plugins folder
; Lets OptiScaler load *.asi files in plugins folder
; true or false - Default (auto) is false
LoadAsiPlugins=auto
; Loads SpecialK64.dll from game's exe folder
; Please put a SpecialK.dxgi file next to SpecialK64.dll
; to set SpecialK's working mode otherwise it will not be activated
; to set SpecialK's working mode, otherwise it will not be activated
; BECAUSE OF STABILITY ISSUES, WILL NOT BE LOADED WHEN OPTIFG IS ENABLED
; true or false - Default (auto) is false
LoadSpecialK=auto
@@ -821,11 +823,11 @@ UseNtdllHooks=auto
; -------------------------------------------------------
[Sharpness]
; -------------------------------------------------------
; Override DLSS sharpness paramater with fixed shapness value
; Override DLSS Sharpness parameter with fixed Sharpness value
; true or false - Default (auto) is false
OverrideSharpness=auto
; Strength of sharpening,
; Strength of Sharpening,
; value range between 0.0 and 1.0 (while using upper limit is RCAS 1.3) - Default (auto) is 0.3
Sharpness=auto
@@ -834,11 +836,11 @@ Sharpness=auto
; -------------------------------------------------------
[OutputScaling]
; -------------------------------------------------------
; Enable output scaling option for Dx12 and Dx11 with Dx12 backends
; Enable Output Scaling option for Dx12 and Dx11 with Dx12 backends
; true or false - Default (auto) is false
Enabled=auto
; Output scaling ratio
; Output Scaling ratio
; 0.5 - 3.0 - Default (auto) is 1.5
Multiplier=auto
@@ -860,7 +862,7 @@ Downscaler=auto
; true or false - Default (auto) is false
Enabled=auto
; Enable motion sharpness
; Enable Motion Sharpness
; true or false - Default (auto) is false
MotionSharpnessEnabled=auto
@@ -868,7 +870,7 @@ MotionSharpnessEnabled=auto
; value range between -1.3 and 1.3 - Default (auto) is 0.4
MotionSharpness=auto
; How much a pixel should move before motion sharpness applied
; How much a pixel should move before Motion Sharpness applied
; 0.0 - 100.0 - Default (auto) is 0.0
MotionThreshold=auto
@@ -877,7 +879,7 @@ MotionThreshold=auto
; 0.0 - 100.0 - Default (auto) is 10.0
MotionScaleLimit=auto
; Enable debug highlighting for motion sharpening
; Enable Debug Highlighting for Motion Sharpening
; Reddish hue for added greenish for reduced sharpness
; true or false - Default (auto) is false
MotionSharpnessDebug=auto
@@ -904,7 +906,7 @@ LogFile=auto
; Verbosity level of file logs
; 0 = Trace / 1 = Debug / 2 = Info / 3 = Warning / 4 = Error
; Default (auto) is 2 = Info
; Default (auto) is 1 = Debug
LogLevel=auto
; Log to console (Log level is always 2 (Info) for performance reasons)
@@ -945,7 +947,7 @@ LogAsyncThreads=auto
[InitFlags]
; -------------------------------------------------------
; Force add ENABLE_AUTOEXPOSURE to init flags
; Some Unreal Engine games needs this, fixes colors specially in dark areas
; Some Unreal Engine games need this, fixes colors specially in dark areas
; true or false - Default (auto) is DLSS value
AutoExposure=auto
@@ -974,11 +976,11 @@ DisableReactiveMask=auto
; -------------------------------------------------------
[UpscaleRatio]
; -------------------------------------------------------
; Set this to true to enable the internal resolution override
; Set this to true to enable the internal Resolution Override
; true or false - Default (auto) is false
UpscaleRatioOverrideEnabled=auto
; Set the forced upscale ratio value
; Set the forced Upscale Ratio value
; Default (auto) is 1.3
UpscaleRatioOverrideValue=auto
@@ -987,11 +989,11 @@ UpscaleRatioOverrideValue=auto
; -------------------------------------------------------
[QualityOverrides]
; -------------------------------------------------------
; Set this to true to enable custom quality mode overrides
; Set this to true to enable Custom quality mode overrides
; true or false - Default (auto) is false
QualityRatioOverrideEnabled=auto
; Set custom upscaling ratio for each quality mode
; Set Custom Upscaling Ratio for each quality mode
;
; Default (auto) values:
; DLAA : 1.0
@@ -1012,11 +1014,11 @@ QualityRatioUltraPerformance=auto
; -------------------------------------------------------
[DRS]
; -------------------------------------------------------
; Set this to true to enable limiting DRS min resolution to rendering resolution
; Set this to true to enable limiting DRS min resolution to Rendering resolution
; true or false - Default (auto) is false
DrsMinOverrideEnabled=auto
; Set this to true to enable limiting DRS max resolution to rendering resolution
; Set this to true to enable limiting DRS max resolution to Rendering resolution
; true or false - Default (auto) is false
DrsMaxOverrideEnabled=auto
@@ -1061,15 +1063,15 @@ SyncInterval=auto
; -------------------------------------------------------
[Anisotropy]
; -------------------------------------------------------
; Override max anisotropy for textures
; Override max Anisotropy/Anisotropic Filtering for textures
; 2, 4, 8, 16 - Default (auto) is disabled
AnisotropyOverride=auto
; Change comparison filters to anisotropic ones
; Change comparison filters to Anisotropic ones
; true or false - Default (auto) is true
ModifyComparison=auto
; Change min/max filters to anisotropic ones
; Change min/max filters to Anisotropic ones
; true or false - Default (auto) is true
ModifyMinMax=auto
@@ -1083,11 +1085,11 @@ SkipPointFilter=auto
; -------------------------------------------------------
[Mipmap]
; -------------------------------------------------------
; Override value for mipmap lod bias
; Override value for Mipmap LOD bias
; -15.0 - 15.0 - Default (auto) is disabled
MipmapBiasOverride=auto
; Use a fixed value for lod bias
; Use a fixed value for LOD bias
; true or false - Default (auto) is false
MipmapBiasFixedOverride=auto
@@ -1095,7 +1097,7 @@ MipmapBiasFixedOverride=auto
; true or false - Default (auto) is false
MipmapBiasScaleOverride=auto
; Override all textures lod bias (normally only overriding < 0 values)
; Override all textures LOD bias (normally only overriding < 0 values)
; true or false - Default (auto) is false
MipmapBiasOverrideAll=auto
@@ -1110,14 +1112,15 @@ MipmapBiasOverrideAll=auto
CheckForUpdate=auto
; Enables blocking of Steam and Epic overlays
; Also blocks Steam Input
; true or false - Default (auto) is false
DisableOverlays=auto
; OptiScaler will try to force high performance GPU
; OptiScaler will try to force High Performance GPU
; true or false - Default (auto) is false
PreferDedicatedGpu=auto
; OptiScaler will report only first high performance gpu
; OptiScaler will report only first High Performance GPU
; true or false - Default (auto) is false
PreferFirstDedicatedGpu=auto
@@ -1138,7 +1141,7 @@ RestoreComputeSignature=auto
; true or false - Default (auto) is false
RestoreGraphicSignature=auto
; Use precompiled shaders for RCAS, Output Scaling ans Mask Bias
; Use precompiled shaders for RCAS, Output Scaling and Mask Bias
; true or false - Default (auto) is true
UsePrecompiledShaders=auto
@@ -1146,7 +1149,7 @@ UsePrecompiledShaders=auto
; For UE engine games on AMD, set it to 4 (D3D12_RESOURCE_STATE_RENDER_TARGET)
ColorResourceBarrier=auto
; For UE engine games on AMD, set it to 8 (D3D12_RESOURCE_STATE_UNORDERED_ACCESS)
MotionVectorResourceBarrier=auto
MotionVectorResourceBarrier=auto
DepthResourceBarrier=auto
ColorMaskResourceBarrier=auto
ExposureResourceBarrier=auto
+191
View File
@@ -8,6 +8,149 @@
#include <magic_enum.hpp>
static inline void ResourceBarrier(ID3D12GraphicsCommandList* InCommandList, ID3D12Resource* InResource,
D3D12_RESOURCE_STATES InBeforeState, D3D12_RESOURCE_STATES InAfterState)
{
if (InBeforeState == InAfterState)
return;
D3D12_RESOURCE_BARRIER barrier = {};
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Transition.pResource = InResource;
barrier.Transition.StateBefore = InBeforeState;
barrier.Transition.StateAfter = InAfterState;
barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
InCommandList->ResourceBarrier(1, &barrier);
}
bool FSRFG_Dx12::HudlessFormatTransfer(int index, ID3D12Device* device, ID3D12GraphicsCommandList* cmdList,
DXGI_FORMAT targetFormat, Dx12Resource* resource)
{
if (_hudlessTransfer[index].get() == nullptr || !_hudlessTransfer[index].get()->IsFormatCompatible(targetFormat))
{
LOG_DEBUG("Format change, recreate the FormatTransfer");
if (_hudlessTransfer[index].get() != nullptr)
_hudlessTransfer[index].reset();
_hudlessTransfer[index] = std::make_unique<FT_Dx12>("FormatTransfer", device, targetFormat);
return false;
}
if (_hudlessTransfer[index].get() != nullptr &&
_hudlessTransfer[index].get()->CreateBufferResource(device, resource->GetResource(),
D3D12_RESOURCE_STATE_UNORDERED_ACCESS))
{
ResourceBarrier(cmdList, resource->GetResource(), resource->state,
D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
_hudlessTransfer[index].get()->Dispatch(device, cmdList, resource->GetResource(),
_hudlessTransfer[index].get()->Buffer());
ResourceBarrier(cmdList, resource->GetResource(), D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE,
resource->state);
resource->copy = _hudlessTransfer[index].get()->Buffer();
return true;
}
return false;
}
bool FSRFG_Dx12::UIFormatTransfer(int index, ID3D12Device* device, ID3D12GraphicsCommandList* cmdList,
DXGI_FORMAT targetFormat, Dx12Resource* resource)
{
if (_uiTransfer[index].get() == nullptr || !_uiTransfer[index].get()->IsFormatCompatible(targetFormat))
{
LOG_DEBUG("Format change, recreate the FormatTransfer");
if (_uiTransfer[index].get() != nullptr)
_uiTransfer[index].reset();
_uiTransfer[index] = std::make_unique<FT_Dx12>("FormatTransfer", device, targetFormat);
return false;
}
if (_uiTransfer[index].get() != nullptr &&
_uiTransfer[index].get()->CreateBufferResource(device, resource->GetResource(),
D3D12_RESOURCE_STATE_UNORDERED_ACCESS))
{
ResourceBarrier(cmdList, resource->GetResource(), resource->state,
D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
_uiTransfer[index].get()->Dispatch(device, cmdList, resource->GetResource(),
_uiTransfer[index].get()->Buffer());
ResourceBarrier(cmdList, resource->GetResource(), D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE,
resource->state);
resource->copy = _uiTransfer[index].get()->Buffer();
return true;
}
return false;
}
int GetFormatPrecisionGroup(FfxApiSurfaceFormat format)
{
switch (format)
{
case FFX_API_SURFACE_FORMAT_R32G32B32A32_TYPELESS:
case FFX_API_SURFACE_FORMAT_R32G32B32A32_FLOAT:
case FFX_API_SURFACE_FORMAT_R32G32B32_FLOAT:
return 0;
case FFX_API_SURFACE_FORMAT_R16G16B16A16_TYPELESS:
case FFX_API_SURFACE_FORMAT_R16G16B16A16_FLOAT:
return 1;
case FFX_API_SURFACE_FORMAT_R8G8B8A8_TYPELESS:
case FFX_API_SURFACE_FORMAT_R8G8B8A8_UNORM:
case FFX_API_SURFACE_FORMAT_B8G8R8A8_TYPELESS:
case FFX_API_SURFACE_FORMAT_B8G8R8A8_UNORM:
return 2;
case FFX_API_SURFACE_FORMAT_R8G8B8A8_SNORM:
return 3;
case FFX_API_SURFACE_FORMAT_R8G8B8A8_SRGB:
case FFX_API_SURFACE_FORMAT_B8G8R8A8_SRGB:
return 4;
case FFX_API_SURFACE_FORMAT_R11G11B10_FLOAT:
return 5;
case FFX_API_SURFACE_FORMAT_R10G10B10A2_TYPELESS:
case FFX_API_SURFACE_FORMAT_R10G10B10A2_UNORM:
return 6;
case FFX_API_SURFACE_FORMAT_R9G9B9E5_SHAREDEXP:
return 7;
// we don't accept the following formats
case FFX_API_SURFACE_FORMAT_R32G32B32A32_UINT:
case FFX_API_SURFACE_FORMAT_R32G32_FLOAT:
case FFX_API_SURFACE_FORMAT_R8_UINT:
case FFX_API_SURFACE_FORMAT_R32_UINT:
case FFX_API_SURFACE_FORMAT_R16G16_UINT:
case FFX_API_SURFACE_FORMAT_R16G16_SINT:
case FFX_API_SURFACE_FORMAT_R16G16_FLOAT:
case FFX_API_SURFACE_FORMAT_R16_FLOAT:
case FFX_API_SURFACE_FORMAT_R16_UINT:
case FFX_API_SURFACE_FORMAT_R16_UNORM:
case FFX_API_SURFACE_FORMAT_R16_SNORM:
case FFX_API_SURFACE_FORMAT_R8_UNORM:
case FFX_API_SURFACE_FORMAT_R8G8_UNORM:
case FFX_API_SURFACE_FORMAT_R8G8_UINT:
case FFX_API_SURFACE_FORMAT_R32_FLOAT:
case FFX_API_SURFACE_FORMAT_UNKNOWN:
default:
return -1;
}
}
typedef struct FfxSwapchainFramePacingTuning
{
float safetyMarginInMs; // in Millisecond. Default is 0.1ms
@@ -882,11 +1025,59 @@ void FSRFG_Dx12::SetResource(Dx12Resource* inputResource)
}
if (type == FG_ResourceType::UIColor)
{
auto format = State::Instance().currentSwapchainDesc.BufferDesc.Format;
auto uiFormatGroup = GetFormatPrecisionGroup(
(FfxApiSurfaceFormat) ffxApiGetSurfaceFormatDX12(fResource->GetResource()->GetDesc().Format));
auto scFormatGroup = GetFormatPrecisionGroup((FfxApiSurfaceFormat) ffxApiGetSurfaceFormatDX12(format));
if (uiFormatGroup == -1 || scFormatGroup == -1 || uiFormatGroup != scFormatGroup)
{
if (!UIFormatTransfer(fIndex, _device, GetUICommandList(fIndex), format, fResource))
{
LOG_WARN("Skipping UI resource due to format mismatch! UI: {}, swapchain: {}", uiFormatGroup,
scFormatGroup);
_frameResources[fIndex][type] = {};
return;
}
else
{
fResource->validity = FG_ResourceValidity::UntilPresent;
}
}
_noUi[fIndex] = false;
}
else if (type == FG_ResourceType::Distortion)
_noDistortionField[fIndex] = false;
else if (type == FG_ResourceType::HudlessColor)
{
auto format = State::Instance().currentSwapchainDesc.BufferDesc.Format;
auto hudlessFormatGroup = GetFormatPrecisionGroup(
(FfxApiSurfaceFormat) ffxApiGetSurfaceFormatDX12(fResource->GetResource()->GetDesc().Format));
auto scFormatGroup = GetFormatPrecisionGroup((FfxApiSurfaceFormat) ffxApiGetSurfaceFormatDX12(format));
if (hudlessFormatGroup == -1 || scFormatGroup == -1 || hudlessFormatGroup != scFormatGroup)
{
if (!HudlessFormatTransfer(fIndex, _device, GetUICommandList(fIndex), format, fResource))
{
LOG_WARN("Skipping hudless resource due to format mismatch! hudless: {}, swapchain: {}",
hudlessFormatGroup, scFormatGroup);
_frameResources[fIndex][type] = {};
return;
}
else
{
fResource->validity = FG_ResourceValidity::UntilPresent;
}
}
_noHudless[fIndex] = false;
}
// For FSR FG we always copy ValidNow
if (fResource->validity == FG_ResourceValidity::ValidButMakeCopy)
+9
View File
@@ -4,6 +4,8 @@
#include <proxies/FfxApi_Proxy.h>
#include <shaders/format_transfer/FT_Dx12.h>
#include <dx12/ffx_api_dx12.h>
#include <ffx_framegeneration.h>
@@ -18,6 +20,9 @@ class FSRFG_Dx12 : public virtual IFGFeature_Dx12
uint32_t _maxRenderWidth = 0;
uint32_t _maxRenderHeight = 0;
std::unique_ptr<FT_Dx12> _hudlessTransfer[BUFFER_COUNT];
std::unique_ptr<FT_Dx12> _uiTransfer[BUFFER_COUNT];
ID3D12GraphicsCommandList* _fgCommandList[BUFFER_COUNT] {};
ID3D12CommandAllocator* _fgCommandAllocator[BUFFER_COUNT] {};
@@ -53,6 +58,10 @@ class FSRFG_Dx12 : public virtual IFGFeature_Dx12
bool ExecuteCommandList(int index);
bool Dispatch();
void ConfigureFramePaceTuning();
bool HudlessFormatTransfer(int index, ID3D12Device* device, ID3D12GraphicsCommandList* cmdList,
DXGI_FORMAT targetFormat, Dx12Resource* resource);
bool UIFormatTransfer(int index, ID3D12Device* device, ID3D12GraphicsCommandList* cmdList, DXGI_FORMAT targetFormat,
Dx12Resource* resource);
protected:
void ReleaseObjects() override final;
+2 -1
View File
@@ -924,7 +924,8 @@ void XeFG_Dx12::SetResource(Dx12Resource* inputResource)
FlipResource(fResource);
}
if (type == FG_ResourceType::Depth && !Config::Instance()->FGXeFGDepthInverted.value_or_default())
if (_device != nullptr && type == FG_ResourceType::Depth &&
!Config::Instance()->FGXeFGDepthInverted.value_or_default())
{
if (_depthInvert.get() == nullptr)
{
+25
View File
@@ -5,6 +5,7 @@
#include <spoofing/Dxgi_Spoofing.h>
#include <wrapped/wrapped_swapchain.h>
#include <magic_enum.hpp>
#include <detours/detours.h>
// #define DETAILED_SC_LOGS
@@ -187,6 +188,22 @@ HRESULT DxgiFactoryHooks::CreateSwapChain(IDXGIFactory* realFactory, IUnknown* p
pDesc->BufferDesc.Width, pDesc->BufferDesc.Height, (UINT) pDesc->BufferDesc.Format, pDesc->BufferCount,
pDesc->Flags, (SIZE_T) pDesc->OutputWindow, pDesc->Windowed, _skipFGSwapChainCreation);
LOG_DEBUG("pDesc->BufferCount: {}", pDesc->BufferCount);
LOG_DEBUG("pDesc->BufferDesc.Width: {}", pDesc->BufferDesc.Width);
LOG_DEBUG("pDesc->BufferDesc.Format: {}", magic_enum::enum_name(pDesc->BufferDesc.Format));
LOG_DEBUG("pDesc->BufferDesc.Height: {}", pDesc->BufferDesc.Height);
LOG_DEBUG("pDesc->BufferDesc.RefreshRate.Denominator: {}", pDesc->BufferDesc.RefreshRate.Denominator);
LOG_DEBUG("pDesc->BufferDesc.RefreshRate.Numerator: {}", pDesc->BufferDesc.RefreshRate.Numerator);
LOG_DEBUG("pDesc->BufferDesc.Scaling: {}", magic_enum::enum_name(pDesc->BufferDesc.Scaling));
LOG_DEBUG("pDesc->BufferDesc.ScanlineOrdering: {}", magic_enum::enum_name(pDesc->BufferDesc.ScanlineOrdering));
LOG_DEBUG("pDesc->Windowed: {}", pDesc->Windowed);
LOG_DEBUG("pDesc->SampleDesc.Count: {}", pDesc->SampleDesc.Count);
LOG_DEBUG("pDesc->SampleDesc.Quality: {}", pDesc->SampleDesc.Quality);
LOG_DEBUG("pDesc->BufferUsage: {}", (UINT) pDesc->BufferUsage);
LOG_DEBUG("pDesc->Flags: {}", pDesc->Flags);
LOG_DEBUG("pDesc->OutputWindow: {:X}", (UINT64) pDesc->OutputWindow);
LOG_DEBUG("pDesc->SwapEffect: {}", magic_enum::enum_name(pDesc->SwapEffect));
if (State::Instance().activeFgOutput == FGOutput::XeFG &&
Config::Instance()->FGXeFGForceBorderless.value_or_default())
{
@@ -331,6 +348,10 @@ HRESULT DxgiFactoryHooks::CreateSwapChain(IDXGIFactory* realFactory, IUnknown* p
(size_t) pDevice);
}
}
else
{
LOG_ERROR("CreateSwapChain failed: {:X}", (UINT) result);
}
return result;
}
@@ -554,6 +575,10 @@ HRESULT DxgiFactoryHooks::CreateSwapChainForHwnd(IDXGIFactory2* realFactory, IUn
State::Instance().currentWrappedSwapchain = *ppSwapChain;
}
else
{
LOG_ERROR("CreateSwapChainForHwnd failed: {:X}", (UINT) result);
}
}
if (firstCall)
+8
View File
@@ -1049,6 +1049,10 @@ void ffxPresentCallback()
fg->SetResource(&hudless);
}
}
else
{
LOG_ERROR("Present callback failed: {:X}", (UINT) result);
}
currentBuffer->Release();
@@ -1132,6 +1136,10 @@ void ffxPresentCallback()
fg->SetResource(&hudless);
}
}
else
{
LOG_ERROR("Frame Generation callback failed: {:X}", (UINT) result);
}
currentBuffer->Release();
+3 -1
View File
@@ -163,7 +163,7 @@ static const QuirkEntry quirkTable[] = {
// Collection, Warhammer 40,000: Darktide, Dying Light 2 Stay Human, Dying Light: The Beast, Observer: System Redux,
// Sackboy: A Big Adventure, Hellblade: Senua's Sacrifice, Pumpkin Jack, Metro Exodus Enhanced Edition, Rise of the
// Ronin, DYNASTY WARRIORS: ORIGINS, Crysis Remastered, Crysis 2 Remastered, Mortal Shell, Sekiro: Shadows Die
// Twice (for SekiroTSR mod), The Medium, NINJA GAIDEN 4 (+ WinGDK)
// Twice (for SekiroTSR mod), The Medium, NINJA GAIDEN 4 (+ WinGDK), Dead Space Remake, God of War (2018)
QUIRK_ENTRY("witcher3.exe", GameQuirk::DisableDxgiSpoofing),
QUIRK_ENTRY("alanwake2.exe", GameQuirk::DisableDxgiSpoofing),
QUIRK_ENTRY("crysis3remastered.exe", GameQuirk::DisableDxgiSpoofing),
@@ -189,6 +189,8 @@ static const QuirkEntry quirkTable[] = {
QUIRK_ENTRY_UE(medium, GameQuirk::DisableDxgiSpoofing),
QUIRK_ENTRY("ninjagaiden4-steam.exe", GameQuirk::DisableDxgiSpoofing),
QUIRK_ENTRY("ninjagaiden4-wingdk.exe", GameQuirk::DisableDxgiSpoofing), // NG4 WinGDK
QUIRK_ENTRY("dead space.exe", GameQuirk::DisableDxgiSpoofing),
QUIRK_ENTRY("gow.exe", GameQuirk::DisableDxgiSpoofing),
// FSR2 only, no spoof needed
//