120hz refresh + 60fps rendered + vsync = ?

Everything about latency. Tips, testing methods, mouse lag, display lag, game engine lag, network lag, whole input lag chain, VSYNC OFF vs VSYNC ON, and more! Input Lag Articles on Blur Busters.
pneu
Posts: 35
Joined: 01 Mar 2015, 12:12

120hz refresh + 60fps rendered + vsync = ?

Post by pneu » 25 Sep 2015, 00:40

Hello

As per the title, I am trying to find out whether simply increasing the monitor's refresh rate to 120hz, while keeping the rendered frames at 60fps, will improve input lag when using vsync.

In theory, it absolutely should, given that:

1. The usual trick of capping at 58/59fps for a 60hz works stunningly well at killing input lag, and that is only 1-2 fps below the refresh.
2. 60fps is well below the refresh of 120hz, so there should never be any "don't render because the monitor isn't ready yet" condition. Or at least, this should be massively reduced as it is with the 58/59 cap.

I could not find an answer through google, except for one post on Neogaf saying that it does in fact reduce input lag.

If true, this would make cheap 120hz compatible non-gsync/freesync displays quite attractive for regular 60fps duties, especially for those of us who don't have the GPU power to render 120fps all of the time.

Failing replies to this thread, I will probably pick up one of these for experimental purposes :)

User avatar
TheLeetFly
Posts: 6
Joined: 05 Jan 2014, 13:48
Contact:

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by TheLeetFly » 25 Sep 2015, 01:36

Hi pneu,
as i understand the topic there would be an advantage of ~8ms, because you would decrease the refresh-cycle-time from 16,6 to 8,3 ms.
But im not really sure about the correlation of frame doubling. In the end you will "convert" your only frame per refresh cycle into two seperate cycles, with the advantage of the first one starting a bit earlier.
I would use the same cap, maybe at 59 or 59.xx and not exactly 60, but i cant really put words into this reason.
Could a more competent person enlighten us? :D

pneu
Posts: 35
Joined: 01 Mar 2015, 12:12

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by pneu » 25 Sep 2015, 01:56

Well, I can also kill input lag by overclocking my monitor to 61hz and rendering 60fps. Therefore it follows that overclocking to 120hz should also kill input lag, no? As long as the refresh is greater than the rendered fps, it kills input lag, for some unknown magical reason :)

According to tests done by Chief, gsync with 144fps rendered @ 144hz causes input lag when vsync is turned on as well. So it seems there is some unique condition that occurs when the rendered frames ≥ the refresh rate , which causes input lag.

Falkentyne
Posts: 2793
Joined: 26 Mar 2014, 07:23

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by Falkentyne » 25 Sep 2015, 02:29

Well the framerate is directly tied to the response time. 60 fps is 16.7 milliseconds frame time. (1000 / 60 = 16.7). So no matter how you slice that, you're still getting 16.7ms response time.

As far as 120hz refresh rate with the FPS capped at 60, this should improve the overdrive performance of the monitor, but the response time will still be the same.

This is assuming everything is equal.

back in the day, having 60 FPS at a 60hz refresh rate, if the framerate dropped to 60 FPS due to video card bandwidth issues, could cause up to 250ms (!) of input lag, if you were using anti-aliasing! The good old "mouse lag" problem. This had nothing to do with the refresh rate directly.

pneu
Posts: 35
Joined: 01 Mar 2015, 12:12

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by pneu » 08 Oct 2015, 21:14

So I went and bought triple 120hz monitors and finally got around to testing this out. Here are my findings.

1. 60fps rendered,120hz refresh, vsync on
Input lag is obliterated, identical to vsync off. However the framerate is unsmooth as there are many dropped frames. I was using Rivatuner as the frame limiter. I then tried DXtory as the limiter, and got a much better result. But I had to fiddle around with its settings (processing thread priority: highest, wait for available buffer, permanent hook) and then in the driver a frame queue size of 5. I also tried forcing triple buffering with D3Doverrider, but that didn't seem to have any effect. I have not tried Radeonpro or Nvidia inspector which may or may not provide a smoother frame limiter (they are blacklisted by anti-cheat in my case, so I could not try them).

The main point here is that you need a well optimised frame limiter to get 60fps @ 120hz running without frame skips all over the place. I would not count on it as a reliable option. You may get a good result, then again you may not, and you may have to fiddle around with things like frame queue size and triple buffering and thread priorities to get it running smoothly.

Also I would note that this seems to only be an issue for 3D graphics. For 2D graphics (eg. blurbusters test patterns) there are no dropped frames at 60fps @ 120hz. The problem seems that in 3D applications there are some different conditions which arise possibly related to the way the frame limiter has thread priority compared to the main rendering thread, causing some timing mismatch and dropped frames.

2. 80/90/100fps rendered, 120hz refresh, vsync on
Again, input lag is obliterated. Same problem with dropped frames, except the stutter is reduced as a skipped frame is now a shorter duration compared to 60. If you can get the limiter working with accurate timing at a locked 80fps, the visual appearance is quite smooth as it results in a frame cadence of 2:1. 90fps starts to introduce some slight judder with its 2:1:1 cadence, but has slightly better motion resolution due to lower persistence, and frame skips are less noticeable. Difficult to choose between 80 and 90. 100 has too much judder for my liking (2:1:1:1:1).

3. 120fps rendered, 120hz refresh, vsync on
A small amount of input lag is introduced, but is still much less than 60fps @ 60hz. Limiting the max prerendered frame queue to 1 or 2 in the driver, and capping at 120fps in the frame limiter helps keep it at near vsyncless levels. No dropped frames, much better motion resolution, similar to the motion resolution of a low end plasma TV. This is obviously the preferred mode.

4. 60/80/85/90fps, 120hz refresh, vsync off
Input lag is of course obliterated without vsync, so the question is whether there are any acceptable frame rates that fit into 120hz without significant tearing. The best result seems to be 90, which has minimal tearing. The frequency at which the tear moves up/down the screen at 90fps is so fast that you almost cannot see it. I may end up using this configuration as an "ultra competitive gaming" mode for lowest possible lag.

Conclusion: it works, sorta. But gsync/freesync is still a better and more reliable option for eliminating input lag without tearing/stutter.

System specs:
i5-4570, R9 270, Win7 64-bit SP1, 8GB RAM, SSD.

pneu
Posts: 35
Joined: 01 Mar 2015, 12:12

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by pneu » 09 Oct 2015, 21:37

I was able to tune a smoother frame rate with 60fps @ 120hz by enabling triple buffering in the registry (the CCC setting appears to be broken as I noticed it doesn't always set the registry value properly) and setting the registry flipqueue size to its default value (0, which apparently = 3 prerendered frames). However this introduces a bit of input lag, similar to 60fps @ 60hz with a frame queue of 1 and capping at 60fps with rivatuner. Actually the input lag comes and goes depending on how hard the CPU/GPU is working, depending on the scene, which is exactly how it behaves at 60hz, which is really really bad for competitive play. At the very least you need is a consistent amount of lag, never a variable one, as that will cause you to randomly mistime your inputs :)

Falkentyne
Posts: 2793
Joined: 26 Mar 2014, 07:23

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by Falkentyne » 09 Oct 2015, 22:13

What is this exact registry value for triple buffering for the AMD drivers? And how does it work and how can you test to see if it works?

I tried setting one before and it did absolutely -nothing-.
There's something called "EnableTripleBuffering" which seems to be for OpenGL.
And EnableTripleBuffering_DEF which seems to do absolutely nothinig

pneu
Posts: 35
Joined: 01 Mar 2015, 12:12

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by pneu » 10 Oct 2015, 02:02

Falkentyne wrote:What is this exact registry value for triple buffering for the AMD drivers? And how does it work and how can you test to see if it works?

I tried setting one before and it did absolutely -nothing-.
There's something called "EnableTripleBuffering" which seems to be for OpenGL.
And EnableTripleBuffering_DEF which seems to do absolutely nothinig
Windows command for turning on/off triple buffering (replace X with whichever folders you have).

On

Code: Select all

REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000X\UMD /v EnableTripleBuffering /t REG_BINARY /d 3100 /f

REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000X\UMD /v EnableTripleBuffering_DEF /t REG_SZ /d 1 /f
Off

Code: Select all

REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000X\UMD /v EnableTripleBuffering /t REG_BINARY /d 3000 /f

REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000X\UMD /v EnableTripleBuffering_DEF /t REG_SZ /d 0 /f

These keys are what the "Open GL triple buffering" option in CCC controls. Despite the name it is not OpenGL only, it definitely applies to D3D as well (I think they mislabeled it - the CCC vsync setting is what only works for openGL).

Note that if you use a game profile in CCC, the key will be ignored and instead use whatever you specified in CCC (which imo can't be trusted to work). So if you want to test certain registry keys are working, don't use game profiles in CCC.

To test it I used Radeonpro's OSD which tells you when triple buffering is enabled. Radeonpro modifies the same key to turn it on/off. Note: disable all other checkboxes under the Radeonpro Tweaks tab, otherwise triple buffering may not work at all.

Triple buffering does not work for all games, example: Witcher 2. When testing you must use it with a game that you know supports it (eg. test with RP to confirm it's working, then delete the RP profile and just modify the key yourself to see if the RP OSD responds to your registry setting).

Glide
Posts: 280
Joined: 24 Mar 2015, 20:33

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by Glide » 11 Oct 2015, 23:34

Do AMD not have an equivalent to NVDIA's "1/2 refresh V-Sync" option?
I think it might be called "double v-sync"?

pneu
Posts: 35
Joined: 01 Mar 2015, 12:12

Re: 120hz refresh + 60fps rendered + vsync = ?

Post by pneu » 13 Oct 2015, 09:35

Glide wrote:Do AMD not have an equivalent to NVDIA's "1/2 refresh V-Sync" option?
I think it might be called "double v-sync"?
Yep Radeon pro can do it, which coincidentally I just got working with the competitive game I play despite it being blocked by anti-cheat, and am now successfully injecting the 60fps cap , and the result is very good, no stutters and absolutely no input lag. With Rivatuner and dxtory, the fps limiting is not good enough with lots of stutters, but RP is very good at it. The proof of this comes when I turn off vsync but leave RP capping at 60: the screen tear is only 1 pixel thick and barely moves. Whatever John Mautari is doing with the frame synchronisation is magical :)

But of course this is no guarantee, it's a workaround that just happens to work on my system, and radeon pro is blocked by a lot of anti-cheat engines.

Just to be clear this is how I have it set up:

Monitor refresh rate: 120hz
Vsync: off in the game, forced on by radeon pro.
FPS cap: off in the game, 60 in RP
Frame queue: Maximum (5)
Triple Buffering: on
RP OSD: on in top left of screen, or small status bar across the bottom (this overlay hooking might be smoothing the frame rate further, not sure)

Post Reply