RTSS vs in-engine framerate capping

Talk about NVIDIA G-SYNC, a variable refresh rate (VRR) technology. G-SYNC eliminates stutters, tearing, and reduces input lag. List of G-SYNC Monitors.
User avatar
tygeezy
Posts: 104
Joined: 29 Feb 2016, 21:56

RTSS vs in-engine framerate capping

Post by tygeezy » 30 Jun 2017, 01:12

Why is RTSS so much better than just about any other program or in-engine solution when it comes to frame-rate capping? The only game i've found that has a lock on frametimes when you use the in-engine solution is dishonored 2 when I set my framerate cap to 75 in dishonored 2 I get a lock 13.33 ms frametimes.

With just about any other in game capper I get frametimes that are bouncing all over the place. The only downside to RTSS is that it seems to add 5-7 MS of input lag; which is very negligible. Other framerate cappers like using nvidia inspector seem to add double the input lag that RTSS does.

So why is it that RTSS is so much better than anything else out there and why are the majority of games that have built in framerate capping capabilities so bad?

I'm curious how console solutions work because they seem to be both capping the framerate and using vsync. Before I had a gsync monitor I use to cap the framerate at 60 using rtss(60 hz monitor). If I used vsync without capping the framerate I would get massive input lag where rtss reduced it significantly. Unfortunately if you tried to use adaptive vsync with rtss capping at 60 vsync would never engage and you would get bad tearing.

So i'm curious how consoles deal with 30 fps using what appears to be an adaptive half vsync type solution that only tears if it drops into the 20's but avoids the input lag associated with uncapped vsync.

Im also curious if there frametimes are as smooth as rtss. I've only ever seen videos wit ha graph from digital foundry, and it's kind of hard to tell if it's bouncing unless the game is a bad offender like bloodborne.

User avatar
RealNC
Site Admin
Posts: 3741
Joined: 24 Dec 2013, 18:32
Contact:

Re: RTSS vs in-engine framerate capping

Post by RealNC » 30 Jun 2017, 01:31

Pointing out the same thing as I did on the Guru3D forums: RTSS does not add latency. It reduces latency. Just not as much as an in-game limiter can. In other words, using RTSS gives you lower input lag compared to not using a frame limiter.

As to why RTSS provides more stable frame times, it's simply because RTSS is very accurate. Most frame limiters will use a "sleep" or "thread wait" system call to kill some time. This is not very accurate, since it depends on the system timer. RTSS in all likelihood will instead use a busy-wait loop to let some time pass. This is extremely accurate (microsecond accuracy, not just millisecond). This is why RTSS has high CPU usage. (Note that the higher CPU doesn't matter for the game, since during the time RTSS blocks the game, it can't use the CPU anyway.)
SteamGitHubStack Overflow
The views and opinions expressed in my posts are my own and do not necessarily reflect the official policy or position of Blur Busters.

User avatar
tygeezy
Posts: 104
Joined: 29 Feb 2016, 21:56

Re: RTSS vs in-engine framerate capping

Post by tygeezy » 30 Jun 2017, 02:12

RealNC wrote:Pointing out the same thing as I did on the Guru3D forums: RTSS does not add latency. It reduces latency. Just not as much as an in-game limiter can. In other words, using RTSS gives you lower input lag compared to not using a frame limiter.

As to why RTSS provides more stable frame times, it's simply because RTSS is very accurate. Most frame limiters will use a "sleep" or "thread wait" system call to kill some time. This is not very accurate, since it depends on the system timer. RTSS in all likelihood will instead use a busy-wait loop to let some time pass. This is extremely accurate (microsecond accuracy, not just millisecond). This is why RTSS has high CPU usage. (Note that the higher CPU doesn't matter for the game, since during the time RTSS blocks the game, it can't use the CPU anyway.)
I figured I would get more traction here. According to the article written here gsync 101; rtss adds 1 frame of input lag while inspector adds 2. So was the article by the author here wrong?

Edit: Never mind, read your posts on guru 3d. thanks for the link.

User avatar
tygeezy
Posts: 104
Joined: 29 Feb 2016, 21:56

Re: RTSS vs in-engine framerate capping

Post by tygeezy » 30 Jun 2017, 02:18

Do you know why capping framerate at monitors refresh rate using rtss reduces input lag so greatly? I've never seen anybody run an input lag test capping at refresh rate. people usually do 1-2 frames below monitors refresh rate with sync enabled.

User avatar
RealNC
Site Admin
Posts: 3741
Joined: 24 Dec 2013, 18:32
Contact:

Re: RTSS vs in-engine framerate capping

Post by RealNC » 30 Jun 2017, 02:28

tygeezy wrote:Do you know why capping framerate at monitors refresh rate using rtss reduces input lag so greatly? I've never seen anybody run an input lag test capping at refresh rate. people usually do 1-2 frames below monitors refresh rate with sync enabled.
Capping the frame rate stops the game from pushing more frames to the output buffers than the monitor can actually show.

Without frame capping, games will just keep rendering new frames and push them to the output queue. This results in those frames getting old as the monitor is still working on displaying previous frames. The game will only stop pushing new frames once all buffers are full.

When you limit the frame rate, the game is prevented from doing that. New frames will only be rendered once the monitor is actually ready to display them. The best results are achieved when the frame rate is capped below the refresh rate. This introduces stutter though. To combat that, you need to cap the frame rate only slightly below the refresh rate (about 0.007FPS below refresh works well.) For that, you need two things: a) figure out what your actual refresh rate is (no, it's most probably not 60.000Hz), and b) a very accurate frame limiter, like RTSS.

I have a guide for this here:

http://forums.guru3d.com/showthread.php ... ost5380262
SteamGitHubStack Overflow
The views and opinions expressed in my posts are my own and do not necessarily reflect the official policy or position of Blur Busters.

User avatar
tygeezy
Posts: 104
Joined: 29 Feb 2016, 21:56

Re: RTSS vs in-engine framerate capping

Post by tygeezy » 30 Jun 2017, 02:45

RealNC wrote:
tygeezy wrote:Do you know why capping framerate at monitors refresh rate using rtss reduces input lag so greatly? I've never seen anybody run an input lag test capping at refresh rate. people usually do 1-2 frames below monitors refresh rate with sync enabled.
Capping the frame rate stops the game from pushing more frames to the output buffers than the monitor can actually show.

Without frame capping, games will just keep rendering new frames and push them to the output queue. This results in those frames getting old as the monitor is still working on displaying previous frames. The game will only stop pushing new frames once all buffers are full.

When you limit the frame rate, the game is prevented from doing that. New frames will only be rendered once the monitor is actually ready to display them. The best results are achieved when the frame rate is capped below the refresh rate. This introduces stutter though. To combat that, you need to cap the frame rate only slightly below the refresh rate (about 0.007FPS below refresh works well.) For that, you need two things: a) figure out what your actual refresh rate is (no, it's most probably not 60.000Hz), and b) a very accurate frame limiter, like RTSS.

I have a guide for this here:

http://forums.guru3d.com/showthread.php ... ost5380262
Awesome, just great info sir. Is there a way to use adaptive vsync with framerate capping? Anytime I've done some framerate capping with rtss and used adaptive vsync it never actually engages and you get frame tearing.

Another question:

If you capped your framerate at 30 fps and used vsync on a 60 hz monitor; would you get stuttering like you would when your framerate fell below the monitors refresh rate? Or since it's half the refresh rate would you not get the stutter?

I notice that they have half refresh vsync in some games, and it's always available In the drivers. I'm just wondering how half refresh vysnc works differently than regular vsync.

User avatar
RealNC
Site Admin
Posts: 3741
Joined: 24 Dec 2013, 18:32
Contact:

Re: RTSS vs in-engine framerate capping

Post by RealNC » 30 Jun 2017, 03:02

tygeezy wrote:Is there a way to use adaptive vsync with framerate capping? Anytime I've done some framerate capping with rtss and used adaptive vsync it never actually engages and you get frame tearing.
Unfortunately, no. The driver does not provide a way to configure the tearing threshold of adaptive vsync. It just disables vsync even if you're slightly below refresh. So when using frame capping to lower input lag with vsync, you can't use adaptive vsync.
If you capped your framerate at 30 fps and used vsync on a 60 hz monitor; would you get stuttering like you would when your framerate fell below the monitors refresh rate? Or since it's half the refresh rate would you not get the stutter?
You will get some stutter. The way to fix this is to use 1/2 refresh vsync, which is ONLY configurable through nvidia profile inspector (download here). The nvidia control panel only allows you to use 1/2 refresh adaptive vsync, not 1/2 refresh full vsync.

(Note that once you change a game profile in to use 1/2 refresh vsync, you will probably have to reboot for it to actually take effect. There's been a bug in the nvidia driver for a while now where 1/2 refresh vsync has no effect until you reboot.)

Once you set non-adaptive 1/2 refresh vsync in profile inspector, 30FPS on 60Hz will have no stutter (it will basically look like as if it was 30FPS@30Hz.)
I notice that they have half refresh vsync in some games, and it's always available In the drivers. I'm just wondering how half refresh vysnc works differently than regular vsync.
1/2 refresh vsync works by multiplying the "present interval". Normally, it's 1. 1/2 refresh uses 2, 1/3 refresh uses 3, etc.

The "present interval" specifies how the presentation of a frame is synchronized to the vblank signal (the vertical blanking period of the monitor; it's the time at which the monitor is not "drawing" anything and is just preparing to draw the next frame). A present interval of 0 means no sync (vsync off.) 1 means synchronize on every vblank. 2 means synchronize every second vblank. And so on. With a value of 2, each frame will wait for two vblank signals (in other words, two vsyncs) before it's sent to the monitor.

Games can do this on their own. With Direct3D for example:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb174576(v=vs.85).aspx

But the driver can force this even on games that don't do this. You have to use profile inspector though, since as said above, the nvidia panel only allows this for adaptive vsync, not normal vsync.
SteamGitHubStack Overflow
The views and opinions expressed in my posts are my own and do not necessarily reflect the official policy or position of Blur Busters.

User avatar
tygeezy
Posts: 104
Joined: 29 Feb 2016, 21:56

Re: RTSS vs in-engine framerate capping

Post by tygeezy » 30 Jun 2017, 03:23

RealNC wrote:
tygeezy wrote:Is there a way to use adaptive vsync with framerate capping? Anytime I've done some framerate capping with rtss and used adaptive vsync it never actually engages and you get frame tearing.
Unfortunately, no. The driver does not provide a way to configure the tearing threshold of adaptive vsync. It just disables vsync even if you're slightly below refresh. So when using frame capping to lower input lag with vsync, you can't use adaptive vsync.
If you capped your framerate at 30 fps and used vsync on a 60 hz monitor; would you get stuttering like you would when your framerate fell below the monitors refresh rate? Or since it's half the refresh rate would you not get the stutter?
You will get some stutter. The way to fix this is to use 1/2 refresh vsync, which is ONLY configurable through nvidia profile inspector (download here). The nvidia control panel only allows you to use 1/2 refresh adaptive vsync, not 1/2 refresh full vsync.

(Note that once you change a game profile in to use 1/2 refresh vsync, you will probably have to reboot for it to actually take effect. There's been a bug in the nvidia driver for a while now where 1/2 refresh vsync has no effect until you reboot.)

Once you set non-adaptive 1/2 refresh vsync in profile inspector, 30FPS on 60Hz will have no stutter (it will basically look like as if it was 30FPS@30Hz.)
I notice that they have half refresh vsync in some games, and it's always available In the drivers. I'm just wondering how half refresh vysnc works differently than regular vsync.
1/2 refresh vsync works by multiplying the "present interval". Normally, it's 1. 1/2 refresh uses 2, 1/3 refresh uses 3, etc.

The "present interval" specifies how the presentation of a frame is synchronized to the vblank signal (the vertical blanking period of the monitor; it's the time at which the monitor is not "drawing" anything and is just preparing to draw the next frame). A present interval of 0 means no sync (vsync off.) 1 means synchronize on every vblank. 2 means synchronize every second vblank. And so on. With a value of 2, each frame will wait for two vblank signals (in other words, two vsyncs) before it's sent to the monitor.

Games can do this on their own. With Direct3D for example:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb174576(v=vs.85).aspx

But the driver can force this even on games that don't do this. You have to use profile inspector though, since as said above, the nvidia panel only allows this for adaptive vsync, not normal vsync.
Thanks so much, I've been looking for someone to answer my questions forever. How about 1/4 vsync and 1/3 vsync? I see they have that for NVidia inspector. Do those work? Or should you really only use full vsync and half? Playing games at 15 and 20 fps would be balls, but I can see those options being useful on high refresh rate monitors that don't have gsync.

I have a 144 hz gsync monitor by the way, but I also use the 3d vision on my monitor, so I still need to mess with vsync if I use 3d vision. And I hate input lag, so I've been looking for the best option to have minimal input lag while also having a smooth stutter free image.

User avatar
RealNC
Site Admin
Posts: 3741
Joined: 24 Dec 2013, 18:32
Contact:

Re: RTSS vs in-engine framerate capping

Post by RealNC » 30 Jun 2017, 03:34

tygeezy wrote:How about 1/4 vsync and 1/3 vsync? I see they have that for NVidia inspector. Do those work? Or should you really only use full vsync and half?
On 60Hz monitors, you have:

1/2 for 30Hz vsync.
1/3 for 20Hz vsync.
1/4 for 15Hz vsync.

As you can guess, only 1/2 is useful for 60Hz monitors.

For 144Hz monitors however, they are all useful. For 120Hz, you get 60FPS (1/2), 40FPS (1/3) and 30FPS (1/4). For 144Hz, you get 72FPS, 48FPS, and 36FPS.
I have a 144 hz gsync monitor by the way, but I also use the 3d vision on my monitor, so I still need to mess with vsync if I use 3d vision. And I hate input lag, so I've been looking for the best option to have minimal input lag while also having a smooth stutter free image.
When using 1/x refresh vsync, you basically would do the same thing as if you had a monitor at that refresh. 3D Vision is 120Hz, so in that case, if you use 1/2 vsync, the behavior is as if you had a 60Hz monitor, so you should cap to 0.007FPS below that.

Detect your actual refresh in 120Hz mode here:

https://www.vsynctester.com/

Take the result (it's probably something like 119.something), divide it by 2, then subtract 0.007 from it. The result is what you should cap your FPS to when using 1/2 refresh vsync. This should give you smooth motion and low input lag.
SteamGitHubStack Overflow
The views and opinions expressed in my posts are my own and do not necessarily reflect the official policy or position of Blur Busters.

User avatar
tygeezy
Posts: 104
Joined: 29 Feb 2016, 21:56

Re: RTSS vs in-engine framerate capping

Post by tygeezy » 30 Jun 2017, 04:16

RealNC wrote:
tygeezy wrote:How about 1/4 vsync and 1/3 vsync? I see they have that for NVidia inspector. Do those work? Or should you really only use full vsync and half?
On 60Hz monitors, you have:

1/2 for 30Hz vsync.
1/3 for 20Hz vsync.
1/4 for 15Hz vsync.

As you can guess, only 1/2 is useful for 60Hz monitors.

For 144Hz monitors however, they are all useful. For 120Hz, you get 60FPS (1/2), 40FPS (1/3) and 30FPS (1/4). For 144Hz, you get 72FPS, 48FPS, and 36FPS.
I have a 144 hz gsync monitor by the way, but I also use the 3d vision on my monitor, so I still need to mess with vsync if I use 3d vision. And I hate input lag, so I've been looking for the best option to have minimal input lag while also having a smooth stutter free image.
When using 1/x refresh vsync, you basically would do the same thing as if you had a monitor at that refresh. 3D Vision is 120Hz, so in that case, if you use 1/2 vsync, the behavior is as if you had a 60Hz monitor, so you should cap to 0.007FPS below that.

Detect your actual refresh in 120Hz mode here:

https://www.vsynctester.com/

Take the result (it's probably something like 119.something), divide it by 2, then subtract 0.007 from it. The result is what you should cap your FPS to when using 1/2 refresh vsync. This should give you smooth motion and low input lag.
great stuff, I'm going to give that a shot.

Does vsync below the monitors refresh rate have the same input lag as non vsync?

Also, back to what you said about controlling the threshold of adaptive vsync. Can consoles games do this?

I swore I saw some digital foundry videos where they talk about them having adaptive vsync. The input lag would be crazy high at 30 fps vsync with no cap, but they mention there is no tearing until the frames drop into the 20's in some titles.

If you used half adaptive vsync on a 60 hz monitor you would probably be pushing 200 ms of input lag.

Also, on my gsync monitor when I went to that vsync tester site I was getting 70ish hz on my monitor which is 144 hz. I'm assuming that's because I had it in gsync mode and that's the framerate I was getting. Although for gsync I only have full screen enabled and not full screen plus windows so I would think it wouldn't be enabled just in my desktop.

Post Reply