protonscr

Inconsistent frametime/microstuttering, if `d3d9.maxFrameRate`/`dxgi.maxFrameRate` set to value less than display's refresh rate, after PR#4056 - commit 3793467

dxvkclosed
doitsujin/dxvk#5802 · opened 2026-07-20 by Digger1955 · updated 2026-07-20 · 7 comments · github
DDigger1955 2026-07-20 github

Issue: Inconsistent frametime/microstuttering, if d3d9.maxFrameRate/dxgi.maxFrameRate set to value less than display's refresh rate.

Scope: Any application (D3D8/D3D9/D3D10/D3D11, x32/x64).

DXVK versions affected: Any after PR#4056 - Limit frame rate to display refresh, specifically after commit https://github.com/doitsujin/dxvk/commit/379346751a102500a70a87e67d66941140e82040 - [util] Implement refresh rate heuristic for frame rate limiter

System information

  • CPU: AMD Ryzen 9 5950X (SMT Off, 16C/16T)
  • Display's Refresh Rate: 60 Hz, No VRR/FreeSync
  • GPU: AMD Radeon RX 9060 XT 16 GB
  • Driver:
    • AMD Software: Adrenalin Edition 25.9.1 WHQL;
    • Vulkan Headers 1.4.315;
    • Vulkan Driver 2.0.353;
    • VulkanCapsViewer_4.02 Report - AMD Radeon RX 9060 XT.json
  • Wine version: Not Applicable - Windows 10 21H1
  • DXVK version: 3.0.2
  • dxvk.conf Settings:
 dxvk.enableGraphicsPipelineLibrary = False
 dxvk.numCompilerThreads = 14
 dxgi.maxFrameRate = 30
 d3d9.maxFrameRate = 30
 dxvk.hud = full

Issue's detailed description

Screenshots of the issue:

DXVK HUD's frametimes graph comparison between DXVK 3.0.2 with https://github.com/doitsujin/dxvk/commit/379346751a102500a70a87e67d66941140e82040 and without commit https://github.com/doitsujin/dxvk/commit/379346751a102500a70a87e67d66941140e82040 -

Application and Test Scene DXVK 3.0.2 DXVK 3.0.2 without commit 3793467
WarCraft 3, Reign of Chaos Main Menu Image Image
Titan Quest Anniversary Edition, TQ Main Menu Image Image
Star Wars: The Old Republic, Character Selection Screen Image Image

Note: Such test scenes were picked, due to their consistency and repeatability. Microstuttering increases as the CPU load increases during active gameplay. Video is not provided, due to no ability to record it.

Steps to reproduce the issue:

  1. Set d3d9.maxFrameRate/dxgi.maxFrameRate to value less than display's refresh rate.
  2. Run any application (D3D8/D3D9/D3D10/D3D11, x32/x64) with d3d9.maxFrameRate/dxgi.maxFrameRate set to value less than display's refresh rate.
  3. Observe inconsistent frametime/microstuttering.

Software information

Tested Applications Info:

  • WarCraft 3 (v1.26a, D3D8 x32);
  • Titan Quest Anniversary Edition (2.10.6 - SteamDB 9739432, D3D9 x32);
  • Star Wars: The Old Republic (7.9c, D3D9 x64).

Changing any setting in application, which includes changing Window Mode (Fullscreen/Borderless/Windowed) or VSync (On/Off) does not affect the issue.

Changing DXVK's settings (using dxvk.conf), such as changing d3d9.maxFrameLatency/dxgi.maxFrameLatency, dxvk.allowFse, dxgi.syncInterval/d3d9.presentInterval does not affect the issue.

Mods/Add-ons: Not used in any application.

Apitrace file(s)

No ability to provide Apitrace file(s).

Log files

war3_d3d9.log
TQ_d3d9.log
swtor_d3d9.log

Assumptions and Suggestions

I guess that the reason of the issue is that refresh rate heuristic for frame rate limiter is:

  1. Not disabled, even if user already set FPS Limit value, which is not correct.
  2. Creating significant pressure on frame pacing stability, due to very small intervals between heuristic calculation, i.e. intervals are calculated too often.
Ddoitsujin maintainer 2026-07-20 github

Don't use the DXVK limiter when there's alternatives available. It is known to be bad.

From a technical PoV this smells like BS anyway, the commit in question doesn't change the underlying implementation and doesn't even do anything in your case.

I'm just going to remove the ability to set the limiter at all at this rate, just keeping it for app profiles. Fucking tired of this shit.

DDigger1955 2026-07-20 github

@doitsujin

And how do you explain the differences in frame time? If you are stating it is BS.

And how do you explain that, when I reverted the commit in question - there is no issue?

Ddoitsujin maintainer 2026-07-20 github

What differences in frame time? You're CPU-bound. You're talking less than 2ms between supposed 'good' and 'bad' results at a 30 FPS limit, which is... honestly less than expected given that we measure GPU execution, which is affecrted by power management. You're not mentioning if the games in question are 30 FPS limited or if there's external limiters or anything. There's also no correllation between CPU frametimes, GPU frametimes and actual presentation frametimes.

Ddoitsujin maintainer 2026-07-20 github

Just debug it yourself at this point, I don't fucking care about this feature and I just want to remove it. Only thing it has ever done is make people complain.

Ddoitsujin maintainer 2026-07-20 github

Not seeing any difference on my end fwiw.

DDigger1955 2026-07-20 github

@doitsujin

What differences in frame time?

Which are shown on screenshots.

You're talking less than 2ms

I am taking about frametime graph consistency, i.e. consistency of actual time of frame rendering and presenting.

You're not mentioning if the games in question are 30 FPS limited or if there's external limiters or anything.

I provided all the information that is required by your bug_report.md template. Tested applications were limited only by DXVK FPS Limiter. Note: WarCraft 3 v1.26a does not have setting for FPS Limiting at all.

Just debug it yourself at this point, I don't fucking care about this feature and I just want to remove it. Only thing it has ever done is make people complain.

Never seen any complaints and never had any, up to the aforementioned PR. And I use 1.10.x on 2nd PC. Which does not have the aforementioned problem in the same scenario.

Not seeing any difference on my end fwiw.

Unfortunate, but expected. You may close the issue.

WWinterSnowfall 2026-07-20 github

Only thing it has ever done is make people complain.

DXVK's frame limiter has ruined my saw blade! 🐸

IGI 2 - uncapped IGI 2 - 60 fps capped with DXVK
Image Image

Jest aside, maybe it's not perfect, but it's certainly useful.

Upstream links