All-in-one solution for smooth FPS-unlocked gameplay. Includes a physics fix, borderless fullscreen performance boost, refresh rate control, highly configurable frame rate limiting, various bugfixes and more.
This author has not credited anyone else in this file
Donation Points system
Please log in to find out whether this mod is receiving Donation Points
Changelogs
Version 0.5.16
Fixed skyrim's ini settings (bFull Screen, bBorderless) having no effect on 1130 even when the plugin's overrides where commented out
Version 0.5.15
Fixed a ctd caused by the loadscreen filter, affecting 1.6.1130 (lilmetal)
Version 0.5.14
Fixed logging issues on GOG (introduced in 0.5.13)
Version 0.5.13
Updated for Skyrim SE 1.6.1130
Version 0.5.12
Updated for Skyrim SE GOG 1.6.659
Version 0.5.11
Updated for game version 1.6.629
Version 0.5.10
Fixed AutoCenter having no effect unless LockCursor was enabled
Compiled with vs2022 and updated dependencies
Version 0.5.9
Fixed gamepad cursor speed patch on AE (see notes above GamepadCursorSpeedFix option)
Version 0.5.8
Added PhysicsDamagePatch (scale physics damage based on frametime) and PhysicsDamageMult (reduce or disable the damage), see notes in config.
Version 0.5.7b
Update for 1.6.342 (beth changed one of the functions the plugin patches, the address library is of no use in such cases)
Version 0.5.6b
Adjusted freecam movement speed to approximate vanilla at 60 FPS (FreeCameraMovementSpeedFix)
Version 0.5.5b
AE: fixed crash caused by SetExpressionOverride patch
Version 0.5.4b
Previous version had all control fixes turned off by default in the .ini (optional conf. file not affected)
Fixed an error reporting message box having swapped caption and text.
Version 0.5.3b
Fix CTD when entering furniture caused by a bad patch in the previous version
Version 0.5.2b
Fixed DialogueLookSmoothEdge (off by default) taking effect outside of the dialogue menu. This caused slowed mouse movement if the player exited a menu and the cursor was near the edge of the screen.
Version 0.5.1b
AE version independence - updated to use address library
Changed MaxFrameLatency setting to 0 (bethesda default value is used). This was done because the default was changed from 2 (SE) to 1 (AE). AE users who maintain their own plugin configuration should make sure that MaxFrameLatency is set to either 0 or 1.
Version 0.5.0b
Anniversary Edition support (beta)
Added VerticalLookSensitivityFix and SlowTimeCameraMovementFix (EngineFixes)
Version 0.4.17
Fixed a mistake in swap chain present hook (introduced in 0.4.16)
Version 0.4.16
Fixed an issue where the OSD would not initialize if the d3d device creation call returned a non-fatal status code.
Inform the user with a message box popup if device initialization fails.
Version 0.4.15-1
0.4.15: Added option to disable player/actor fade when camera intersects the body (DisablePlayerFade, DisableActorFade - both off by default)
0.4.15: Log if an exception occurs during on-screen display initialization
0.4.15-1: Fixed cursor unlocking when steam overlay is deactivated
Version 0.4.14
Untied dialogue look speed from framerate (DialogueLookSpeedFix)
Untied gamepad cursor speed from framerate (GamepadCursorSpeedFix)
Untied lockpick mouse rotation speed from framerate (LockpickRotationSpeedFix)
Untied free camera movement speed and vertical sensitivity from framerate (FreeCameraVerticalSensitivityFix, FreeCameraMovementSpeedFix)
Added option to gradually increase dialogue look speed as the cursor approaches the edge of the screen (DialogueLookSmoothEdge, off by default)
Added option to disable loadscreens (all or only from certain plugins, see LoadScreenFilter - off by default)
Added option to remove lens flare from weathers (DisableWeatherLensFlare, off by default)
Version 0.4.13
Added HAVOK performance mode option for low-end CPUs (off by default, see PerformanceMode in HAVOK section)
Reverted some default config values to earlier versions
Version 0.4.12
Untied auto vanity camera rotation speed from framerate
Use SkyrimPrefs.ini display mode settings by default (Fullscreen and Borderless options have been commented out)
Disabled borderless vsync-off feature by default (EnableTearing)
Version 0.4.11
Fall back to SkyrimPrefs.ini display settings if commented out (Fullscreen and Borderless options) to allow configuring via launcher (Enderal SE)
Version 0.4.10-1
Untied map keyboard movement speed from framerate. (MapMoveKeyboardSpeedFix)
Fixed diagonal map keyboard movement speed
Added custom configuration file support (create SSEDisplayTweaks_Custom.ini and put any settings you don't want overwritten in it)
0.4.10-1: fixed an issue with the trampoline
Version 0.4.9-1
Further improved and fixed some issues with the framerate limiter
Added FramerateLimitMode option - determines if the limiter is placed before or after frame presentation, can affect performance while limited (see the config file)
Version 0.4.9
General improvements to the framerate limiter - most notably it consumes way less CPU time while waiting for frametime to hit the target and minimizes the chance of missing the deadline
Fixed some minor issues with the on-screen display
Version 0.4.8-3
Added options to set and scale the resolution (Resolution, ResolutionScale)
Added options for positioning and auto-centering the game window (AutoCenter, OffsetX, OffsetY). Note that AutoCenter is on by default.
OSD: added an indicator to warn the player if the scripting engine is under excessive load (OSDWarnVMOverstressed, read the option annotation in config)
OSD: added VRAM usage statistics for diagnosing memory shortage issues (not the same stats as shown in task manager or RTSS, read more in config - OSD section)
OSD: properly scale text when resolution doesn't match window size
BorderlessUpscale now on by default - has no effect at native resolution
Main menu locked to 60 fps by default
Various minor optimizations and improvements
0.4.8-1 hotfix: OSD combo key was ignored
0.4.8-2: Improved menu event handler efficiency
0.4.8-3: Fixed a SKSE trampoline allocation underflow bug which may cause the plugin to fail during initialization. Only applies if you're using SKSE 2.0.17 or earlier.
Version 0.4.7
Minor tweaks and recompiled for Windows 7 support
Version 0.4.6
Fixed an issue where iLocation X and iLocation Y options would be ignored when upscaling
Several minor fixes and improvements
Version 0.4.5
Untie first person horizontal look sensitivity from framerate when sitting down
Use SKSE's trampoline interface when available
Version 0.4.4
Fixed an issue where LoadingScreenLimitExtraTime wouldn't apply unless LoadingScreenLimitExtraTimePostLoad > 0
Fixed a thread safety issue with framerate limit switching
Adjusted default .ini options (FramerateLimit:Render now matches MaximumFramerate:Havok)
Updated to latest DirectX toolkit
Version 0.4.3
Fixed a rare issue where the cursor wouldn't lock if the game window was out of focus on start
Fixed menu event sinks getting added too early
Third person movement fix is now on by default
Version 0.4.2
Fixed an issue where the game would reset to desktop refresh rate when alt-tabbing
Added script execution budget scaling
Added on-screen display
Misc. fixes and improvements
Version 0.4.1
Added safeguards to prevent the user selecting an unsupported swap effect
Query DXGI capabilities and select best available swap effect
Changed default mode to borderless fullscreen
Version 0.3.15
Changed how ForceMaxTimeCalc works and updated option info in config. It's now on by default.
Version 0.3.14
Added engine bugfix for player controls not working third person
Version 0.3.13
Added exclusive fullscreen scaling mode option, fixed game window position when upscaling (ensure that the game window remains on the same monitor it started)
Version 0.3.12
Disabled buffer resizing by default, reduced amount of memory reserved for the trampoline, address library now works when SSE executable name is changed
Version 0.3.11
Properly apply modified flags when the game resizes swap chain buffers (fixes issues with reshade)
Version 0.3.10
Fixed possible crash with ForceMaxTimeCalc=true, minor fixes and improvements for upscaling
Version 0.3.9
Added borderless upscale option
Version 0.3.8
Fixed maximum frame latency option (had no effect in previous versions)
Version 0.3.7
Added option to force minimizing game window on alt-tab, update cursor lock if window position changes
Version 0.3.6
Physics fix for Civil War quests
Version 0.3.5
Added 3 more UI framerate limiting options, allow explicit uncaps for limits
Version 0.3.4
Added VSync-off switches for individual framerate limiting options
Version 0.3.3
Version independent, added more UI framerate limiting options
Version 0.2.12
Workaround for the game dumping display mode overrides (Fullscreen and Borderless options) to SkyrimPrefs.ini
Version 0.2.11
Fixed the framerate not getting unlocked (bLockFramerate=0) when limits were not set
Version 0.2.10
Fixed an issue with certain OSDs in borderless mode with tearing enabled
Version 0.2.9
Fixed a corner case issue where VSync wouldn't turn off when UI limits were defined in borderless mode with tearing enabled
Version 0.2.8
Fixed Alternate Conversation Camera letterbox feature conflict
Version 0.2.7
Fixed CTD in borderless mode with EnableTearing=true, adjusted config defaults
Donations
No donations accepted
Overview
A collection of tweaks and fixes for a smoother gameplay experience. SKSE64 plugin.
Main features
Support for 'DXGI flip model', a DirectX feature which greatly improves borderless fullscreen mode performance and enables features which were previously only available in exclusive mode.
A collection of various framerate related bugfixes, including a functional and performance optimized physics fix (works during civil war quests, compatible with everything).
Ability to disable VSync in borderless fullscreen mode (with DXGI flip model enabled).
Refresh rate uncap for exclusive fullscreen mode.
Framerate limiting with separate options for the UI, map, journal, loading screen, ...
Run at any resolution in borderless fullscreen mode (borderless upscaling)
Important
This plugin disables Skyrim's built-in framerate limiter and replaces it with its own. The limit is configurable in SSEDisplayTweaks.ini, FramerateLimit option (240 FPS by default). You may also use external tools or the limiter built into graphics drivers.
Note that fullscreen and borderless options in the launcher (bFull Screen and bBorderless in SkyrimPrefs.ini) have no effect, if you wish to change the display mode it must be set in SSEDisplayTweaks.ini (Fullscreen and Borderless options). For example if you want to switch to exclusive fullscreen, set Fullscreen=true, for windowed mode Fullscreen=false and Borderless=false, etc..
As of version 0.4.11 SkyrimPrefs.ini display mode settings will be used if 'Fullscreen' or 'Borderless' is commented out in SSEDisplayTweaks.ini. Currently the default configuration still overrides the display mode, defaulting to borderless fullscreen.
'Fullscreen' and 'Borderless' options are commented out since 0.4.12.
Performance
DXGI flip model can bypass desktop composition (DWM) and send frames directly to the screen, making windowed mode perform just as good or better than exclusive with less stutter, reduced input lag and higher framerates. Another benefit is better integration with features like HDR and G-Sync. The plugin will detect if flip is supported on your system and automatically select the best available option (if necessary you can configure it manually, see SwapEffect option in the config).
Flip is supported since Windows 8.1, if you're running an older version use exclusive fullscreen for better performance.
Lowering frame latency may also reduce stutter (significantly in some cases), there's a detailed explanation above MaxFrameLatency option in the config.
Bugfixes
The havok fix adjusts timing values based on framerate to prevent physics from spazzing out at high framerates. Several other fixes are included:
ThirdPersonMovementFix - Fixes an issue where you're not able to move in third person at high framerates.
MapMoveKeyboardSpeedFix - Untie map keyboard movement speed from framerate.
SittingHorizontalLookSensitivityFix - Untie first person horizontal look sensitivity from framerate when sitting down
AutoVanityCameraSpeedFix - Untie auto vanity camera rotation speed from framerate.
DialogueLookSpeedFix - Untie dialogue look speed from framerate.
GamepadCursorSpeedFix - Untie gamepad cursor speed from framerate.
LockpickRotationSpeedFix - Untie lockpick mouse rotation speed from framerate.
FreeCameraVerticalSensitivityFix - Untie free camera vertical sensitivity from framerate.
FreeCameraMovementSpeedFix - Untie free camera movement speed from framerate.
LockCursor - Locks mouse cursor to game window, preventing scrolling on secondary monitors.
PhysicsDamagePatch - Adjust amount of damage dealt when hit by physics objects based on frametime.
FreeCameraVerticalSensitivityFix - Untie free camera vertical sensitivity from framerate (same patch as in EngineFixes)
FreeCameraMovementSpeedFix - Untie free camera movement speed from framerate (same patch as in EngineFixes)
Non-optional:
(Exclusive fullscreen) Fixes refresh rate resetting to desktop settings when alt-tabbing.
Regarding the so-called "high fps script timing issue" which people are eager to parrot on various forums - there is none. Just the opposite, very low and/or very unstable framerates are far more likely to cause issues with the VM. If the VM has problems at higher framerates it's a symptom of an underlying issue. Ideally it should do far better at 90-144 FPS as it would locked at 60. The built in on-screen display can detect and warn you if the scripting engine is overstressed.
Framerate limiter
Allows configuring separate limits for individual UI menus. You can also force vsync on/off for each menu. Mainly useful for uncapping framerate in the journal/system to speed up MCM while maintaining a reasonable limit in-game. See UIFramerateLimit* options in the Render section for more.
On-screen display (OSD)
The OSD can be configured to show current FPS, frame time, frame counter and VRAM consumption based on OS-allotted budget (read more in the config). It can also be used as a first step in diagnosing script-related issues since it shows a warning when the scripting engine becomes overstressed.
It's normal for the scripting engine to become overstressed for short periods, for example if after fast travelling a bunch of events fire at once the indicator might briefly show up which is nothing to worry about. However if it's constantly showing or is accompanied by sharp FPS drops, you've got a problem. Usually poorly made and heavily scripted mods are to blame. Examine the stack to see what's going on.
Configuration
The configuration file has detailed documentation on each available option, you can check it out here before downloading.
To avoid losing custom configuration after an update create SSEDisplayTweaks_Custom.ini in Data\SKSE\Plugins. Any options found in that file will override the main configuration.
Other
I highly recommend installing Engine Fixes. It includes a fix which unties vertical look sensitivity from framerate and form/tree lod reference caching which can give a massive FPS boost in certain areas.
Compatibility
Incompatible with Havok Fix plugin.
ENB: ForceVSync is incompatible with borderless V-Sync off feature (EnableTearing), if you have it enabled set ForceVSync=false in enblocal.ini, and configure VSync options in SSEDisplayTweaks.ini instead. Note that it otherwise makes no difference where V-Sync is enabled, ENB does not have its own implementation - ForceVSync is there for convenience.
If you want to run uncapped and use ENB, make sure EnableFPSLimit=false in enblocal.ini and check that you're not limited elsewhere (RTSS, driver control panel, etc..). This plugin lifts the framerate limit in the engine, it cannot control other plugins, drivers or external applications.
If the game won't start properly (music plays and stuck on the main menu) it's because something else is overriding Skyrim's VSync settings, either turn it off in the plugin config (EnableVSync=false and EnableTearing=false) or disable the conflicting software.
If you're using borderless upscaling and experiencing issues with ENB effects, set DisableBufferResizing=true in the Render section.
Credits
SKSE team and Ryan (CommonLibSSE) for all their reverse engineering work.