#Display Commander - Changelog
1 messages ยท Page 2 of 1
I could regenerate it. Basically, I changed the defautlt fps limiter, the max_queued=3 used to be the default for some time.
It offers the best stability.
There is on github, I can reenerate past versions.
I plan to release versions more often from now on.
Now, that bugs have been fixed.
max_queued=1, was also used in some verison as default.
would you have to do it manually to flag every past version or can it be done in a way where we can browser all past releases? I'm not sure how github handles hosting of so many previously shared files
I could host version every 25 or 50 for example.
for Rebirth for example, I don't think it's due to a recent change since even the version 0.12.148.1 I had saved produces worse pacing than the ones I tried prior to that, and that one doesn't have the menu from this screenshot
do you recall which versions only had the pace native frames option without the added ones for reduced latency?
one of those released in that timeframe worked best for Rebirth, on my system at least
Yes, "pace generated frames" preset is the one.
It works pre-FG, it was the default for longest time. It paces the rendered frames by the game. It was called "pace native frames".
The algorithms, didn't change, I just renamed them.
First 5 "fps limiter presets" are pre-fg.
I could create a repo on github with binaries, different versions.
That's least amount of work.
would be great ๐ I'll try the most recent one first with the other settings from the drop-down
yeah you're right, the max queued frames 2 and 3 produce the same or very similar results
thanks!
at least with FF it results with much better frame pacing when using FG
but the game has horrid frame pacing on its own
@lunar locust and other people reported the same thing.
This is the algorithm I designed for DC. I play to develop complete version later. And, maybe write a page describing it / put it int othe library.
I want to make, perhaphs max_queued=1 or =2 default, after UI redesign.
I'll try a few other games for more data but 2 and 3 were the best ones in this case
1 was noticeably worse, though it could only be FF
Yeah, =1 had issues in some games. However, that's the best option when I was testing, giving both best latency and frame stability in many games.
on a sidenote, does doom dark ages work with addon reshade now? I wanted to test this now but the game crashes non stop with reshade
Yeah, it got fixed. FG Works with DC.
not related to DC, it just can't load reshade on its own
hmm does it need any extra steps?
No, just setting "fps limiter preset to max_queued=1 or 2"
I mean, yes, installing reshade as vulkan layer, and DC as .addon64.
that's how I installed it but I can't get the reshade UI to pop up at all
and when reshade is installed as dxgi.dll through the addon, it just crashes, but that makes mores sense
Does it crash without DC?
It still works for me.
nah it seems to just be a reshade problem. I see the renodx github entry for it recommends +r_allowBlackListedLayers 1 as a launch command, but that causes a crash too
very weird, probably down to the Windows update or the NV driver for some reason
I didn't have to change anything.
I was also using reshade and DC in Diablo 4 and reshade no longer works there either
i'll dig some more to see what's up
did read the convo in HDR Installer chat and somebody pointed out the RenoDX UI
i think that is a good way to go and it's basically what we wanted anyway
the top slider could have something like DC Lite/Advanced/Advanced+Monitoring tabs that would reveal more and more info and options depending on what the user needs
the default would be DC Lite so new users that just want to limit FPS do not have to do anything then the other tabs would more features
it fits the separating of what we wanted and it has the plus that people are familiar with RenoDX UI already if they have used it before
maybe something like this could work but i still feel like the 100% width blue dropdown are too bright/distracting
having a line separator between the sections could be better
@tame dock should add 60 and 120 here
not many people use half or 1/3 refresh rate as the fps limit target tbh
there should be more common values like 60 90 100 120 here
and i think Display Settings, Window Control, Resolution Control should be merged
NVIDIA Control should have its own seperate sub menu
maybe make the layout look like like this
i think first @tame dock has to decide what will be visible in DC Lite and what what will be moved into the Advanced tabs
the problem we are trying to solve it that non technical people get overwhelmed by all the options/menus
non technicals wont ever launch this anyway don't worry
laziness is king with the casuals
i have been told they do hah
this is the feature i suggest in dc lite
the display settings sub menu
ingore others
Even technical people get overwhelmed. Reshade as a UI framework is kinda shit
i kinda like it, it's not that bad if you don't have 4865 things on 1 page and follow some spacing guidelines but i can understand that it is not user friendly for everyone
disagree. Like Dio's youtube vids had a lot of people watching it that are for sure casuals. Like fixing RE2R's hdr unhooking cause of nvpi etc
Yeah needs a whole bunch of tweaking to get something decent
hey I finally manage to get it to load reshade and addons, but the DC hud isn't showing up even though it's listed and ticked on the addon list
very weird behavior lol. When I hit just "end" for DC to pop up, it comes up minimized, then I can quickly expand it, but it will start slowly shrinking on its own until it's back to just a ribbon menu
never seen this anywhere, here are the logs if it helps
nvm it finally showed up after a few launches and seems to work now ๐
I reverted changes causing this issue.
Enable fps limiter / enable background checkboxes could be removed. This would make sliders aligned.
the checkbox is useful to compare capped vs uncapped
Instead, disable button in quick draw would serve as this purpose. Chaining limit to 0.
Thatโs also true, you can quickly switch bewteen those states.
probably just remove the no limit button
Or maybe, make fps limiter slider width end at the same location as other sliders
ah right
thats better
also inject reflex/pcl stats/safe mode limiter should be in the same row
This looks better. Personally, I don't like the long blue bars in the UI.
Ugh, installing Reno just now removed the preceptual shader in FF16 and pressing refresh does not bring it back
Pressing Load DC's shaders on/off should bring it back.
I'll add not to retest this logic.
This UI should be redesigned as well.
When I'm using this UI. Personally I'm missing a few things.
It would be nice to just have one click to download/enable/disable HDR shaders, like:
- DC's AutoHDR shader.
- @flat crater HDR, if you want to try alternative.
- @frail sand HDR analyzer.
@obsidian flower @keen void The UI will need multiple iterations. Thanks, I'll come up with a new design, which should make things cleaner. Then we can iterate from that.
I think it would be nice to redesign this UI to be Reshade Effects section, a simple UI, which can enable shaders with one click.
what do u mean exactly?
Imagine, you could just have an UI in addon, one click button, that downloads/configures shaders, and with one click of a button enables Pumbo's AutoHDR for user convinience.
in ReShade?
I was thinking in doing in in Reshade's addon - Display Commander.
let's get back to that another time, i'm re-working most of my stuff
Later down the like it could be added to Reshade, if Croside so desires.
i'd like my AutoHDR code to stay exclusive to my shaders for now.
I don't want to copy your shaders, just offer an option to download them. And provide UI for them.
then you can do whatever you want ๐
The idea here is, to add useful shaders, enable them with one click.
Pumbo, I'm having fun with AutoHDR, what is principle behind your shaders / how do I get them? Thanks
i don't think you need my permission to make a tool that downloads my shaders from my github
but you can if you want, either way
i'm not sure how useful it is at the end of the day
I was looking for feedback on the concenpt, useful less, suggestions.
but i'm not the average reshade/display commander user
so dunno
to me, it kinda sounds useless
but i barely play games
and don't love using tools like SK or DC
unless there's a big problem with the game that i can't get past in other ways
one suggestion i have to avoid bloating the app.
if users asks for specific features needed by 1 specific games, sometimes it might be better to say no.
IMO
I was thiking about separate addon, moving the stuff out of Display Commander, into a separate addon/module. Something like "Reshade effects manager"
This would make Display Commander less bloated with features, and be a proof of concept for that people need.
That would be ideal, I would prefer to add a feature to download/autoconfig Luma 2.0 AutoHDR addon, than keeping addon Bloated.
github
Wow ok your AutoHDR is the best I've used
the colors are the same
Great job ๐
trying it in FF16 for a little more pop just to see and it's great color
Clairty is higher..
thisis the first time I've noticed the starfields blink
I can see into the shadows more, not sure what that means but it's adding depth to the image somehow..
Texures feel more "solid" somehow
New autohdr shader finally getting ported ๐
Ported to what? Thanks
// AdvancedAutoHDR pass to generate some HDR brightess out of an SDR signal.
// This is hue conserving and only really affects highlights.
// "SDRColor" is meant to be in "SDR range" (linear), as in, a value of 1 matching SDR white (something between 80, 100, 203, 300 nits, or whatever else)
// This function already knows your Luma peak white nits setting, so actually pass in the max value for paper white 80 (e.g. 400-750, beyond that it looks bad)
// https://github.com/Filoppi/PumboAutoHDR
float3 PumboAutoHDR(float3 SDRColor, float MaxPeakWhiteNits, float _PaperWhiteNits, float ShoulderPow = 2.75f, float SaturationExpansionIntensity = 0.2f)
{
#if 0 // This might disproportionally brighten up pure colors
float SDRRatio = max3(SDRColor);
#elif 1
float SDRRatio = average(SDRColor);
#else // This nearly ignores blue!
float SDRRatio = max(GetLuminance(SDRColor), 0.f);
#endif
// Limit AutoHDR brightness, it won't look good beyond a certain level.
// The paper white multiplier is applied later so we account for that.
float AutoHDRMaxWhite = max(MaxPeakWhiteNits / sRGB_WhiteLevelNits, 1.f);
float AutoHDRExtraRatio = pow(saturate(SDRRatio), ShoulderPow) * (AutoHDRMaxWhite - 1.f);
float AutoHDRTotalRatio = SDRRatio + AutoHDRExtraRatio;
float SingleColorScale = safeDivision(AutoHDRTotalRatio, SDRRatio, 1);
// Calculate it again but with "per channel", which would expand gamut (not hue conservative)
float3 SDRRatio3 = SDRColor;
float3 AutoHDRExtraRatio3 = pow(saturate(SDRRatio3), ShoulderPow) * (AutoHDRMaxWhite - 1.f);
float3 AutoHDRTotalRatio3 = SDRRatio3 + AutoHDRExtraRatio3;
float3 PerChannelColorScale = safeDivision(AutoHDRTotalRatio3, SDRRatio3, 1);
return SDRColor * lerp(SingleColorScale, PerChannelColorScale, SaturationExpansionIntensity);
}
somebody just do it already
make a PR
i can't bother
On it boss
Once I actually get home
Do you want me to send it to you for you to push to your GitHub? So it auto updates for everyone
make a PR on github
This is good stuff! So the new version will know your Luma peak setting, that the only change? @ivory pendant
I included Swapchain HDR upgrade inside DC, AutoHDR shader, but I think this is too cumbersome to use.
Perhaps, it would be better to just add download function, and configure options.
cant wait for test this autohdr
I need a bit longer lol
I'll rename the "Pace real framew Low Latency max_queue=1) algorithm to be FGPaceLock(q=1)/FGPaceLock(q=2)/FGPaceLock(q=3)
And I'll make FGPaceLock(q=2) the default preset for FG, while FGPaceLock(q=1) is recommended, but may not work in same games.
@lunar locust
This should make conversations easier.
FG modes:
- FGPaceLock(q=1/2/3)
- Low latency mode (reuses reflex sleep hook)
- Stability mode - paces rendered frames at latency penaulty.
I'm planning to add more settings to DCPaceLock, to test out different configurations.
v0.13.9 (2026-03-25)
- [ui] [settings] DC's own fps limiter has been renamed to DCPaceLock - The three presets that use Reflex latency markers with different parameters are now labeled DCPaceLock (q=1), (q=2), and (q=3) in the FPS limiter preset combo. DCPaceLock is Display Commanderโs frame-pacing approach aimed at smoother pacing with frame generation while keeping latency lower than naive pacing-only setups.
This is needed to let people know, what's going on, and explain what to use by default and why.
im not sure if q2 and 3 actually have like better pacing than q1 or not
i couldnt really deduct that in my own testing
q=2 is only when q=1 isn't good enough, same with q=3 when q=2 isn't good enough.
ideally, this would be automatic.
yeah maybe would rewrite that tooltip then
because someone could be thinking oh ok should just use q3
but that would result in perhaps too much latency
for 3 id put higher latency than q2
{"Low latency mode - pace game simulation thread only (bad frame pacing)",
"DCPaceLock(q=1) (recommended, low latency, good frame pacing)",
"DCPaceLock(q=2) (default, higher latency than q=1, use if q=1 is not good enough)",
"DCPaceLock(q=3) (higher latency than q=2, use if q=2 is not good enough)",
"Pace native rendered frames only (pre-FG, stable at latency penalty)",
"Pace generated Frames",
"Custom (configure manually)"},```
cause if both are just called higher latency
uninformed user could think q2 and 3 are same
yeah id say thats good
could also do that i suppose
Or this?
yeah that would work
That can be adjusted later, we will see.
yeah true
Seems odd to me for "recommended" and "default" to be different settings. Why not default to the recommended setting?
Ah so we should use โpace generated framesโ with frame generation? Sorry for dumb question
pace generated frames = pace post-fg rendered frames only
pace native rednered frames = pace pre-fg rendered frames only
There was instability for the recommended in previous versions
Which is best idea?
DCPACELock(q=1) is theoretically the best way to to play the games with FG. However, it's experimental feature, it needs more testing.
There was an issue in Doom: The Dark Ages. I fixed the issues, but I don't want to put unstable feature as the default yet.
I plan to make it default in the feature.
Yes, DCPACELock(q=1) was default for some time, it was unstable in some games.
Features, are ordered in order of latency they add, I would use pre-fg over post-fg.
Native's the only one you can do without tripling latency
But is that the one that resembles your frame pacer?
I heard everyone uses these for smoothness
Youโre just warning about latency I got it
As in we might still use it for smoothness
Roger ๐
No, SK doesn't pace the generated frames because that makes games completely unresponsive at 2x FG, and it gets worse the more frames you generate.
Ohhhhhh
So you shouldnโt use a Pacer with FG
post-fg modes are added as fallback, in case pre-fg modes were broken. I may as well hide from the UI.
I may end up just showing the first 4 settings.
Wait so we can pace the pre-generated frames
And will still increase smoothness?
Thanks for your explanations youโre putting in the app
Please tell us what to do whenever possible lol
Helps with the number of options
Yes, you can pace the frames the game rendered, pre-fg.
Awesome thank you!
pacing pre-fg frames adds some latency, due to the game is designed. In this case you rely on nvidia drivers to pace show the post-fg frames.
Yes, but guessing pacing the pre-generated frames in DC can still produce a smoother result?
There's no point in pacing the generated frames, until you first disable flip metering, for what it's worth.
Their pacing is unrelated to when they appear on screen in modern NVIDIA drivers w/ flip metering enabled.
Yes
Thanks, this is awesome
By pacing generated frames, you stop the game engine from generating new frames infinitely, until onpresent finishes. It helps with frame pacing to some except.
But yeah, flip metering probably isn't useful if you do that.
You really don't though.
Streamline's native SwapChain doesn't block the game from rendering its real frames (the ones you see for Present calls on the proxy SwapChain and Reflex markers / sleep calls).
I understand.
There could be benefit to pacing those frames if you turned flip metering off.
But otherwise it's largely wasting CPU cycles.
I was talking about the fact that frames don't get queued infinately by the game, so there is some machansms in the games to prevent that.
Absoluately, I was planning to look into it adding option to disable it, I'm not sure whenever that should be done by default or not, as that requires testing.
It's been default policy in SK since it was introduced.
It was not working well when it was first added to NV drivers, and disabling it also has the added benefit of making third-party tools that have frametime graphs from looking totally bizarre.
I've decided to keep it off by default, but recently made the setting visible to users in SK's control panel.
If all factors align properly, then enabling it would be beneficial. It would reduce VRR flicker and other things, but I still don't trust it and it has weird interactions with overlays.
It's almost essential with multi-frame generation though.
yeah, it's hard to test without having 5000 series.
I didn't you got 5000 series card, what is that bad?
q2 adds quite a lot latency last time i tested it
Yeah, I'm not sure which setting to make the default one.
0 may make pacing ustable,
1 may not work in all games
2 adds latency
I plan to add a detection, which detects whenever q1 works, and reverts to q2.
Which one do you think should be the default one?
Make it opt-in in that case?
Let people decide, so the blame doesn't fall on you.
Well, people will say they see issue with frame pacing with 0.
If it's for the variants, the q's, then 1 makes most sense, I guess.
Unstable behaviour if some random person installs DC, tries it, then says some random colourful things and never tries it again.
As you see some people do with SK.
Yeah, but q1 did have issues in the past, like drop to 10fps, until I made a fix.
rip
This can be detected, and auto reverted to q2.
strugglin here
I didn't write the detector yet. Yeah, I'll switch to q1 once I add fail safe.
UI becomes a bitch when you try to add too many features, cause now at one point, you're trying to give a good 'solution' to end user, but then it can also clutter the fuck up.
I want to add the basic mode, like RenoDX has, so people can start using the addond imediately, with as little configuration as possible. They can learn more over time.
Then add features that are 'stable' OOTB. But tbh, these addons are always iterative.
Like Kal said the other day, it's software. It's inherently going to stay broken.
But I'd reduce features if it meant a more stable OOTB experience, or rather, disable features altogether OOTB.
Throw those risky ones under 'Experimental' section or some shit.
Yeah, basic tab should have OOTB features.
I should mark them by adding [experimetal], so user knows it may not work.
if you do that make it a toggle thats on by default, i wouldnt want it to switch on its own, so advanced users have the option to change this
That would be DCPaceLock(auto)
How does DC look rn? Got an SS?
i see
so its own limiter mode then
that also works
See this line? Put one like this that's a seperator line, put it in red or w/e.
Call it Experimental, put a hint icon or something explaining that section. And put all the new/risky/iterative features down there.
Only move them out of there after weeks or more worth of testing and confirmation from multiple parties.
Ideally, hide all that experimental features with a dropdown button. Keep the OOTB experience simple for new users. You don't want to confuse them with 23904980234 options.
I don't like the blue color either.
Well, more than that.
If you can change it, every dropdown feature inside experimental area can receive a diff colour from blue one.
Super light red colour for experiemntal features, a lil brighter red as a separator. Everything above that keep it neutral, light blue or light green or whatever you want.
Be consistent with colours, so at a glance, it's easy to tell which area is safe, which is risky.
Don't use too many colours.
And don't use same shade of colour for opposing indications.
Like if green is used for letting know the status is okay, don't use that for something else, etc.
I'll define colors, for header/subheader/experimental_header/experimetan_subheader
Yeap
Reduce as much as you can, and then stick with that.
Don't be iterative with colours, so don't introduce new colours at a whim rn. Take your time, do a few mockups, see which you like, and then just lock that in.
Nothing more annoying than updating something and everything changing every update.
Yeah, SK has a lot of features so SKCP can get confusing. But the colours are consistent nonetheless.
I could expose color scheme into the config, so it can be adjusted, defaults changed, etc.
The old one? Called native pacing or what
q=1 doesnt work well in some games
The top one. I'll revert top one to be "native frame pacing".
ive done it with the power of ai slop. do you want me to send it here for you to look at or just PR and let you look at it there?
Out of curiosity, I tried AI slop on that repo as well, it went badly. A few times.
I'm curious if your AI slop is better than mine.
testing again real fast to make sure but it looked fine
Yeah, it's probably safe to push as PR, it can be changed later.
but im on a 5090 so flip metering might help with the frame pacing
maybe on a 4090 it doesnt perform well
It doesn't, possibly native frame pacing works fine only on 5000 series.
upload on github, i can see the diff
I see, yeah it would be nice to have option to disable flip metering so we can test and see whenever flip metering is helping or not. (in some advanced settings, not shown by default)
Kal mentioned 50 series dont like flip metering being off
Kal menioned, he has kept flip metering off in SK, without showing it in the UI, because it was causing issues.
Ya was
https://github.com/awesomeman5/PumboAutoHDR @flat crater
Flip metering was causing issue for everyone
but i think it has been improved
people with 5090s keep it on with sk
Never been an issue on or off for my 5070 system.
(people i know)
#1484495867586281493 message
Alrighty?
Kal doesnt have a 50 series gpu
Do you know if it's on by default now?
probably its actually always on on a 5090
Sorry, I meant to put the question with the the same message as the link.
and it helps with frame pacing (which is what its supposed to do)
Not mad at you, just constant in these servers lately of treating people as if they're, stupid.
Well, it's sometimes hard to follow the converstation. Due to the number of messages.
Agreed.
I WILL say in most modern titles I run x2 FG, so like Polly said, I may not be seeing said issue also.
Nvidia probably didn't bother implementing that features for 4000 series.
FG x2 is surprisingly crisp now a days, but pushing beyond 3 is hard.
according to kal its a driver feature so it can work on a 4090 but also as he said it doesnt work well on his 4090 so he keeps it off
Yeah, if nvidia chooses to implement it.
it is on according to the frame time graph but as kal said its probably not working correctly
FG time graphs and working. ๐คญ
afaik frame graphs may not show it, as they are before the driver shows the frame.
Ya
๐คฃ
dude
you just deleted the whole code, including features
stop for a second and think pls ๐
sry...
it's really a 5m thing if you read the code
This looks exactly the same as Slop AI on full auto I run.
Yeah, you need to understand the code first, and give it clear instruction on what to do.
pls try, I know you can ๐
that's the matching point between the reshade shader
and the simplied func i gave u
u just need to add the saturation expansion below
I will take another crack at it tomorrow. I'm far too tired so i'm not absorbing anything.
Just to be clear on that first one. Itโs not that it wasnโt functional, I just removed far more than I needed too. Right?
stop to understand the code
and port the new per channel expansion to it
no need to change anything else.
instructions are above.
I don't have a 5000 series card, no.
Not a sound financial investment when I already own a 4090 ๐
If I were that foolish with my money, I'd have no money.
Ngl, MFG would be quite useful. Unfortunately, I can't render 280 fps, on 144hz screen.
Yeah, so, in otherwords... not useful ๐
You need to not be bottlenecked by your display's refresh rate for mfg to make sense.
It will be useful on the new dp 2.1 display I'm going to buy.
I'm waiting for a good one to be released.
I've been waiting a few years, so any time now.๐
I would do it, but my editor tries to remove all spaces.
i want to confirm - low latency mode - pace game simulation thread is flip metering on? i have 5090 and wanna try with it on
What kind of display are you looking for?
if one is bottlenecked by dispaly refresh wouldn't generated frames go to waste?
Replacement for pg32uqx.
1400 max nits (or at least 600 nits sustained), 250hz+, 32 inch, properly working gsync. dp 2.1
thats going to take awhile for OLED.
its too bad there isnt much research for miniLEDs anymore
everythings OLED
@tame dock why is he saying to use MFG if your display refresh rae is the issue, when do you think MFG makes sense? Thank you
Afaik, 5000 series have flip metering on by default. "low latency mode - pace game simulation " offers lowest latency, so you realy only on gpu driver to do frame pacing.
got it.
However, I don't expect frame pacing to be perfect in that case, knowing how things work. so DCFrameLock, may be better, needs to be tested.
Yes, Kal is saying "not so useful", because MFG frames would go to waste.
So don't use MFg? Or when to use it
The conversation was about upgrading 4090 to 5090, to get MFG. Which is pointless for me, but wouldn't be if I had the right display.
Hence, I'm waiting for new display, before I consider 5090.
Ok, i understand now,
does nayone know a good reason to use MFG vs Dynamic resolution scaling
like when to use which one
Yeah, so you don't go over max refresh rate.
stupid question: why do i care if frames are wasted
Or, when you go into a scene, with healy gpu load, GPU can now change FG mode.
GPU can now change FG mode? thanks
wasted power for once, bad frame pacing as well.
ah thanks
what did this mean about gpu can now change FG mode
dynamic version?
Afaik, that's what dynamic frame gen is going to be.
You could do it manually, per each scene, just go to menu every few minutes, not a big deal.
smart
in death stranding 2 i did notice when i set to p=1 i was getting stutter whenever the camera changes angle in cutscenes or when go into menus. setting it to p=2 fixes it. this was on yesterdays build. going play more D2 tonight and see
This depends on the cpu+game load, ideally I would adjust the q parameter to match it.
@tame dock why is there a second framerate limiter now for FG don't we gotta turn off flip metering somehow first?
I added it to test it out, to see how useful it is.
I'll be using it for some time with different presents, to see if it improves things or not. If it doesn't I'll remove it. I probably should have added it to [experimental] section.
Point taken.
I planend for fractional modes, like p=1.5, etc. I didn't implement those.
And, ideally later p=auto based on statistical analysis.
i tested p1, 2, and 3 and they all had stutter when entering and leaving the inventory screen. low latency mode works fine. other games like RE9 no problem
It's often due to games turning off FG in inventory. It's probably worse for 3x/4x.
i see.
I'll have to add detection when FG turns off itself.
while playing its fine.
Technically, FG is still enabled, but game isn't use it. So it's a different api.
I have an idea which one it is, it's probably the callback from NVAPI I need to override.
Easy enough, I'd show you SK's code, but... I know that won't end well ๐
It's NGX parameters.
i cant imagine the work to write these kind of software. so many different games doing different shit lol
I'll have to check, it's not the "DLSSG.EnableInterp".
It's two things. EnableInterp and OFA
Well, I don't query "DLSSG.EnableInterp", every frame, so maybe it changes.
lastFrameGen->Parameters->Get ("Enable.OFA", &uiEnableOFA);
lastFrameGen->Parameters->Get ("DLSSG.EnableInterp", &uiEnableDLSSGInterp);
If both of those things are set, and the DLSSG feature has run within the past 8 frames, SK considers frame gen active.
By run, I mean "EvaluateFeature" was called.
Ah, I was only checking GetUI/GETI, etc.
This will also tell you info about MFG.
DLSSG.MultiFrameCount
Ignore DLSSG.NumFrames, dunno what that is, it's a misleading thing that has nothing to do with MFG ๐
Yes, that's what I use.
The checks I do, work when game turns on/off FG through settings.
It's just the menu that doesn't work, because I didn't hook slEvaluateFeature.
Errr... I don't have a hook on that either.
That's just kind of a higher level wrapper over NGX_EvaluateFeature
NVSDK_NGX_D3D12_EvaluateFeature
Better to use NGX, I think. Because Streamline isn't the only possible implementation of this stuff.
Should triple buffering be on in game when using DC / Framerate limiter
Thanks, this fixed the witcher 3 issue.
v0.13.10 (2026-03-25)
- [bugfix] [hooks] Fixed FPS getting halved with Frame Generation in The Witcher 3 - Display Commander now updates DLSS-G interpolation state on all NGX Evaluate paths, preventing the FG status mismatch that could cause half-FPS behavior in The Witcher 3.
Details:hooks/nvidia/ngx_hooks.cpp.
^
@placid topaz I'll later have to figure out what to do about reflex, when "Low latency + boost" is turned on, the fps drops. Whenever I should remove boost option, add warning, or a fix for that.
@lunar locust You may also want to try the fix for FG's fps getting halfed in menus.
I should check whever it's the same case for Special-K.
A lot of people have been asking about boost dropping fps. (I should at least add warning)
its a reflex issue imo
This also is a bad UX. As, people don't know that's supposed to not work.
thats why i always use reflex just set to on
plus boost doesnt provide real benefits
like 2ms lower latency?
its 0 to my eyes
It's useful for nvidia's marketing team. They want to show how low latency they can get.
It's basically persuing latency metric for no benefit to the player.
1 or 2?
"low latency + boost", is it better to say "often doesn't work" or "game/driver dependent" or " limited support"?
or maybe (requires game's support)
or (not recommended)
maybe just "can cause issues"
i didnt use fg very often when i was using my old 4090
On my 5090 though i think even with the regular reflex cap
Its smooth enough
no vr flicker or whatever
maybe flip metering does work as intended
v0.13.11 (2026-03-25)
- [ui] [settings] Clearer warning for Low Latency + Boost mode - Updated the Reflex mode label text to explicitly warn that Low Latency + Boost can cause issues, helping users choose safer defaults when a game behaves poorly with boost enabled.
Details:settings/main_tab_settings.cpp.
i dont really play w3 anymore since i 100%'d it but i can test for sure, some time later today probably
I mean, other games were also affected with fps being halfed in the UI.
Death Stranding 2 is still broken.
I don't have any warnings. Boost does cause problems in some games.
I trust users are smart enough to fiddle with the setting if something doesn't seem right.
People have been asking for a while, as to why boost doesn't work. I may as well add warning.
I'll probably only print this warning, for games without native reflex.
My dudes, Special K Perceptual HDR is so bright it feels like it's defeating my ABL lol
is it doing something crazy? It's so bright i have to look away some times
like it's fun i'm not complaining just curious
is that even possible?
It doubles max brightness with default settings.
does that mean paper white or peak?
the peak, the average may also increase depending on the scene, so this may not be ideal Oled monitors.
You may want to decraese brightness in general, if needed.
it's like stunning brightness
like that i hadn't seen out of my TV
if i want to impress someone i will use this
then turn it off b/c i don't want to age the panel! lol
I'm using mini-led display, so that's not an issue for me.
For some games, it may be too bright, especially if you use RenoDX.
It's meant to games, that even with RenoDX, aren't bright enough.
v0.13.12 (2026-03-26)
- [bugfix] [hooks] [compatibility] Fixed FPS drop in UI in Death Stranding 2 - Improved NGX/DLSS-G parameter handling so UI-triggered frame pacing drops are avoided, fixing FPS degradation seen in Death Stranding 2.
Details:hooks/nvidia/ngx_hooks.cpp.
Display Commander - Changelog
I renamed this topic, to have the changelog, plus versions. This will make it easier to get past version, and see the changes, as they won't be mixed with chat.
I reorganized everything to be in https://discord.com/channels/1408098019194310818/1486668882776293558, with the clear description. Sorry, for making things complicated. Unfortunately, I dont' see how I can fix the landing page, first post of this discussion.
No it's not.
Both Perceptual Boost profiles in SK are targeting 540 nits.
540 nits paper white?
What's the difference in the two profiles? Thanks
Paper white? No.
Peak white.
The 2nd profile in SK has higher black level, for those who aren't into crushing all black detail out of existence.
v0.13.13 (2026-03-26)
- [bugfix] [settings] Turned off HDR10 / scRGB color fix by default - Disabled the default per-game
AutoColorspaceoverride so SDR titles aren't forced into HDR/scRGB color space, reducing washed-out/incorrect SDR colors.
Details:src/addons/display_commander/res/game_default_overrides.toml.
It just feels like just doubling my peak white setting in RenoDX won't create nearly the same brightness that this did..any thoughts there?
@tame dock your version of the shader has three profiles, correct? What is the third one, or what is the difference between the three thank you!
It's not designed to be used with HDR software.
If you applied it to HDR, it would multiply the peak brightness by ~6.75x
Very much unusable.
The third is based on rewritten equations Special-K was using, but completely rewriten to have strength slider from 0 to 2.
Other profiles profiles are other algorithms I experimented with.
Perhaphs, I should have created my own repo for Auto-HDR shaders or Special-K Perceptual Boost. And, if Kailden doesn't mind, make it into it's own reshade effect exactly as it is.
Thanks, and this is the profile you recommend to use on games that aren't bright enough even after RenoDX? B/c that's exactly how i used it lol
That's what I found works the best. I often turns it on 2d art/movies inside the game, which RenoDX doesn't upgrade.
@wise grove I plan to put it into it's own repo. Then people can compare it to other AutoHDR solutions, give feedback.
That's great!
Ifrc, profile 1 is SpecialK v1 preset, profile3 SpecialK v2 preset equivalent.
didnt know that
i was using srgb instead when something was looking crush 
Later, I can try putting Special-K algorithms as they are, if @placid topaz doesn't mind into a separate shader. This would allow people to explore / improve formulas a bit more.
no i dont think its needed tbh, why would we use sk hdr as a shader 
In games, where Special-K doesn't work.
Also, it would allow to do comparisons between RenoDX/Pumbo AutoHDR/SpecialK's Perceptual Boost.
Anyway, it's just an idea.
@tame dock So something I'm having is that if I click Display Resolution in DC it has begun causing a cdrash so I can't access them,
How do I delete my DC settings so I can restart with defaults?
I changed something in there I would like to change back but i can't access it please thank you
You can delete DisplayCommander.toml from game directory. If you have DisplayCommander.log, I can look a it, which game is causing issues?
glad to see DC back in action. 
if someone could give me some concrete instructions re what to test and what to look for - ideally something i can record/log and not just rely on my eyes for, id be happy to test the impact of flip metering (running a 5090). tbh so far my single biggest experience re flip metering has been that it made hella positive difference re FG frame pacing in AC Shadows, but as @placid topaz likes to remind @opaque knoll and me that game was fucked half ways to Sunday at launch (like... having FG with no working reflex markers lmao) so might not be the best representation of "standard" or expected behaviour
[insert my forums died for this rant from the other day, cant remember what discord server or channel or thread]. Discord is great for some things - but in depth technical discussions where you sometimes wanna go back and find out how someone solved some niche issue four years ago? yeah so glad we're doing that on discord now ๐ ๐ซ
afaik boost (theoretically) provides a benefit - youre trading lower FPS for less latency in CPU bound scenarios. kind of a multifaceted issue bc i think a lot of peeps chuck it on without understanding that you will get less FPS by design in some scenarios, which is a comms/understanding issue. but Polly pointed out the other issue which is that at least in my experience (1) the latency benefit it provides in edge cases tends to be so minimal that it does not outweigh the downside of (2) it being so poorly implemented in many games that it seems to cause not, slightly lower FPS for slightly better latency, but massive FPS issues even in non-CPU-bound scenarious. TLDR it just doesnt seem to work very well, or isnt implemented well by devs or nvidia, even in its vanilla state
Display Commander internally collects various frame statistics data. I was planning to add a way to export that data so it can be analyzed, kind of like CapFrameX.
I have something in mind, I'll start by adding on option to enable/disable flip metering. Then I can work on adding new overlay/way to export the data for analysis.
In some games my fps was dropping to 30 with boost enabled. I think boost is wrongly configured for some reason. Warning is to help users avoid headacke, knowing it may not work.
Likely, game is not doing something required for boost. I'll add to the todo list to check it out.
The official Reflex docs explain that Boost isn't compatible with all games, if the render and simulation threads are decoupled in some engines this will just cut framerate in half.
Almost nobody reads those though, even fewer now that Streamline exists ๐
Most games only have Reflex at all because Streamline implements it, and so devs know next to nothing about how it works. They just have an on switch.
Interesting, Lost of games have both decoupled, from the stats I see.
v0.13.14 (unreleased, needs testing)
- [bugfix] [hooks] [ui] Hotfix for incomplete FG detection from v0.13.12 - Corrected the Frame Generation (FG) detection logic so Display Commander more reliably identifies when FG is actually enabled, fixing cases where
0.13.12did not report FG state properly.
Details: updated DLSS-G / FG detection logic used by runtime status reporting.
Hey there, Display Commander doesn't seem to work for me for Jedi Fallen Order, game fails to boot, any ideas
I'm investigating the issue.
Awesome!
can you try this version? #1484495867586281493 message
Does not seem to boot, sorry ๐
Can you send me the changelog?
Thanks. The issue I was investigating locally was unrelated, just bad renodx mod.
I am reinstalling app to try to isolate
do you have reshade.log as well?
Can you try this fix?
Edit: This seems to be unrelated.
It looks like for som reason device was initialize and then destryoted, I wonder what's that about.
Actually, this may help.
02:48:39:869 [25692] | INFO | last Windows message processed: never
02:48:39:869 [25692] | INFO | Continuous monitoring last looped: 29.00 s ago
02:48:39:869 [25692] | INFO | Continuous monitoring current section: running_games_cache_1s (stuck here if not sleeping)
me no understand lol
v0.13.15 (2026-03-27)
- [bugfix] Removed deadlock in running-games refresh path - Fixed a freeze/hang issue caused by
RefreshRunningGamesCache, so game list refresh no longer deadlocks and the addon remains responsive.
Details: synchronized refresh flow to avoid lock-order contention during running-games cache updates.
The issues was caused by the games tab. I'll remove it.
v0.13.16
- [removal] [ui] Removed running-games process controls from Games tab - Simplified the Games tab by removing the session process list/actions (focus/minimize/restart/stop/kill), keeping Steam launch management only.
Details: removedprocess_window_enumerator.*and deleted related UI/actions fromui/new_ui/games_tab.cpp; also removed remaining debug/init references inadvanced_tab.cppandmain_entry.cpp.
v0.13.17 (2026-03-27)
- [cleanup] [compatibility] Build system and includes - Addon sources no longer assume the whole
display_commanderfolder is on the compiler include path: headers use explicit relative paths. CMake lists repoinclude/and third-party deps separately so MSVC does not get a fake-Iโฆ/SYSTEMpath. Config files that use toml++ in โno exceptionsโ mode are handled correctly (parse_result/parse_error::description()).
Details:src/addons/display_commander/CMakeLists.txt;#includeupdates acrossconfig/,display/,hooks/,ui/, etc. Optional Release IPO/LTO can be enabled at configure time to shrink the DLL later (see CMakeDISPLAY_COMMANDER_ENABLE_IPO).
v0.13.18 (2026-03-27)
- [removal] [ui] Standalone / independent UI removed - Temporatiliy removed Stanalone / Indepedent UI in attempt to fix the build scripts.
v0.13.19 (2026-03-27)
- [hooks] [settings] DbgHelp hooks off by default - Display Commander no longer installs MinHook detours on the processโs
dbghelp.dllunless you turn that option back on in hook suppression. That avoids interfering with games and tools that rely on DbgHelp for stacks or symbols.
Details: defaultDbghelpHookssuppression is now enabled insettings/hook_suppression_settings.cpp; internal stack traces still use the privatedbghelploader.
v0.13.20 (2026-03-27)
- [ui] [settings] Higher FPS limit slider maximum - The Main tab FPS limit sliders can now be set up to twice the previous maximum (still derived from monitor refresh data), so you can choose higher caps when needed.
Details:UpdateFpsLimitMaximums()insettings/main_tab_settings.cpp.
v0.13.21 (2026-03-27)
- [cleanup] Incremental builds - Removed CMake
BUILD_DATE/BUILD_TIMEcompile definitions so ordinary builds do not recompile every source file after each configure. Version display still shows the full version string (including git commit count).
Details:CMakeLists.txt,version.hpp, Main tab version line.
v0.13.22 (2026-03-27)
- [cleanup] Smaller Release addon DLL - Release builds of the addon are much smaller on disk (about 9 MiB down to about 3.5 MiB in typical setups), which speeds copying and loads a bit lighter. Debug information for Release is no longer forced into the link step the same way as before.
Details:src/addons/display_commander/CMakeLists.txtโ removed MSVC/Ziand/DEBUGfor Release from shareddisplay_commander_common_options(Debug / RelWithDebInfo behavior unchanged for targets that still request PDBs where applicable).
v0.13.22 (2026-03-27)
- [cleanup] CI uses MinSizeRel - GitHub Actions
buildandnightlyworkflows configure and build the addon withCMAKE_BUILD_TYPE=MinSizeRel(MSVC/O1defaults) so published artifacts are smaller than a typical Release build.
Details:.github/workflows/build.yml,.github/workflows/nightly.yml(the separatebuild-debugjob remains Debug). - [cleanup] Smaller Release addon DLL - Release builds of the addon are much smaller on disk (about 9 MiB down to about 3.5 MiB in typical setups), which speeds copying and loads a bit lighter.
Details:src/addons/display_commander/CMakeLists.txtโ removed MSVC/Ziand/DEBUGfrom shareddisplay_commander_common_options(they applied to all configs via that interface), reducing embedded debug overhead in the shipped DLL. - [cleanup] CMake: addon build simplified - Display Commander addon CMake now uses one module target (no object/interface indirection), a single MSVC block for compile and runtime/PDB, MinHook links only
hde32orhde64for the current arch, and embedded shader RCDATA is generated fromres/shader_effect.rc.ininstead of huge inline strings and a helperwrite_shader_rc.cmakescript.
still won't boot for me
Other question: if I use VRR, why does my framerate sometimes display as higher than my panel refresh in games? Like my refresh is 120, i have VRR set in DC, and my frame rate is 125
v0.13.23 (2026-03-27)
- [bugfix] [ui] Display Commander overlay opens with hotkey - Opening the Display Commander panel with its hotkey (default: End) no longer produces a tiny window or a failed build: the overlay gets a stable minimum height, a maximum height of at least 1000 pixels (or your display height if larger), and sizing uses
ImGui::GetIO().DisplaySizeso it works with ReShadeโs ImGui exports (callingGetMainViewportfrom the addon was not linked).
Details:OnPerformanceOverlay_DisplayCommanderWindowinmain_entry.cpp(SetNextWindowSizeConstraints,(std::max)(โฆ)for MSVCmin/maxmacros).
v0.13.24 (2026-03-27)
- [bugfix] [hooks] [compatibility] FPS limiter / FG detection in Wuthering Waves (postโv0.13.12) - Frame generation was treated as off due to changes in v0.13.12.
v0.13.25 (2026-03-27)
- [removal] [bugfix] [compatibility] Removed Steam-related code - Removed anymore steam achivements/steam launcher code. Potencial fix for steam not detecting the game running.
v0.13.27 (2026-03-27)
- [cleanup] [hooks] Quieter logs - Print less to logs.
v0.13.27 (2026-03-27)
- [hooks] [compatibility] Call of Duty: Black Ops III - boiii.exe compatibility fix - Disable ChangeDisplaySettings.
v0.13.28 (2026-03-27)
- [cleanup] Faster log disk writes - Buffered
DisplayCommander.logoutput with flush on shutdown/explicit flush instead of every line, reducing disk I/O during normal logging.
v0.13.29 (2026-03-27)
- [bugfix] [hooks] D3D9Ex FPS limiter (double post-present) - Fix fps limiter requiring 2x framerate.
v0.13.30 (2026-03-28)
- [ui] More quick FPS limit buttons - Increase number of available fps limiter options shows all above 40hz.
v0.13.31 (2026-03-28)
- [ui] [hooks] DXGI flip: need two back buffers - Added a warning if user tries to set backbuffers to 1, and flip swapchain is used in dxgi.
v0.13.34 (2026-03-28)
- [cleanup] Cap vectored crash reports to prevent infinite logs - The vectored exception handler now prints full crash reports for at most 25 distinct exception addresses per process. Further unique addresses are skipped (with a throttled log) so log spam and repeated heavy stack traces cannot grow without bound when a game throws many different faults.
Details:process_exit_hooks.cpp(VectoredExceptionHandler).
v0.13.33 (2026-03-28)
- [bugfix] [critical] Sleep timer crash - Fixed a crash that could occur when the FPS limiter /
wait_until_nspath used a single shared waitable timer from more than one thread. The timer handle is now per-thread (thread_localinsidewait_until_qpc); callers useutils::wait_until_ns(target_ns)with no shared handle. Global timer variables were removed from swapchain, NVAPI delay, autoclick, and latent sync code.
Details:utils/timing.cpp,utils/timing.hpp.
v0.13.32 (2026-03-28)
- [ui] Display Settings: Misc for rarely used VSync/tearing options - On the Main tab, under VSync & Tearing (ReShade), max frame latency and backbuffer count (with live current count and flip-model hint) now live in a collapsible Misc section so everyday controls stay on one compact row.
Details:DrawDisplaySettings_VSyncAndTearing_Checkboxes_Reshadeinmain_new_tab.cpp. - [ui] CollapsingHeader styling - Misc uses the warning-style header (dark yellow bar, near-white title text). Reusable
PushHeaderColors/PushWarningHeader1Colors/PopCollapsingHeaderColorshelpers and row colors live inres/ui_colors.hpp.
v0.13.36 (2026-03-28)
- [ui] Terminology - Renamed the term "Back Buffer" to "Buffer" to avoid confusing terminology.
v0.13.35 (2026-03-28)
- [bugfix] [hooks] Flip-chain upgrade: two back buffers, not three - When enabling the experimental flip swap chain, the addon now raises the back buffer count only to 2 (the minimum flip model needs) instead of 3, reducing extra VRAM and matching the usual DXGI flip requirement.
Details:OnCreateSwapchainCapture2flip upgrade path inswapchain_events.cpp(log message aligned with the count).
v0.13.37 (2026-03-28)
- [experimental] [ui] Removed Vulkan (Experimental) tab - Tab is no longer needed.
why can i post here ๐
cause why not
am i blind or is there no GPU load % option for the overlay? that would be great
I plan to add it, I just a good place to put it in the UI.
I plan to turn off lots of hooks later, that are no longer needed. I wonder which ones people suppress.
(2) is good, (3) kind of going the wrong direction.
Was better before, when you were starting to categorize information the user doesn't need to see when configuring the framerate limiter.
Half the stuff below the slider doesn't really need to be shown to the user unless they request advanced settings.
Otherwise this all is very unfriendly and unapproachable to new users, and mildly irritating for experienced users who just want to set a slider and be done with things ๐
If you free up enough space by hiding the advanced stuff, you could fit an actual frame pacing graph there without it taking away valuable screen real-estate.
v0.13.39 (2026-03-29)
- [ui] VSync & Tearing header - The VSync & Tearing collapsible header is shown again on the Main tab (same pattern as other sections), so you can fold that block instead of it always staying expanded.
Details:DrawDisplaySettings_VSyncAndTearinginmain_new_tab.cpp. - [settings] Auto-hide Discord Overlay default off - Auto-hide Discord Overlay (Advanced tab) defaults to off, so Display Commander does not hide Discordโs overlay unless you enable it. The setting is stored as
AutoHideDiscordOverlay_default_off(previouslyAutoHideDiscordOverlay, which defaulted to on).
Details:auto_hide_discord_overlayinadvanced_tab_settings.cpp. - [ui] Advanced Settings โ Features - On the Main tab, the collapsible section previously titled Advanced Settings is now Features (behavior unchanged).
v0.13.40 (2026-03-29)
- [ui] [hooks] Reflex UI and NVAPI hooks on 32-bit D3D11/D3D12 - Added support for reflex injection in 32-bit games.
v0.13.41 (2026-03-29)
- [new feature] [ui] [settings] NVIDIA GPU utilization in performance overlay - Optional GPU util under Performance Overlay
v0.13.43 (2026-03-29)
- [bugfix] NVAPI refresh rate monitor - Fixed refresh rate graph.
looking at this again. I see where AutoHDRMaxWhite, AutoHDRExtraRatio, etc match up. That part im not getting is that maxpeakwhitenits isnt defined without copying all of that new logic, but that introduces a lot of other issues
could you help me understand? lol
I cleaned this code.
what does that mean?
i cleaned up unnecessary code from it.
Luma: float AutoHDRMaxWhite = max(MaxPeakWhiteNits / sRGB_WhiteLevelNits, 1.f);
ReShade: float AutoHDRMaxWhite = max(HDR_SOURCE_PEAK_WHITE / sRGB_max_nits, 1.f);
so i understand that this logic in the new matches with this logic in the old. and i need to include the new lines under it. but where does maxpeakwhitenits get defined
yeah i just added 3-4 lines at the bottom
to do the same AutoHDR formula, but per channel
instead of rgb luminance/average
and then blend to that by ~20% (default)
that's it.
so what u should do is add a new slider
called per channel expansion or something
default it to 20%
and add these 3 lines after the current autohdr code that is already there.
(and optionally skip that code when autoHDR was already running per channel, because there was that mode in the list already)
these 3 lines?
new:
// Calculate it again but with "per channel", which would expand gamut (not hue conservative)
float3 SDRRatio3 = SDRColor;
float3 AutoHDRExtraRatio3 = pow(saturate(SDRRatio3), ShoulderPow) * (AutoHDRMaxWhite - 1.f);
float3 AutoHDRTotalRatio3 = SDRRatio3 + AutoHDRExtraRatio3;
float3 PerChannelColorScale = safeDivision(AutoHDRTotalRatio3, SDRRatio3, 1);
return SDRColor * lerp(SingleColorScale, PerChannelColorScale, SaturationExpansionIntensity);
before:
return SDRColor * SingleColorScale;
and that's what the reshade was too
though it has more branches
cuz it could already do per luminance
or by average
or by channel etc.
@flat crater Is my PR correctly done?
i will check later
what im not understanding is a lot of these things dont exist in the current reshade.fx. SDRcolor, maxpeakwhite, etc. unless I include this section but i don't see how I would without changing a lot.
v0.13.44 (2026-03-29)
- [removal] [experimental] [settings] [ui] [hooks] Removed unused code.
v0.13.45 (2026-03-29)
- [removal] [hooks] Remove reframework specific code -- it's no longer needed.
v0.13.46 (2026-03-29)
- [removal] [experimental] [settings] [ui] [hooks] Removed unused code.
- [removal] Removed boiii.exe mod specific code -- It's no longer needed.
v0.13.45 (2026-03-29)
- [removal] [hooks] Remove reframework specific code -- it's no longer needed.
v0.13.56 (2026-03-29)
- [ui] Shaders paths UI - Added a new UI control in the Addons tab for shaders/textures paths, making it easier to enable or disable global shader path usage from the interface.
- [cleanup] Dropped dead code - Removed a large amount of unused/dead code paths to simplify maintenance and reduce project complexity.
v0.13.57 (2026-03-29)
- [new feature] [ui] [settings] Addon URL download list in ReShade tab - You can now keep a list of addon URLs, add/remove rows with
+/-, and click Download next to each URL to fetch addons directly into Display Commanderโs global ReShade Addons folder.
Details: implemented URL list persistence (ADDONS.AddonDownloadUrls) and per-row download/install flow insrc/addons/display_commander/ui/new_ui/addons_tab.cpp; successful downloads are auto-enabled inADDONS.EnabledAddons. - [ui] [settings] ETag update checks for addon URLs - The URL downloader now remembers server ETags after download and can check if newer files are available using Check per URL and Check All URLs from the same toolbar row.
Details: added persisted ETag map storage (ADDONS.AddonDownloadEtags) and WinHTTP HEAD-based comparison insrc/addons/display_commander/ui/new_ui/addons_tab.cpp. - [cleanup] Shared UTF/string helpers moved to utils - UTF-8/Wide conversion and ASCII trim helpers used by addon URL downloads are now centralized in a reusable utility module to avoid UI-local duplication.
Details: addedsrc/addons/display_commander/utils/string_utils.hppandsrc/addons/display_commander/utils/string_utils.cpp;src/addons/display_commander/ui/new_ui/addons_tab.cppnow usesdisplay_commander::utilshelpers.
v0.13.58 (2026-03-29)
- [settings] [ui] [compatibility] ReShade screenshots/shader-path toggles are now local and instant - The Addons tab checkboxes for
./Screenshotsand global shader/texture search paths now use local Display Commander config keys instead of marker files, and apply to ReShade immediately when clicked.
- more cleanup
v0.13.59 (2026-03-29)
- [hooks] [ui] Flip Metering detection indicator in DXGI Control - Display Commander now shows a simple
Flip Metering: ON/OFFstatus in Main tab DXGI Control, so you can immediately see if that path was queried in the current session.
v0.13.60 (2026-03-29)
- [cleanup] Version bumps now rebuild less code
v0.13.63 (2026-03-31)
- NVAPI Reflex latency stats in overlay - Added an optional NVAPI-backed PC latency and GPU frame time line to the performance overlay, powered by
NvAPI_D3D_GetLatencyand Reflex markers.
Details: Enabled via the Main tab โ Test Overlay โ NVAPI stats subsection; values are smoothed over the NVAPI frame report window and only queried when the checkbox is on (to avoid extra driver calls when unused)
v0.13.64 (2026-03-31)
- [cleanup] [hooks] FPS limiter changes reverted - Recent FPS limiterโrelated NVAPI and Vulkan low-latency hook work has been rolled back for now so behavior matches the prior release line while that approach is revisited.
Details:nvapi_hooks.cppandnvlowlatencyvk_hooks.cppno longer carry the experimental FPS limiter path from the last few patches.
- Fix for DC not loading as addon.
v0.13.66 (2026-03-31)
- [bugfix] [settings] FPS limit load vs slider max - If your saved FPS Limit or Background FPS Limit is higher than the current slider maximum (from monitor refresh), it is no longer reset to the default on load; the saved value is kept. Sliders still cap edits to the current max.
Details:FloatSetting::preserve_over_max_on_loadinsettings_wrapper.*; enabled forfps_limitandfps_limit_backgroundinmain_tab_settings.cpp.
v0.13.69 (2026-04-01)
- [bugfix] [settings] [ui] Fixed DLSS quality preset override with Frame Generation - Fixed a case where changing DLSS quality preset in-game could fail when Frame Generation was active, so preset changes now apply correctly during gameplay.
v0.13.70 (2026-04-01)
- Move Audio Control to a separate module, not running by default anymore.
you probably should keep the "mute in background" option, its a part of window management
It was always under "audio control" section.
There is nothing preventing it to be in window control section though. If that's a good idea.
I can draw "Audio control" within "Window Control".
SK does that
its in the window management section instead of audio section
probably just seperate them
There is nothing preventing the DC Core, from calling a plugin (if loaded), and requesting to draw audio subsection within "Window Control".
im fine with both though
Also, it's a question whenever Audio Control should be on by default or not, etc.
personally i only use mute in background
I use hotkeys to quickly mute the game or unmute it.
I may remove VU bards from overlay for audio.
speaking of hotkeys, i think they should be off by default
Possibly, I use them, so before making them off by default, I want to add some UI to turn them on/off globally easily.
I'll add it to the todo list.
This needs some refactoring, to make sure hotkeys code doesn't run by default at all.
well i think you should fix reflex injection first
its better to fix bugs first
then improve stuff
Definately, though I had to finish the audio first, since the change was in the middle.
v0.13.71 (2026-04-01)
- [new feature] [ui] [settings] [hooks] Unclip Cursor - You can turn on Unclip Cursor in Main tab Input Control so the game cannot lock the mouse to its window (every
ClipCursorfrom the game is turned into a full release). It is mutually exclusive with Clip Cursor; if both were saved in config, Unclip is turned off on load.
Details:unclip_cursor_enabledinmain_tab_settings.*;ClipCursor_Detourforcesnullptrto the original API;continuous_monitoringavoidsRestoreClipCursorwhile unclip is on.
v0.13.72 (2026-04-01)
- [cleanup] GitHub Actions submodule checkout - Fixed build on github.
- [ui] Main tab Input Control layout - Clip Cursor and Unclip Cursor are shown on one row so Input Control stays more compact.
Details:SameLine()between the two checkboxes inDrawMainTabOptionalPanelInputControlinmain_new_tab.cpp. - [ui] Add fakefull screen option - Ranamed "Continue Rendering in background" to "Continue Rendering in background (Fake Fullscreen)"
v0.13.84 (2026-04-01)
- [cleanup] Moved Controller/xinput to it's own module. All contoller related code can be disabled completely.
v0.13.86 (2026-04-01)
- File size reduction for DC Lite build to 1.34mb from 9mb previously.
- [cleanup] [settings]
DC_NO_MODULESlinker exports - WhenDC_NO_MODULESis on, the addon linksproxy_dll/exports_addon_only.def(AddonInit+GetDisplayCommanderStateonly) instead of the full API-proxyexports.def, reducing DLL size. ReShade addon string exports remain via__declspec(dllexport)inaddon.cpp. Full proxy rename (d3d11/dxgi/โฆ) still requires the default build withoutDC_NO_MODULES.
v0.13.100 (2026-04-01)
- [bugfix] [ui] Fixed FG rate display for 5x/6x Frame Generation modes - The performance overlay now shows the correct FG multiplier for 5x and 6x instead of incorrectly dropping to
OFF.
v0.13.101 (2026-04-01)
- [bugfix] [ui] Restored "Inject Reflex" checkbox - The Inject Reflex option is visible again.
v0.13.102 (2026-04-01)
- [bugfix] PCLStats not working in injected reflex - Fixed sending PCLStats while using injected reflex.
- [clenanup] [ui] Cleaned up UI elements from advanved tab - Removed unneeded debug information from advanced tab.
- [new feature] [ui] Debug Reflex / PCLStats tab (build-gated) - Added a Debug Reflex / PCLStats tab when building with
bd.ps1 -DebugTabs(DEBUG_TABS/DISPLAY_COMMANDER_DEBUG_TABS)
v0.13.103 (2026-04-01)
- [new feature] [build] Display Commander Lite on GitHub - There is now an optional Lite download on GitHub if you do not need in-game audio or controller features. It works the same way as the normal addon (including using it as a renamed game DLL if you already do that). Pick 64-bit or 32-bit to match your game:
zzz_display_commander_lite.addon64orzzz_display_commander_lite.addon32on Latest Build or Nightly. The main README also has download links.
v0.13.104 (2026-04-01)
- [cleanup] [settings] Performance overlay setting name - The main-tab toggle is stored as
show_performance_overlayinstead ofshow_test_overlay. If the new key is missing, the old key is still read once when settings load so existing configs keep the same on/off state. - [ui] don't show performance overlay for first 100 frames - For compatibility reasons.
v0.13.104 (2026-04-01)
- [cleanup] [settings] Performance overlay setting name - The main-tab toggle is stored as
show_performance_overlayinstead ofshow_test_overlay. If the new key is missing, the old key is still read once when settings load so existing configs keep the same on/off state. - [ui] Performance overlay delayed after first present - The in-game performance overlay stays off until 2 seconds of monotonic time (
get_now_ns) after the firstg_global_frame_idincrement on the present path, instead of the first 100 frames. Display Commander overlay window when the UI is open is unchanged.
v0.13.105 (2026-04-02)
- [crashfix] Fix crash while showing fg status in OSD - Fix crashes caused when adding support for 5+x FG mode.
- [cleanup] [compatibility] DLSS-G FG multiplier as integer -
DLSSGSummaryLite::fg_modeis an int: 0 = off, -1 = FG on without NGX MultiFrameCount, โฅ2 = N for Nx (FPS limiter and Reflex present-delay divide by N). Any valid MultiFrameCount maps to multi_frame_count + 1 when โฅ2 (2x through 7x+). The oldDLSSGFgModeenum is removed; overlay FG line usesGetDLSSGSummaryLite()so it stays in sync.
v0.13.111 (2026-04-03)
- [settings] Make config entries sorted - Saving
DisplayCommander.iniwrites sections and keys in sorted order for easier diffs and editing.
v0.13.112 (2026-04-03)
- [cleanup] [ui] [settings] ReShade tab as internal module - Moved Reshae tab, as it's own module, separate from the rest of the code, not preset in DC Lite.
v0.13.113 (2026-04-03)
- [cleanup] [settings] [compatibility] ReShade ini overrides removed from DC Lite
v0.13.114 (2026-04-03)
- [bugfix] [hooks] NVIDIA overlay latency - Fixed the NVIDIA overlay not showing correct Reflex latency. Prevent intiializing PCL_STATS for games using native reflex.
v0.13.115 (2026-04-03)
- [bugfix] [hooks] PCLStats ETW hooks restored - Added safety guards, to prevent injected reflex interfearing from native reflex.
v0.13.120 (2026-04-03)
- [bugfix] [hooks] Native Reflex + FPS cap no longer stuck at half rate - Fixed issue causing game to run at half fps, when using native reflex in Default mode / pace native frames.
v0.13.117 (2026-04-03)
- [new feature] [ui] [hooks] Change FG rate on the fly - Only in debug build, testers needed.
v0.13.126 (2026-04-03)
- [ui] [osd] Show latency in OSD shows data from NVAPI if available by default - Simplified UI with DC lite in mind.
- [ui] [osd] Updated latency estimate for PCL (AV) latency to be more accurate
v0.13.127 (2026-04-03)
- [ui] [osd] Improved latency formula to more closely match PCL(AV) from nvidia overlay
v0.13.130 (2026-04-03)
- [ui] [settings] Performance overlay: separate RAM and VRAM - Part of Overlay Rework.
v0.13.131 (2026-04-04)
- [cleanup] Log privacy: Windows profile name redacted - Log file lines no longer include your user folder name.
v0.13.133 (2026-04-05)
- [bugfix] [critical] Crash fix: NGX parameter map - SRWLOCK around
UnifiedParameterMapso UI reads and hook writes no longer race;get_all()uses a snapshot. Details:globals.hpp.
v0.13.134 (2026-04-05)
- [ui] [settings] Hotkeys tab visible by default - New installs and configs without
show_hotkeys_tabnow show the Hotkeys tab without turning on Show All Tabs or Show Hotkeys Tab. Existing savedfalsestays hidden. Details:main_tab_settings.cpp.
v0.13.135 (2026-04-05)
- [new feature] [ui] NVIDIA driver DLSS render presets (DC Full only) - Added showing NPI overrides.
v0.13.137 (2026-04-05)
- [removal] [ui] [settings] Performance overlay: DLSS Render Preset show now SR/RR presets including driver overrides (DC full only) -
v0.13.136 (2026-04-05)
- [ui] [settings] DLSS SR/RR: one line for driver + Display Commander - OSD improvements
v0.13.146 (2026-04-05)
- [bugfix] [ui] Driver DLSS preset (DRS) cache no longer expires on a timer - The NVIDIA driver profile read used for SR preset (DRS+DC) / RR preset (DRS+DC) in the overlay and DLSS UI was refreshed about every three seconds, which could cause brief stutter.
v0.13.147 (2026-04-06)
- [bugfix] [ui] Frame Generation (DLSS-G) detection: fewer false positives - Fixed logic for detecing whenever Frame Generation is on.
v0.13.148 (2026-04-06)
- [ui] SR/RR preset overlay: show version used based on data stored - Older versions that need to be updated have (UPDATEME).
v0.13.149 (2026-04-06)
- [hooks] Vulkan support - improved Vulkan support for DLSS/Frame generation features.
v0.13.150 (2026-04-05)
- [ui] [settings] Animation error on main Performance Overlay -Added showing animation error, next to latency error on performance overlay.
- [ui] [features] Enabled showing latency stats on 32-bit as well
v0.13.151 (2026-04-05)
- [ui] Performance overlay: add show Resolution - Removed "show DLSS Resolution" in favor of "Show Resolution".
v0.13.153 (2026-04-06)
- [ui] Performance overlay DLSS status - DLSS Status line now shows only On or Off (no RR / DLSS-G suffix; use FG Mode, DLSS Quality, or driver preset lines for detail).
v0.13.155 (2026-04-07)
- [new feature] [ui] Fix getting information about DLSS preset overrides
v0.13.156 (2026-04-07)
- [ui] [settings] Shaders tab: all-games toggle for global config marker - Added a new checkbox in the Shaders section to enable or disable the all-games config mode directly from that tab, so users do not have to switch sections to manage it.
v0.13.157 (2026-04-07)
- [new feature] [settings] Global shaders marker
.DC_GLOBAL_SHADERS- Added marker-based global enable for ReShade shader/texture search path injection, so users can turn it on for all games without relying on per-game config checkboxes.
v0.13.159 (2026-04-07)
- [bugfix] [settings] Resident Evil 2 (
re2.exe) and ReShade input blocking - Default overrides no longer turn on Continue rendering in background forre2.exe, so the game does not keep receiving input when ReShade would block it (overlay / click-through behavior matches expectations).
v0.13.163 (2026-04-07)
- [bugfix] [ui] Native FPS now works even when FPS Counter is off - You can enable Native FPS independently, so the native Reflex-based FPS line still appears even if the regular FPS Counter line is disabled.
v0.13.164 (2026-04-07)
- [ui] Added experimental fps limiter -- Added "low latency mode - experimental", seems to work well in Death Stranding 2, Wuthering Waves, Crimson Desert
v0.13.165 (2026-04-09)
- [ui] [hooks] [compatibility] Vulkan init timing warning in DLSS Control - The Vulkan DLSS Control section now warns when
vulkan-1.dllwas not present duringDLL_PROCESS_ATTACHinit but appears by the first UI draw, helping to explain that Display Commander is misconfigured.
v0.13.166 (2026-04-09)
- [ui] [settings] In Vsync & Tearing show presentation model - Bring back showing presentation model in VSync & Tearing section.
v0.13.167
- [new feature] [ui] [experimental] PresentMon ETW/flip state in VSync & Tearing - Added back showing flip state.
v0.13.168 (reverted to 136)
v0.13.167 (2026-04-10)
- [feature] [ui] Controller remapping now includes navigation/system keys - Added missing keyboard targets to the remapping picker so you can map controller buttons to Print Screen, Scroll Lock, Pause, Insert, Home, Page Up, Delete, End, and Page Down.
v0.13.169 (2026-04-10)
- [bugfix] [ui] Smoother Audio control and VU overlay - Device info, level meters, and per-channel volume readouts are updated on a background thread instead of hammering Windows audio APIs every overlay frame, which reduces stutter when the Audio section or VU bars are open.
v0.13.173 (2026-04-10)
- [bugfix] [settings] Auto Windows HDR setting key - Rewrote the implementation to work properly.
v0.13.171 (2026-04-10)
- [bugfix] [ui] Main tab Audio Control respects Show Audio Control - With Show Audio Control off, the Audio Control block no longer appears under Features (Module Features) or duplicated at the bottom of the Main tab. When on, a single Audio Control section appears in the optional panels area only.
v0.13.174 (2026-04-10)
- [settings] Auto Enable Windows HDR earlier - DC now turns on the during DLL load, fixing issue in Death Stranding 2.
v0.13.175 (2026-04-12)
- [cleanup] Auto Windows HDR lifecycle - Fixed Windows HDR not turning off on app exit.
v0.13.177 (2026-04-12)
- [bugfix] [hooks] Fixed fps limit in Borderlands 4 in menus while using FG
v0.13.178 (2026-04-12)
- [ui] Performance overlay labels - Renamed overlay background and frame chart sliders from โTransparencyโ to โOpacityโ so the label matches the value (higher = more opaque).
v0.13.179 (2026-04-12)
- [hooks] DLSS .bin identification - Fixed detecting DLSS version to avoid when using DLSS override.
v0.13.180 (2026-04-12)
- [bugfix] Auto Enable Windows HDR in Red Dead Redemption 2 - Fixed code that prevented RDR2 from starting when this feature is enabled (no HDR revert on swapchain/device destroy; exit still reverts).
v0.13.181 (2026-04-12)
- [bugfix] [ui] Performance overlay corner offset - Margin is not aligned with top left without marging at 0px.
v0.13.183
- [new feature] [ui] [experimental] PresentMon ETW/flip state in VSync & Tearing - Added back showing flip state.
v0.13.183
- [new feature] [ui] PresentMon flip in performance overlay - Added showing flip state in to the Performance Overlay.
v0.13.185
- [bugfix] [hooks] DLSS
.bintracking keeps newest loaded model - When multiple NGX.binmodules map to the same DLSS kind, tracking now prefers the highest NVIDIA Deep Learn version (numeric dotted compare, e.g.2.3.4.0 < 310.1.0.0), withversions/<N>path fallback when version metadata is unavailable.
- [ui] Cleanup DLSS control UI
v0.13.186
- [settings] [compatibility] ReShade overlay clock - Display Commander does not change
OVERLAY.ShowClockreshade setting anymore by default.
v0.13.187
- [bugfix] [ui] Display Commander not opening with hotkey - Fixed bug when it was impossible to open Display Commander's UI through hotkey if the window was minimized by clicking on the header.
v0.13.188
- [bugfix] [settings] [compatibility] Auto dock DC window within Reshade - Rewritten code to auto change reshade's config to automatically dock DC.
Display Commander v0.13.189 (stable summary)
- Reduced size from 9mb to 1.6mb - Code cleanup
- Modular design - Audio / Controller / Reshade add-ons tabs are omitted in Lite version. New features can be added as plug and play.
- Crash fixes - Various rash fixed
- Windows Enable Auto HDR - rewritten feature to enable WIndows HDR on game start / turn off on game exit
- ** Performance overlay & main UI ** - Reworked UI
- ** DLSS / NGX ** - Various compatibility fixes for detection of DLSS.
- ** Feature cleanup ** - Removed experimental code / debug features from main stream build to increase compatibility
- ** FPS Limiter ** - various fps limiter improvements
- ** OSD ** - Added latency stat (based on nvidia PCL (AV) / Simulation Error - and various other improvmeents
- Lots of other improvements.
v0.14.1
- [cleanup] [settings] [compatibility] Cleanup - removed
.display_commander_installer_marker.json, which is no longer needed.
v0.14.2
- [bugfix] [settings] [compatibility] Symlink-safe log startup reset - When
DisplayCommander.logis a symlink, startup now clears the linked file in place instead of renaming to.old, so external log-link setups keep working. - [bugfix] [settings] [compatibility] Symlink-safe INI saves - Saving
DisplayCommander.ininow writes directly with truncation when the destination is a symlink, preserving the link path instead of replacing it via temp-file rename.
v0.14.5
- [settings] [compatibility] Swapchain creation delay (INI) - Optional
swapchain_creation_delayunder[CompatibilityFixes]inDisplayCommander.ini(milliseconds, default 0) sleeps the render thread before ReShade create-swapchain processing; use for games that need a pause during swapchain setup. Not exposed in the UI. - [compatibility] Local addon DLL scan: addon + game folder - Pre- and post-ReShade companion DLLs (
.dc64/.dc/.asiand.dc64r/.dcr, etc.) are discovered in the Display Commander addon directory and in the main executableโs directory (GetModuleFileNameW(nullptr)), with duplicate folders skipped so the same path is not scanned twice.
v0.14.6
** [cleanup] Remove usage and creation of display_commander_installer_marker.json
v0.14.7
** [crashfix] Fix crash when smoothmotion is enabled
v0.14.9
- [new feature] [ui] CPU process/system load in OSD - Added optional
CPU processandCPU systemoverlay metrics.
v0.14.11
- [ui] [hooks] Main tab NGX late-load warning - Add a warning when DC is loaded too late, and DLSS stats aren't available.
v0.14.12
- [hooks] Potencial workarounnd for DC being loaded late - Added workaround which should solve issues related to not detecting DLSS-FG when dc is loaded as .addon64.
v0.14.13
- [removal] [build] Display Commander Lite (
DC_LITE) removed - One addon binary again; the old Lite vs full split is replaced by modules, which are turned off by default.
v0.14.14
- [bugfix] [hooks] Late-load Streamline hook bootstrap - Fix hooking to streamline when DC is loaded as .addon64 / .addon32.
v0.14.15
- [bugfix] [ui] [experimental] FPS limiter "low latency mode - experimental" โ This option is not working; treat it as broken until a follow-up fix.

