23.8.26
- Merge pull request #80 from Aemony/main
- Bypass EAC for Armored Core VI
- Merge pull request #72 from Nustat0/dgvoodoo-d3d12
- Fixed GUI not showing up when bootstrapping dgVoodoo (D3D12)
23.8.22
- Updated HDR Profile 0 to use .96 gamma by default
- Changed HDR Gamut Expansion to use D65 white instead of D60
23.8.21
- Updated HDR Profile 0 for new gamut unclamped HDR processing
This profile targets 534 nits
- Moved the old HDR Profile 0 defaults to Profile 1 (570 nits)
- Disabled Raw Input caching because it breaks keyboard input in some games
23.8.19.1
- Fixed Baldur's Gate 3 game detection only testing the Vulkan executable
- Fixed Baldur's Gate 3 alt-tab flakiness (do not use Multitasking On Top)
23.8.19
- Removed the Energy Efficiency section from the Framerate Limiter / Advanced
control panel, unless the user has an AMD CPU. - Removed the experimental tuning knobs for busy-wait ratio; they are not
needed on AMD CPUs and will be brought back in the future if Intel's
equivalent MWAITX instruction is integrated into SK.
23.8.18.3
- Handle D3D11 implementations where ID3D11Device1::GetImmediateContext1 is
not a vftable alias to ID3D11Device::GetImmediateContext - If a game raises multiple exceptions from the same address more than 3 times,
it will stop being logged unless log level is >= 1. - Removed log spam for shader cache collisions due to games compiling the same
shader on multiple threads unless log level is >= 1.
23.8.18.2
- Decreased color gamut on SK's HDR UI slightly
23.8.18.1
- Assign *pcbSize the same value as GetRawInputData returns to fix Fallout 4
23.8.18
- Optimized Unreal Engine's use of Raw Input (2 calls per-data polled)
- Removed black point compensation from SK's HDR UI since EDID info is wrong
- Increased color gamut on SK's HDR UI
23.8.17.2
- Disable PreventEnumDevices option by default in NieR Replicant
- Destroy framerate limiter and stats when a tracked SwapChain is destroyed
- Shutdown framepacing statistics thread when framerate limiter is destroyed
23.8.17.1
-
Optimized NVIDIA's Vulkan/DXGI interop to use a single ID3D11Device rather
than destroying it and creating a new one every time a window is resized.This is necessary in 32-bit Vulkan games (i.e. DXVK) to prevent running
out of memory during resolution changes.- It also ensures that switching games in Yuzu works without having to
completely restart the emulator when using NVIDIA's interop.
- It also ensures that switching games in Yuzu works without having to
23.8.17
- Implicitly force windowed mode if "Render in Background" is configured, to
prevent Fullscreen Exclusive games from not responding when Alt-Tabbing
back in.
23.8.16.2
- Fixed mouse input not tracking in Yuzu's multi-window mode and in some
Fullscreen Exclusive games
23.8.16.1
- Avoid calling ID3D11DeviceContext::UpdateSubresource (...) twice sometimes
- Forward the return address to SK_D3D11_UpdateSubresource_Impl so that texture
cache invalidation is attributed to the correct DLL in log files
23.8.16
- SK::Diagnostics::CrashHandler::InitSyms (...) no longer implicitly installs
SK's unhandled exception filter if handle_crashes is set to false
23.8.15.3
- Properly handle API name change on AMD Vk interop (D3D12 SwapChain)
23.8.15.2
- Do not cache D3D12 SwapChains when AMD's Vulkan interop is detected
- Change API name to Vulkan instead of D3D12 when using AMD's Vulkan interop
23.8.15.1
- Disable SwapDeviceContextState because it causes the Steam Overlay to crash
23.8.15
- Fixed handling of WM_NCACTIVATE when borderless is enabled causing WatchDogs2
to think its window is always in the background - Added nullptr checks to various ID3D11DeviceContext hooks
- Switched D3D11 stateblock code to use SwapDeviceContextState (...) for
immediate contexts when supported by the driver
23.8.14.3
- Game window is back to being considered active by default, because otherwise
SDL2 thinks no input devices are attached
23.8.14.2
- Game window is initially considered inactive to prevent things like
confining the mouse cursor to the game window from applying at startup
when the game window is not in the foreground - Fixed D3D11 Immediate Device Contexts being wrapped twice in some cases
23.8.14.1
- Always wrap D3D11 Immediate Device Contexts, because NV's DXGI/Vk interop
breaks during window resize if there is no immediate context to flush - Improved thread safety when reporting unexpected COM QueryInterface IIDs
23.8.14
- Moved saturation back to applying after Perceptual Boost to fix hue shift
- Fixed incorrect HDR gamut overshoot visualization due to unnormalized xyY color
23.8.13.3
- Changed Perceptual Boost back to Rec709; accidentally left in 2020 in .2
- Fixed potential crash in PresentMon if presentation stalls long enough and
pLast is nullptr
23.8.13.2
- Added GDeflate support and usage tracking for DirectStorage titles
23.8.13.1
-
Apply saturation and gamma before Perceptual Boost
Default presets have been changed to 100% saturation to compensate for
MASSIVE loss in color gamut
23.8.13
- Tales of Vesperia defaults to D3D11 Deferred Mode for DoF disable to work
23.8.12.3
- Added HDR "Import" button to HDR widget and changed behavior of "Reset"
- Reload Global\hdr.ini whenever "Import" is used to allow manual changes
23.8.12.2
- Fixed various D3D11 render state tracking related features not working in
Tales of Vesperia and Yakuza 0
23.8.12.1
- Minor tweak to implicit window focus on foreground status
- Fixed Perceptual Boost not being enabled by default in HDR Profile 1
23.8.12
- Optimized D3D11 render state tracker code for wrapped/hooked D3D11 device
interfaces.
23.8.11.3
- Optimized D3D11 HDR processing pipeline by eliminating an extra texture copy
when previous frame images are not needed to mitigate NaN (99% of games).
23.8.11.2
- Fix Alt-Tab problem in Baldur's Gate 3 and any other game that ignores
WM_SETFOCUS when alt-tabbing back in.
23.8.11.1
- Optimized HDR shader slightly by skipping NaN / Infinity removal on the input
image, and only performing it before clamping the output to Rec 2020.
23.8.11
-
Added HDR processing time (GPU execution) to HDR widget in D3D11-based modes
-
Added new Profile 1 default values, this profile has less black crush and
improves UI/midtone visibility BUT the value on the luminance slider is
not accurate.If you want to adjust Profile 1, familiarize yourself with using the
tonemap visualization mode (after profiling display).- The luminance slider can't calculate the light output for this profile.
23.8.10.1
- Allow games to use dxdiagn.dll at startup as default policy, the ones that
do (mostly Ubisoft) will take a good minute or two to start because they're
collecting your hardware info using dxdiag EVERY TIME you start the game.
23.8.10
- Fixed potential crashes in newer Unity engine games that use
Buffered Raw Input.
23.8.9.2
- Fixed mouse input not working in control panel when Disabled to Game.
23.8.9.1
- Fixed mouse input not working in control panel in emulators like Yuzu
23.8.9
-
Added keybinding to use the previously gamepad-only "hide all widgets"
- NOTE: This is actually a toggle and hidden widgets will be restored
by pressing the keybind a second time.
- NOTE: This is actually a toggle and hidden widgets will be restored
-
If users has "hide all widgets" (LT+RT while control panel is open)
active and then uses a widget toggle keybind, "hide all widgets" will
now disengage to make things less confusing.
23.8.8
- Perceptual Boost is now performed in LMS color space
- Changed handling of NaN/Infinity in sRGB <--> Linear conversion shader
- Updated HDR screenshot tonemapping code to work with wide gamut colors,
it's not great but at least produces sensible colors now.
23.8.7.4
-
Fixed Middle Gray Slider to work in unclamped color.
Any existing HDR profiles that used a non-zero middle gray value
will need to be re-calibrated.
23.8.7.2
- Cursor auto-hide works when mouse input is set to "Disabled to Game"
- ImGui cursor is removed from screen when other windows have focus
23.8.7.1
- Fixed potential crash in Baldur's Gate 3 due to mouse Raw Input data
- Fixed mouse cursor not centering on control panel when first opening it
- Fixed mouse anti-warp settings related to control panel state applying
even when control panel is not open - Set default preference for anti-warp when windows cursor is visible to off
23.8.7
- Fix potential black screen issues in Yuzu using Vulkan
- Changed HDR Perceptual Boost to run in Rec 2020 colorspace, the final
image should have less aggressive red saturation.
23.8.6.3
-
Improved compatibility with Vulkan/DXGI interop when the Steam overlay
is not disabled (D3D11 texture cache needs to be cleared if enabled)It is still HIGHLY recommended that you disable the Steam overlay when
using Special K in Vk games, because it hooks both Vulkan and D3D11!
23.8.6.2
- Add locks back around shader cache management code to fix God of War
23.8.6.1
- Fixed rare XInput crash if game calls on XInput during initialization
- Raised minimum HDR light level (above pure black) to fix artifacts on
colors outside of Rec 709
23.8.6
-
Added separate options for HDR Render Pass and HDR Compute Pass remastering,
use the "Experimental" tab to access the new setting.Previous versions included Compute Passes under the Render Pass setting.
Since compute shaders are the most likely cause of glitches when using HDR
remastering, the settings are stored separately now.
23.8.4.5
-
Optimized Raw Input hooks for better performance when SK's UI is NOT
blocking input to the game. -
Added (hidden) INI option to turn off RawInput hooks:
[Input.Gamepad]
EnableRawInput={true|false}- You may manually add this to INI files for debugging; discouraged
23.8.4.4
- Fixed potential crashes in SDL-based games if they read gamepad input
using Raw Input and "Continue Rendering" is enabled. - Disabled gamepad input to SK while games are in the background unless
"Continue Rendering" is enabled and Gamepad Input is not set to
"Disabled in Background".
23.8.4.3
- Fixed potential crash when launching Elden Ring
- Optimized HDR processing shader slightly for NaN / Infinity color stripping
23.8.4.2
- Raised default HDR Preset 0 saturation to 98% since increased saturation
is less of a problem when there's left over space in the output gamut.
23.8.4.1
- Fix artifacts on colors with very small negative values at the edge
between Rec 709 and DCI-P3 that were turned completely black by
the original attempt to unclamp HDR color.
23.8.4
-
Removed internal Rec 709 gamut clamp from SK's HDR color processing (scRGB).
Colors are now clamped to Rec 2020; anything beyond Rec 2020 cannot be
displayed on Windows or for that matter on actual displays :)
23.8.3.7
-
Added XInput Slot Disable option to fix Baldur's Gate 3 thinking that multiple
controllers are connected and forcing you to restart the game.[Input.XInput]
DisableSlots=1,2,3 (Comma separated from 0 to 4) - Blank: Nothing DisabledBG3 suggested setting: 1,2,3 assuming you are not using local multiplayer
23.8.3.6
- Cleanup various window message pump code in SK so that only the game's
message pump(s) go through SK's hooked functions and not SK's own messages.
23.8.3.5
- Fixed ActivateAtStart option not working correctly when used with SK's
"Continue Rendering" window management feature.
23.8.3.4
- Fixed potential black screen in some multi-window applications such as VLC
23.8.3.3
-
Enable PreventEnumDevices by default in Baldur's Gate 3; it does not prevent
Steam Input from working, only disables the part of it that hurts perf. -
Activate Baldur's Gate 3's window after 15 frames are drawn so that it does
not think the game is in the background and draw at 30 FPS constantly. -
Added INI option to activate a game's window when it starts (see above)
[Window.System]
ActivateAtStart={true|false}; Default: false
23.8.3.2
-
Added INI option to keep Steam Input from murdering performance by
enumerating devices every frame[Input.DInput]
PreventEnumDevices={true|false}- Fixes most of Steam Input's performance issues in Baldur's Gate 3 and
NieR: Replicant. Sure would be nice if Valve would fix this... :-\
- Fixes most of Steam Input's performance issues in Baldur's Gate 3 and
23.8.3.1
- Yet more fixes for Baldur's Gate 3's screwed up gamepad code, yikes!
23.8.3
-
Add code to prevent dereferencing a NULL lpMsg when Baldur's Gate 3 calls
GetMessageW (...) on its SDL_joystick thread. -
Turned default HDR Saturation on Preset 0 down to 95%, since Perceptual Boost
massively increases saturation to begin with.If the new desaturated values are not to your liking, it is suggested you
try the gamut expansion slider before the adjusting saturation. Gamut
expansion is more subtle and less "deep fried" color.
23.8.2.3
- Add support for 8-bit HDR remastering in Baldur's Gate 3 (D3D11)
23.8.2.2
- Fixed attempting to copy DXGI_FORMAT_R16_UNORM to DXGI_FORMAT_D16_UNORM using
BltSurfaceCopy in Baldur's Gate 3 -- formats are direct copy compatible
23.8.2.1
-
Changed VRR optimized framerate formula from 95% of Refresh to:
dVRROptimalFPS =
dRefreshRate - (dRefreshRate * dRefreshRate) / (60.0 * 60.0) - 0.1 -
Filter out Exceptions from logs if they originate in NVIDIA MessageBus.dll
23.8.2
- Restore compatibility with NVIDIA's Vulkan / DXGI interop layer, broken by
various code changes to try and make Streamline work :sigh:
23.8.1.4
- Partial workaround for ID3D11Resource reference count underflow in ReShade 5.9.0
Please do not use 5.9.0, SK cannot fix it and will crash eventually.
- Delay load comctl32.dll to reduce likelihood of SK's injected DLL becoming
stuck in UWP processes such as Widgets.exe
23.8.1.3
-
Replaced forum link in control panel's Help menu with a Discord link
-
Removed option to restart NVIDIA driver from Help menu; SKIF can do it now
-
Fixed Yakuza 0 crashing at startup
Using Special K in Yakuza 0 requires setting Borderless mode to work,
game is Fullscreen by default (ugh).
23.8.1.2
-
Disabled 11-bit HDR remastering in all Yakuza games because it causes crashing
-
Added an option to disable XInput (and only XInput) devices to the current game
[Input.XInput]
HideAllDevices={true|false}Intended use-case is games with native DualShock / DualSense + XInput that
break if they see both controllers at once (i.e. Nixxes games)
23.8.1.1
- Re-enabled memory management workaround code for Yakuza games, I thought by
now the bugs had been fixed... I was wrong
23.8.1
-
Added Streamline DRM bypass for "slSecureLoadLibrary"
-
Added option to automatically delete DLSS3 Frame Generation DLL from games
[NVIDIA.Bugs]
AutoDeleteDLSSG={true|false}- Default is false; recommended is to set true in Global\master_SpecialK.ini
When "deleted", sl.dlss_g.dll will be renamed sl.dlss_g.dll-bak
23.7.31.4
-
Added option to bypass DLSS3 Frame Generation DLL check so that if NVIDIA
ever fixes their crap, users can turn it on and hopefully not crash.[NVIDIA.Bugs]
AllowDLSSG={true|false}
23.7.31.3
- More DXVK fixes, should be the final fix needed
23.7.31.2
-
Fix potential DXVK incompatibility introduced in 23.7.31.1, given that
DXVK exports D3D11CoreCreateDevice but has the wrong interface.- D3D11CoreCreateDevice will be skipped if DXVK is detected.
23.7.31.1
-
Hooked D3D11CoreCreateDevice and routed all calls to D3D11CreateDevice and
D3D11CreateDeviceAndSwapChain through it to maximize code reuse -
Initialize SK's D3D11 render hooks using D3D11CoreCreateDevice because it
is not hooked by ReShade and this allows SK's UI and HDR image processing
to reliably run -after- ReShade's post-processing.Some games may no longer work with ReShade loaded as a plug-in, or may
require changing the load order (i.e. from PlugIn to Lazy).Traditional ReShade installs using dxgi.dll should work, however, installing
as d3d11.dll will not work; ReShade does not export D3D11CoreCreateDevice
23.7.31
- Fixed potential stutter when framerate limiter uses AMD MWAITX on high-end CPUs
23.7.30
-
Special K is no longer compatible with DLSS3 Frame Generation in any way.
Previously, you could use DLSS3 Frame Gen with local injection provided you
did not use HDR (since it is incompatible with scRGB).However, because of many Nixxes games unusual implementations, even if you run games with DLSS3 turned off (or your hardware does not support it), NVIDIA Streamline will still crash.- Users will be told to remove sl.dlss_g.dll if it is detected, and there are
no plans to make Special K compatible with DLSS3, NVIDIA needs to fix this.
- Users will be told to remove sl.dlss_g.dll if it is detected, and there are
-
20C AMD Zen temperature offset now applied to ALL AMD models, not just X
23.7.29.2
- Added 20C to various AMD Ryzen MSR thermal sensors that previously had no offset
23.7.29.1
-
More Streamline crap -- if you delete sl.dlss_g.dll (framegen), you won't have to
deal with Interposer warnings and global injection will be very reliable. -
Added default DirectStorage tuning values for Ratchet and Clank:
BulkPriority: Normal LooseReadPriority: High
TexturePriority: Low NxStorageIndexPriority: Realtime
23.7.29
- Added NVIDIA Streamline warning back to codebase, since new versions of Streamline
are even less stable than the old ones! - Users on SteamOS will not be shown Streamline warnings, since Streamline does not
break SteamOS (lucky!)
23.7.28.3
- Added even more experimental DirectStorage queue priority overrides for
Ratchet and Clank Rift Apart. Lowering priority may help to slow streaming
down and reduce texture streaming hysteresis issues.
23.7.28.2
- Changed DirectStorage detection code to make it compatible with DirectStorage
SDK sample applications (i.e. BulkLoadDemo)
23.7.28.1
-
Added experimental DirectStorage overrides for D3D12/DStorage games
All settings require a full game restart to take effect, current overrides:
- Telemetry, BypassIO, GPU Decompression
- File Buffering (cache disk I/O)
23.7.28
- Changed GPU voltage units from mV to V on text OSD to save space.
23.7.27
- Add support for AMD Ryzen Model 04h chips to SK's CPU sensor driver, these are
certain new laptop chips.
23.7.26.2
-
Add CreateDXGIFactory1@8 hack to workaround DXVK bug and support 32-bit versions
of dxgi.dll on Wine.This symbol is not supposed to be DLL exported, but to ensure compatibility
with buggy versions of Proton, SK will alias it to CreateDXGIFactory1.
23.7.26.1
-
Add hack to fix SteamInput problems on Steam Deck.
Using SK's control panel in SteamInput-native games will cause undefined
behavior on Linux, but the Steam client will be less broken.
23.7.26
- Restore validation code lost during a refactor that ensures Proxy DLL plug-ins
have matching CPU architectures and will not prevent a game from launching.
23.7.23
-
Add error message if user attempts to use Special K as dxgi.dll in 32-bit games
on SteamOS; rename DLL to d3d11.dll or Wine will crash in an endless loop.There is currently a bug in DXVK that makes this impossible because it
will attempt to load CreateDXGIFactory1@8 instead of CreateDXGIFactory1
23.7.21
- Enable DXGI Budget tracking in WINE because it is implemented by DXVK now
- Disable WASAPI-related features in WINE because it would spam logs otherwise
- Change status line for Frame Pacing widget's Presentation Model to "Steam Deck"
instead of telling users to install Special K
23.7.20
- If a user already has ReShade.ini in a game's directory when loading ReShade as
a plug-in, SK will use ReShade's default config path instead of rebasing it.
23.7.18
-
Transitioned codebase to support QPC or TSC-based timestamps for framerate
limiting depending on CPU capabilities (namely CPU supports invariant rdtsc?)TSC-based code is currently disabled because it has unfinished timing
issues in Latent Sync mode, but should be enabled soon. -
AMD MWAITX Instructions are Enabled by Default for AMD Users
They are now a stored config preference, you can turn them off
for a marginal boost to framerate consistency, but a loss of
energy efficiency on Ryzen CPUs.
23.7.14
- AMD Ryzen power-saving features are completely automated now, and simply on/off
- AMD Ryzen power-saving features do not require WinRing0 anymore, but it still
helps if you intend to monitor the impact of the option in real-time - Added CPU temperature and power consumption to Framerate Limiter | Efficiency
section for Ryzen users w/ WinRing0 installed
23.7.13.2
- Prevent users from forcing a waitable SwapChain in games that already use it
- Added Efficiency section to Framerate Limiter | Advanced
23.7.13.1
- Added tooltips to framepacing widget's Presentation Model status line
23.7.13
-
Added experimental AMD Ryzen power saving feature to Latent Sync config,
settings are not saved anywhere and the feature only activatesd when
opening the Latent Sync config in its current experimental state. -
AutoVRR Mode turns green and unchecks itself after it activates
Users with previous config files who activated AutoVRR will not
see it in green until they click the checkbox one time.
23.7.12.4
- Added fallback if NvAPI_GPU_ClientRegisterForUtilizationSampleUpdates fails
- Added D3DKMT option to SK's Control Panel under Compatibility | HW Monitoring
- AutoVRR mode's non-Ultra Low Latency option will not turn off Reflex Boost
mode when it activates if a user already had Boost mode configured on
23.7.12.3
-
Add option to disable D3DKMT perfdata, since on some systems it causes driver
performance issues.[Microsoft.D3DKMT]
DisablePerfData={true|false}( This may cause loss of fan speed, temperature, and voltage statistics depending on hardware vendor... Intel and AMD especially ) -
Only run GPU stats code for the text OSD if the text OSD is actually visible
23.7.12.2
- Init sensor data storage for DXGI memory budget tracking if GPU monitoring is
not enabled. (Fixes 0 values on VRAM gauge if CPU/GPU Load% is not enabled)
23.7.12.1
- Add system to move SK's DXGI Memory Budget Monitoring thread to a different
DXGI adapter if the game is running on a different adapter than expected,
(i.e. NVIDIA Optimus moves game from iGPU to dGPU).
23.7.12
-
Reduced D3DKMT overhead on GPU stats thread if nothing is currently
displaying GPU clock rate / temperature / fan speed. -
Added NvAPI_GPU_ClientRegisterForUtilizationSampleUpdates-based
method for collecting GPU utilization % data on NVIDIA GPUs.This is lower-latency and higher precision than the traditional
NvAPI_GPU_GetDynamicPstatesInfoEx-based load %, so it is more
suitable for the GPU load % meter on the framepacing graph.
23.7.11
- Optimized VRR checks; redundant NvAPI_DISP_GetMonitorCapabilities calls
- Removed scoped thread priority boost on framerate limiter wait, because
when the function returns it could cause the thread to be rescheduled
23.7.10.3
- Added code to reset temporary display mode overrides when a game's active
window is destroyed to cleanup for games that use non-standard exit.
23.7.10.2
- Rate-limit GPU stats thread to 150 ms to lower D3DKMT overhead
23.7.10.1
- Fixed awkward HDR widget minimum size when HDR is not active
- Cleaned up GPU stats thread code
23.7.10
- Reset various framepacing statistics when games create new SwapChains,
or more likely when NVIDIA's DXGI/Vulkan interop does (i.e. resize). - Fixed long-term (1000 frame snapshot) percentile data not updating
- Stop showing latency statistics temporarily while average >= 1000 ms
23.7.9.6
- Fixed wrong path when using local injection w/ user-defined screenshot path
23.7.9.5
-
Added User-Defined Screenshot Path; Manually edit Global\osd.ini
[Screenshot.System]
OverridePath=- Path must exist, or Special K will use the default per-profile path
23.7.9.4
- Right-align current sensor readings in GPU widget
- Added optional disk activity meter to framepacing widget
- Renamed framepacing widget preference INI section in osd.ini
- Improved GPU load % smoothing when using Pdh instead of ADL or NvAPI
23.7.9.3
- Fixed Reflex settings not applying when new D3D11 SwapChains / Devices
are created (i.e. for NVIDIA's Vulkan/DXGI Layered Present).
23.7.9.2
- Fixed incorrect DLL used to hook nvapi_QueryInterface in 32-bit builds.
23.7.9.1
- Fixed potential problems if PdhGetFormattedCounterValue (...) fails between
GPU state polling intervals.
23.7.9
- Improved auto-sizing of all widgets
23.7.8.7
- Apply smoothing to GPU load% and temperature
- Increased minimum width of D3D11 pipeline stats window
- Enforce minimum width on GPU widget when auto-sizing
23.7.8.6
- Smooth Fan RPM updates to avoid 0.0 for a single sensor sample interval
- Change GPU widget to only hide fan graph when average RPM is 0, not
when minimum RPM is 0.
23.7.8.5
- Increased default minimum horizontal size on GPU widget (450 pixels)
- Fixed border on CPU/GPU load meter not sizing correctly when scrolling down
23.7.8.4
- Favor D3DKMT collected GPU temperature over ADL or NVAPI when available.
- Change GPU load % to include fractional percentages for data collected from
APIs that support it.
23.7.8.3
- On NVIDIA GPUs that no longer report voltage or fan RPM, use D3DKMT to
get this data.
23.7.8.2
- Add 15 frame delay before attempting to initialize Pdh counters, so they
have actual data.
23.7.8.1
-
Add luid to Pdh counter name:
"\GPU Engine(luid_0x%08X_0x%08Xengtype_3D)\Utilization Percentage"
to correctly handle GPU load% on systems with multiple GPUs.
23.7.8
- Added Pdh / D3DKMT fallback paths to collect GPU statistics if ADL or NVAPI
are unavailable (i.e. Intel GPUs) or not working
23.7.7.4
- Remove AMD GPU statistics from framepacing widget if user's system has a
broken version of ADL
23.7.7.3
- Don't show partial Reflex config options in D3D9 or on non-NVIDIA GPUs
- Improved framepacing widget size calculation to eliminate scrollbar
- Increase GPU polling frequency when framepacing widget is visible
23.7.7.2
- Poll GPU statistics while framepacing widget is visible, instead of only
GPU widget / text OSD.
23.7.7.1
- Fix exit notification check for number of frames drawn; broken by 23.7.7
23.7.7
- Added extra thread-safety measures to NvAPI display management functions
- Simulate successful inject/exit when (un)installing local DLL using the
compatibility menu
23.7.5.2
- CPU load % counters changed to include fractions of percents
- Added the ability to turn Reflex's Nothing but Boost option on in Vulkan
- Removed various meaningless options from the Direct3D 11 settings in Vulkan
23.7.5.1
- Fixed potential crash due to NVAPI_Disp_GetVRRInfo (...) thread (un)safety
- Added CPU/GPU Load% meters to Framepacing Graph, they can be turned off by
right-clicking the framepacing widget.
23.7.5
-
Bypass ReShade 5.x's ReShade.ini file check when loading plug-ins
-
Changed plug-in loader to set ReShade's base path for config and logs to
comply with SK's own conventions:(i.e. per-game data in SpecialK/Profiles/<game>/... if globally injected) -
Hide Reflex Latency Analysis-related stuff on DXGI/Vulkan Interop SwapChains
-
Stop drawing HDR widget if it is turned on but HDR is not supported
23.7.4.1
- Added Minimum Available VRAM and Maximum VRAM Load% statistics to end-game
memory statistics in logs/dxgi_budget.log
23.7.4
- Added option to show VRAM gauge underneath framepacing widget, right-click
the framepacing widget to access this setting. - Added command console variable Display.RefreshRate to change the refresh
rate of the monitor the game's window is on using keyboard macros.
23.7.3.3
- Added Auto VRR Mode default policy to its right-click menu;
initial default policy is enable.
23.7.3.2
- Added "Ultra Low Latency" option to Auto VRR Mode (NVIDIA only)
Right-click the Auto VRR Mode option in Framerate Limiter | Advanced
- This is a globally stored preference.
23.7.3.1
-
Changed the IAudioClient3 instance used to set mixing latency to keep-alive,
rather than destroying the COM object when it goes out of scope.- This prevents latency from periodically resetting to default.
23.7.3
- Added a lengthy technical explanation of SK's VRAM gauge to its tooltip
- Added msedgewebview2.exe to internal injection blacklist
- Renamed "Volume Management" to "Audio Management"
- Added Audio Latency Minimization:
The Audio Management section of the control panel has a new button to
set the game's latency to the lowest supported by your hardware driver
if the current latency is higher than minimum.
- This latency reduction will be applied to the game every time it starts.
You can manually enable this feature by setting:
[Sound.Mixing]
MinimizeLatency=true
If you want this as a global policy, add it to Global\master_SpecialK.ini
23.7.2.1
- Removed VRR activation message from auto low-latency
- Bypassed Hatsune Miku Project Diva hanging at shutdown when it crashes.
23.7.2
- Auto Low-Latency Mode uses Normal framerate limiter mode now
The API needed to check for VRR is NVIDIA-only, and so is Reflex.
As such, it's more sensible to leverage Reflex + SK's Normal Mode.
23.7.1.3
-
Added option for Auto Low-Latency Mode under Framerate Limiter | Advanced
-
Enhanced Auto Low-Latency Mode (VRR optimization) to do the following:
- Set Framerate Limiter to 95% Refresh (if it is Off or > 95%)
- Activate without opening the control panel
- Enable Reflex and turn on Low Latency mode
- Prevent games from using 1/2, 1/3 or 1/4 Refresh VSYNC
23.7.1.2
- Fixed missing D3D11CreateDevice (...) hook execution when D3D11 debug
layer is not turned on.
23.7.1.1
- Report Supported + Inactive for VRR status instead of Unsupported when VRR
is not engaged because the game is not in the foreground (D3D12). - Fixed premature CloseHandle (...) when logging loaded DLLs
23.7.1
- Distinguish between NVCPL disabling G-Sync completely, and application
profiles disabling it, because some new R530 NvAPI functions do not...
23.6.30
- Suppress warnings in Hatsune Miku Project Diva Megamix+ when it attempts
to create an R8_UNORM RenderTargetView of the SwapChain backbuffer.
23.6.29.2
- Improved consistency of D3D12 G-Sync indicator vs. D3D11
23.6.29.1
- Implemented G-Sync Status detection for D3D12, Vulkan and OpenGL
Requires working PresentMon (i.e. full install of Special K)
- Hide Reflex Latency Flash button if attached display doesn't support RLA
23.6.29
- Removed restrictions on "Continue Rendering" in Fullscreen Exclusive mode
- Fixed haptic UI continuing to rumble sometimes after control panel is closed
23.6.28.3
- Lowered HDR profile 0's default gamma to 0.92 to improve shadow detail
- Added button/titlebar to close widgets if the control panel is open
23.6.28.2
- Poll DXGI Budget statistics once every 250 ms if the GPU widget or GPU text
overlay are not active.
23.6.28.1
- Added VRAM usage gauge to the control panel for OpenGL/Vulkan/D3D11/D3D12
- VRAM quotas are now configurable by right-clicking the VRAM gauge
- VRAM quota warnings can be reset so users can try changing game settings,
or the quota itself and test for VRAM shortages using the new settings.
23.6.28
-
Added warning if VRAM used exceeds a configurable % of -available- VRAM
[Render.DXGI]
WarnIfUsedVRAMPercentExceeds= (Some % value; 95 by default)This is also configurable in the D3D11/D3D12 section of the control panel
Set to 0.0 to disable the warning.
23.6.27.4
- Fixed libScePad hooks on disconnected controllers disabling XInput
- Blacklisted CefSharp.BrowserSubprocess and LariLauncher (Baldur's Gate 3)
- Enable Vulkan Bridge in Baldur's Gate 3 by default
- Removed unused INI options: "Ignore RTSS Delay" and "Adaptive Sync"
23.6.27.3
- Fixed SKIF's new signal not being set when used in local injection
23.6.27.2
- Added support for SKIF's new signal-based Minimize on Inject feature
23.6.27.1
- Fixed SkipRedundantModeChanges=false always skipping SwapChain resizes (!)
- Added extra detection for wrapped D3D11 devices (i.e. ReShade) when checking
device-resource ownership during device context hooks.
23.6.27
- Fixed black screens in D3D11 when Special K and ReShade are used together
- Fixed ReShade disabling HDR in D3D11 games
23.6.26.3
-
Automatically load ReShade{32|64}.dll if it is in a game's directory, and
create the necessary INI for version 5.x to load this way.This is equivalent to manually adding it as a Lazy plug-in
-
Added ReShade luminance control for its menus when used in native HDR games.
This fixes Rec 2020 / Rec 709 colorspace mismatches in HDR10 games and
80 nits brightness in scRGB games, so ReShade's UI works correctly. -
Hook ExitProcess and TerminateProcess even if debug features are turned off.
23.6.26.2
- Merge pull request #71 from Nustat0/dgvoodoo-d3d12
- Enabled 32-bit D3D12 for use with dgVoodoo.
23.6.26.1
-
Added per-game refresh setting to complement existing per-game resolution
[Display.Monitor]
RefreshRateForMonitor= (Current implementation rounds to nearest integer)This refresh rate will be applied when a game starts, and restored when
the game exits. It uses the Refresh setting from the Display menu.
23.6.26
- Re-enabled ExitProcess hook to handle games that crash at exit
23.6.25
-
Fixed Fullscreen Exclusive incompatibilities in many games
-
Enabled Rendundant DXGI Mode Change elimination by default
-
Enabled Fullscreen Exclusive in NieR: Automata
If you intend to run games in Fullscreen Exclusive (why?), be sure to
reset a game's INI first because the redundant mode change setting
has a different default value now.
23.6.24.3
- Added warning text if a user tries to enable HDR in a Streamline game
23.6.24.2
- Fixed potential double-shutdown of Reflex PCL thread
- Only apply the NoWrap hack for Streamline to Global Injection
23.6.24.1
-
Fixed compatibility with NVIDIA Streamline in D3D11/12 games by not wrapping
the DXGI SwapChain.- It is assumed they are all Flip Model anyway, and do not need wrapping.
HDR is still hit-or-miss; DLSS3 Frame Gen is not compatible with SK HDR
(HDR users should consider replacing the Streamline Interposer DLL still...)
23.6.24
- Optimized post-processing passes to use a single triangle
23.6.23
- Replaced NvAPI Reflex hooks with a stub if NvAPI does not initialize
correctly.
23.6.22
- Improved Reflex override restore if game initializes Reflex before SK has
the appropriate NvAPI functions hooked.
23.6.21.2
- A game's native Reflex setup (i.e. Low Latency or Low Latency + Boost) is
restored when turning off SK's override.
23.6.21.1
- Changed minimum number of frames before determining if a game is Reflex
native to 150 (because Unreal Engine). - Changing the override state of Reflex without changing modes will now
apply immediately.
23.6.21
-
Added option to override a game's native Reflex implementation
Low Latency + Boost w/ Latency Marker Optimization can significantly
reduce latency in native Reflex games with the bare minimal Reflex
integration (nearly all of them).
23.6.17
- Removed MMCSS check-box from framerate limiter advanced section
- Added render thread priority to framerate limiter advanced section
23.6.15.2
- Give games 15 frames to call a Reflex API function before SK decides whether
to initialize its own Reflex implementation or not.
23.6.15.1
- Enable mouse/keyboard input while Steam overlay is active, even if the
user is blocking mouse/keyboard to the game.
23.6.15
- Removed Reflex Input trigger mode
- Removed Latent Sync "Adaptive Sync" option, the tearing option replaces it.
- Added support for names assigned before SK initialized to the thread widget
23.6.14.3
-
Fixed Thread Widget not showing correct names for re-named threads
-
Changed default minimum render thread priority to Above Normal (1)
This used to be the default behavior in SK before it was configurable
23.6.14.2
- Allow user-requested Reflex flashes even in Reflex-native games
- Handle PCL ping before Reflex simulation start marker
23.6.14.1
-
Added minimum render thread priority:
[Scheduler.Boost]
MinimumRenderThreadPriority { -15=Idle, 0=Normal, 15=Time Critical } -
Shutdown internal PCL Stats thread if native Reflex is detected
23.6.14
- Reworded Adaptive Sync option in Latent Sync control panel
- Added "Enable Tearing" checkbox to Latent Sync control panel
23.6.13.3
- Added Reflex Flash trigger button
- Added NvAPI PCL Init/Shutdown to logs
23.6.13.2
- Replaced deprecated NvAPI calls w/ new ones (only available in Windows 10+)
Hopefully you have upgraded to 10, because NVIDIA does not support 8 :)
23.6.13.1
- Fixed not being able to disable SK's Reflex in games that aren't native Reflex
23.6.13
- Added detection for games that are natively using Reflex, so users cannot
enable SK's implementation of Reflex at the same time. - Added PCL (PC Latency) ping event every 100 ms to enable PC latency readings
on the GeForce Experience overlay. - Updated NvAPI to R525
23.6.12.3
- Added keybinds to Volume Management section of SK's control panel.
- Fixed Allow Tearing not respecting system default value.
23.6.12.2
- Fixed mouse activation of game window not working when blocking Mouse Input.
23.6.12.1
-
Added command console variables for sound volume/mute (applies only to game)
Sound.Volume [0.0-100.0]
Sound.Mute {true|false}Intended use is keyboard macros (i.e. Ctrl+Shift+Insert=Sound.Volume ++)
23.6.12
- Changing Latent Sync on/off will restore original limiter mode preference
23.6.11.3
- Removed auto-low latency mode
23.6.11.2
- Fixed Latent Sync's Delay Bias setting applying to other limiter modes.
- Fixed MPO warning showing up even if user did not have it enabled.
23.6.11.1
-
Multiplane Overlay support in-game only counts RGB planes now.
-
Added INI option to warn if MPO support is broken.
[Display.Monitor]
WarnIfNoOverlayPlanes={true|false} (default: false)- If you want this feature, you should set it in master_SpecialK.ini
23.6.11
-
The "Enable Tearing" SwapChain flag now controls the game's use of tearing
as well...It will turn a game's VSYNC off setting into vendor-independent FastSync.
This also allows for a gimped form of Latent Sync:
- 1 frame higher latency with "Enable Tearing" disabled, but... NO tearing :)
23.6.10
-
Special K's HDR is disabled at application start in Diablo IV because it
would freeze up at the game's splash screen otherwise. -
Added console variable to enable SK's HDR:
HDR.Enable {true|false}
(This performs the same action as clicking scRGB on the HDR widget)You can assign a keybind to turn HDR on/off like so (add to SK's INI):
[Macro.HDR] Ctrl+Shift+H=HDR.Enable toggleKeep in mind, in most games after doing this you need to press Alt+Enter
23.6.9.2
- Stop logging IDXGIFactory::EnumAdapters1 (...) if a game spams it every frame
23.6.9.1
- Fixed bug where forced 10-bpc would be enabled for games with vulkan-1.dll
loaded, but Vulkan Bridge disabled.
23.6.9
-
If user has a 1 second global injection delay configured, Streamline warning
will now be disabled without requiring interposer replacement.SK's HDR is not compatible with Streamline, but for non-HDR users this
could be an acceptable compromise.
23.6.7
- Disable D3D9 hooking in Call of Duty to make it use OpenGL-IK
- Handle edge-case preventing OpenGL Fullscreen Exclusive bypass if the game
called ChangeDisplaySettingsExA instead of ChangeDisplaySettingsExW
23.6.5
-
Removed warning when games try to use OpenGL Fullscreen Exclusive; SK can
now completely bypass it with OpenGL-IK. -
Implemented SK_D3D11_CopySubresourceRegion helper for HDR <--> SDR copies
when the subresource region requires scissor/clipping.(Gets rid of a rare assertion in HDR games)
23.6.4
- Add tooltips explaining to set a game to its Windowed mode (not Borderless)
if using SK's Borderless / Borderless Fullscreen overrides. - Fixed wrong Epic Game Store application name detection for games with DLC
23.6.3.2
- Return SCE_ERROR_BUSY instead of SCE_ERROR_OK when filtering libScePad input
23.6.3.1
- Fixed Steam Input breaking gamepad input in non-Steam games when
opening SK's control panel.
23.6.3
- Fix potentially incorrect SwapChain buffer resize redundancy check