Skip to content

Fix incorrect advice on VRR framerate capping in Fixing jitter and stutter#12066

Merged
mhilbrunner merged 1 commit into
godotengine:masterfrom
Calinou:jitter-stutter-vrr-framerate-cap
Jun 25, 2026
Merged

Fix incorrect advice on VRR framerate capping in Fixing jitter and stutter#12066
mhilbrunner merged 1 commit into
godotengine:masterfrom
Calinou:jitter-stutter-vrr-framerate-cap

Conversation

@Calinou

@Calinou Calinou commented Jun 16, 2026

Copy link
Copy Markdown
Member

The common "cap 3 frames below the refresh rate" originally added in #6186 is wrong, as it will frequently trigger V-Sync at higher refresh rates (negating the input lag reduction of being within VRR range).

Instead, the formula refresh - (refresh * refresh / 3600.0) should be followed instead, as done by NVIDIA Reflex for its own framerate cap when V-Sync is enabled and a VRR display is used.

@Calinou Calinou requested review from a team as code owners June 16, 2026 21:11
@Calinou Calinou added bug topic:rendering area:manual Issues and PRs related to the Manual/Tutorials section of the documentation labels Jun 16, 2026
Comment on lines +268 to +286
+--------------+---------------+
| Refresh rate | Framerate cap |
+==============+===============+
| 60 Hz | 58 FPS |
+--------------+---------------+
| 75 Hz | 73 FPS |
+--------------+---------------+
| 120 Hz | 115 FPS |
+--------------+---------------+
| 144 Hz | 138 FPS |
+--------------+---------------+
| 165 Hz | 157 FPS |
+--------------+---------------+
| 240 Hz | 224 FPS |
+--------------+---------------+
| 360 Hz | 324 FPS |
+--------------+---------------+
| 480 Hz | 416 FPS |
+--------------+---------------+

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The table sounds useful, but in practice it discourages using the formula described above, in favour of hardcoding the framerate cap to one of these values. I'm not sure it's necessary, unless I'm missing the goal here

@Calinou Calinou Jun 17, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The table is here to give common examples for people not willing to whip out a calculator 🙂

To clarify, it's (unfortunately) rare for games to propose setting VRR-friendly framerate caps out of the box. Users are generally expected to do this on their own, with an exposed FPS cap slider or an external application.

That said, godotengine/godot#66367 adds automatic FPS limiting options (with one of them targeting VRR).

@mhilbrunner

Copy link
Copy Markdown
Member

Needs a CI fix / rebase :)

…utter

The common "cap 3 frames below the refresh rate" is wrong, as it will
frequently trigger V-Sync at higher refresh rates
(negating the input lag reduction of being within VRR range).

Instead, the formula `refresh - (refresh * refresh / 3600.0)`
should be followed instead, as done by NVIDIA Reflex for its own
framerate cap when V-Sync is enabled and a VRR display is used.
@Calinou Calinou force-pushed the jitter-stutter-vrr-framerate-cap branch from 3c0793b to a192e21 Compare June 25, 2026 01:40
@mhilbrunner mhilbrunner merged commit 53f89a8 into godotengine:master Jun 25, 2026
1 check passed
@mhilbrunner

Copy link
Copy Markdown
Member

Thank you! 🙏

@Calinou Calinou deleted the jitter-stutter-vrr-framerate-cap branch June 25, 2026 17:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:manual Issues and PRs related to the Manual/Tutorials section of the documentation bug topic:rendering

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants