@Kaldaien Kaldaien released this May 2, 2018 · 6 commits to 0.8.x since this release

Assets 11

Yes, GitHub is basically a cloud drive for me, lol... refer to GitLab for source code.


@Kaldaien Kaldaien released this Nov 1, 2017 · 116 commits to 0.8.x since this release

Assets 41

Project source code is on GitLab

This repo exists merely due to storage limitations on GitLab and the design of my auto-update system, please use the issue tracker on GitLab or contact me on the Steam forums if you are having problems.

Jun 19, 2017
Version.ini added
Assets 74

Release Notes are on GitLab

File size restrictions and legacy software design require me to host executables for auto-update on GitHub.

Assets 84

All source code is on GitLab


Initial universal D3D9 texture dumping/injection


Adds option to auto-dump on texture first load, refer to the Misc. settings tab in the mod tools window.


Full-blown fix for always-online DRM implemented by XSeed


Replaces 16-bit color rendering with 32-bit and enhances depth buffer precision (16-bit -> 24-bit)



Expands the 32-bit color depth to all render targets and adds texture caching to speed up texture injection

A known issue exists where injected textures revert to their original version after saving a game or Alt+Tabbing, you will have to change screens in Ys 7 if this happens to you, and then the injected version will show up.


Fixes all known problems with texture streaming

I have optimized multi-threaded throughput for extensive texture mods such as 99_8x_Upscale.7z, loading is significantly quicker and the texture mod tools "Reload" button works as intended.

Assets 6

Same story as the other tag... source code is on GitLab, but these files are much too large to host there.

Almost all games require the ReShade plug-in to be loaded with Plug-In load-order in order to use this. It is also not currently possible to use this version of ReShade with the local injector version of Special K.

At application start, this will load/create a ReShade preset from Documents\My Mods\SpecialK\Profiles\<Game Profile Name>\<executable.ini> instead of the last preset used (normal behavior for official ReShade releases).

It is not possible to make changes to the Texture or Effects search path using the ReShade config UI.

  • Make those changes manually if you want a shared search path.

If Documents\My Mods\SpecialK\Profiles\<Game Profile Name>\ReShade\Textures or Documents\My Mods\SpecialK\Profiles\<Game Profile Name>\ReShade\Shaders exists, ReShade will search there (and only there) for those types of resources.

This significantly speeds up load times if you want a small set of shaders for a specific game.

Assets 8

Arkham Knight All Over Again

This time I'm looking at an engine on the opposite extreme. It has a much too conservative resource ceiling for textures. The engine loads, then unloads and later reloads the same assets hundreds of thousands of times over the course of an hour. All the while, VRAM is only ever 25% filled on my GTX 1080 Ti and none of that nonsense is necessary.

I have limited control over this situation, which effectively calls for limiting the number of jobs in-flight per-frame. There's no such configuration parameter in this engine like there was in Arkham Knight. Thus, I have resorted to a little-used feature of Windows Vista+ known as Multimedia Class Scheduling to dynamically raise and lower the priority of threads performing the same or related tasks as system responsiveness changes. The scheduler achieves the necessary rate control in a round about way.

Two scheduler tunes exist

  • Slow (for low-end hardware)
  • Fast (for high-end hardware or people who don't mind stutter but hate texture pop-in)

I cannot easily make the scheduler tuning user-configurable since this all has to be setup immediately after threads announce their names to any attached debugger.

For best results, enable my framerate limiter and disable the game's.

This also fixes the game's flimsy anti-debug so any debugger or performance tool can be attached while the game is running without the game self-destructing. Attaching a debugger immediately at start-up still results in the game's suicide.

What lessons can we take away here?

Ubisoft needs to work on some kind of hysteresis and rate control in their resource manager; it is not DRM contrary to popular belief that causes high CPU load on PC, but insane driver overhead caused by really naïve resource management for such a vast open-world game.

It should be easily fixable. Clearly the dev. team focuses on consoles because there appears to be no consideration given to the significantly higher throughput of PC storage devices such as my NVMe SSDs in RAID0. The faster your disk is and the more CPU cores you have, the more of an unpredictable performance nightmare this all becomes.

    Thus, we have a repeat of Arkham Knight and nobody seems to have learned anything 🙄

To future port developers

Please actively limit disk throughput before it becomes a detriment to gameplay. Microsoft has even done the heavy lifting for you, open-world games are almost a textbook use-case for Multimedia Class Scheduling and Real-time Work Queues.

More details are available on my Steam forum post and I am more than happy to discuss all of this on the development section of the Special K Steam group.

EDIT: Most of this can be solved just by swapping the thread priority on the asynchronous file I/O completion thread with the one reading from disk.

The priority of the async thread is so high that it preempts the worker threads for trivial stuff that can wait 1-2 frames. Meanwhile, the thread that actually reads from the disk needs a priority boost or hitching happens frequently in cities.

@Kaldaien Kaldaien released this Aug 17, 2018

Assets 8

Various features to convert games with SDR final output into proper HDR. A work in progress.

Source Code is on GitLab