Control - [ SteamAPI Fixes, HDR and Frame Pacing ]

🐱‍🏍 Download and Install 🐱‍🐉

Official releases of Special K (as of 8/30/20) do not support Remedy's unorthodox ... ( unstable ) ... Steamworks API usage patterns; only versions or newer are compatible.

Special K v is not ready for release, so a compatible test build has been provided.

    Special K v (x64)       The download contains SpecialK64.dll, for Global Injection.

If you do not know what Global Injection is, or do not want it, feel free to rename the DLL to dxgi.dll and place it in the same directory as Control’s DX11 executable (… this process is referred to as Local Injection).

✨ Configuration ✨

All Settings are for D3D11 Mode   :crazy_face:

For Best Frame Pacing

     Diagram shows the locations of settings, not the actual values to apply.
  1. Enable Framerate Limit
  2. Set Sleepless Render / Window :h
  3. Set Timing Accuracy somewhere between 50 - 100%

       high values fix FMV stutter

  1. Users with more than 8 physical cores, cut number in ½ or ⅓
  2. Setup the SwapChain to use Flip Model:
Setting           Value
Use Flip Model Presentation      :ballot_box_with_check:
Presentation Interval:       1
BackBuffer Count:       5
Max Device Latency:       6
Waitable SwapChain:       Enabled    30 ms  Maximum Wait Period
  • AMD drivers may not like Flip Model in Fullscreen Exclusive; AMD GPU owners should manually edit SpecialK.ini or dxgi.ini:
  • [Display.Output] ForceWindowed=true

     Set your framerate accordingly. I am running the game at 50 Hz.

For HDR Users
  1. Open the HDR widget
  2. Click 16-bit
  3. Set 10-bit Remastering ON and 8- and 11-bit OFF
  4. Restart game

After restarting,

  1. Set the Luminance range to max (without turning the button to allow full-range on)
  2. Set the Horz% Slider to 50%
  3. Look at an area of the scene that is in typical brightness level (e.g. not direct sunlight, not nearly pitch black)
    3.1 Adjust the gamma slider until left and right sides feel “balanced”
    3.2 Set Horz% back to 100%
    3.3 Set both colorspace options to CIE XYZ

🤔 D3D12 is Out of Service 🤷‍♂️

Special K does not yet support D3D12 in this game.

It does in many others; it is not clear what is wrong, but unlikely I will be able to fix it any time soon.

1 Like

I recommend creating SpecialK.deny.Control and SpecialK.deny.Control_DX12 files in the game folder as well to get Special K to ignore the launcher and the DX12 version.

The first one’s not needed, already has a hardcoded blacklist entry to ignore that program.

Ah, nice. Thx for including that :slight_smile:

Oh, and BTW… I didn’t hard-code the HUD shaders in like I usually do for games I debug, but…


Throw that into d3d11_shaders.ini and then you can toggle the HUD (Alt + Shift + H) or take HUDless screenshots.

Doh, HDR cannot be used together with MSAA unless 11-bit remastering is turned off.

Shame I don’t have this working in D3D12… HDR Retrofitting a D3D12 game might get me back into another Digital Foundry video :slight_smile: Those go a long way toward legitimizing my work and getting me a larger userbase so I can dedicate more of my time to the project and less to investing.

The effect of SK HDR here is fantastic, if I had support for D3D12, we could combine HDR + RayTracing into something truly beautiful.

You know what… why the hell not?

I think I will try to get in touch with DF and see if they will do a video on Special K’s HDR. Sure I may not be able to combine it w/ DXR in the D3D12 version of the game, but this is still pretty significant for a high profile game to lack HDR and here comes a product nobody’s heard of that can do something about it :slight_smile:

1 Like

Interesting reasoning there.

The mo-blur toggle is nice but I’d expect HDR support to be very well received and the games use of lighting and shadow and highlights would lend itself well to support of this.

Uuuuhhh… This happened after enabling the borderless and fullscreen upscale options in Special K and then launching the launcher:

Wonder if the game has some interesting resolution or scaling method, generally though I don’t think I’ve ever seen that thing it’s usually like a zoomed in pixelated view when it’s that type of error and it looks upscaled although the mouse cursor position is off as well so utilizing the menu is a bit more complicated. :stuck_out_tongue:
(Windowed/borderless though so it’s either alt-f4 if keyboard navigation isn’t a thing - standards! - or just the task manager and a bit of WER having a moment.)

Can’t say I care all that much… launchers are stupid :wink: Just use Global Injection and then the injection blacklist will keep SK out of the launcher.

Laughably, there’s some anti-debug nonsense in the launcher… Remedy’s Steamworks DRM wrapper was applied to the launcher rather than the game executables. They used the highest Steamworks DRM protection level and applied it to the least important part of the game, brilliant! :stuck_out_tongue:

I fired off a message to DF, BTW. I do not know how often they read those things, hopefully a response will come before the game slips out of relevance :slight_smile: It’s only very briefly relevant having been re-released with a little extra on Steam.

If you don’t get a response, depending on who you sent a PM (DM, IM :stuck_out_tongue:)to, try to reach Alexander Battaglia specifically, as he is their PC guy.

You can also (sort of?) email DF here.

I hope you’ve also mentioned the tool itself, at least the HDR injection feature for Dx11 games. Their jaws would drop over that.

Uh, what else would I have written in the message? :stuck_out_tongue: That was the entire point of trying to get in touch with them. Not to talk about the weather :slight_smile:

Re. The DRM wrapper on Steam, I wouldn’t be surprise to hear that it was unintended. Control is otherwise DRM-free on EGS, and is getting a release on GOG

It could happen but how would one wrap the optional Steam DRM part of the Steam API on the launcher exe when implementing the Steam API functionality.

Then again it could also explain why it’s only on the launcher exe and not the actual game exe files.
(~Just this little Steam_Appid.txt and goodbye launcher requirement or at least it won’t be started when starting the D3D11/D3D12 exe files in case the game defaults to one but the user wants to use the other API.)

EDIT: Actually the optional Steam DRM might have been this other thing I’ve forgotten the name of at the moment.

Steam Stub?
(EDIT: Nope Steam CEG’s the other one of this functionality.)

1 Like

Steam DRM defaults to highest protection when using auto-wrap, which is probably what they did in this case.

The other executables also has Steam requirement, but seemingly with the Steam DRM set to a lower level.


For the brief period of time (actually, I guess 1 year’s not brief at all … lol), that I was a welcomed Steamworks partner, I cannot tell you the number of threads I found myself in doing what I could to dissuade developers from using the DRM wrapper.

I went so far as to show how easy it is to bypass, and then pointed out the length of time it takes to ship the executable to Valve, have Valve wrap it and send it back, how inconvenient that all is for something that is completely ineffective for pirates, and a minor nuisance for fans of games who want to modify the game to share with other fans.

Most developers I talked to when I explained what the wrapper does do (make tracing execution during game initialization a pain in the ass), to whom it is done (legitimate customers), and what the wrapper does not do (prevent piracy), and to whom (pirates) it does not do it… most agreed it’s pointless.

It was pretty funny the times I had on the Steamworks Developer Forums… I’m supposed to be this pro-DRM ■■■■■ if (sorry, but no other word fits – absurdly ignorant) users are to be believed. Meanwhile, to all the developers I worked with, I got a reputation for being anti-DRM, lol. And because that’s a private group, the pirates who won’t stop heckling me over things they don’t understand will never get to read any of it and have their minds blown.

Hah, that reminds me… I have s h i l l filtered by the language filter on these forums :slight_smile: That’s a dirty word I’ve been called enough for multiple lifetimes.


Yikes Remedy is going overboard with SteamAPI achievement status updates… 2, sometimes 3 of them every frame. You’re really not supposed to update them more than once every 30 seconds.

That I guess is a good use for the status update sendback setting then?
And the recommended from Valve being something like a minimum of 15 to 30 if I remember the public Steam API documentation website for what I could find.
(EDIT: Although that’s frequency or a hertz rate for polling this not a millisecond value come to think of it.)

Although the throttler might throttle a bit of everything but long as nothing too long is used or the value is too short it probably just helps.
And might be one of the options Valve got into questioning this whole Steam API modification functionality but eh it works and it’s as seen like here again kinda useful in limiting this behavior and other callbacks.
(2 - 3 times per frame sounds like a lot though that’s at least well the game should support 144Hz / 144Fps if not higher but 120 - 180 times at 60 FPS for each second? - Ah math I absolutely can’t do that well with it, ha ha.)