Reducing screen tearing and input lag

Chiawei Ong
7 min readJul 4, 2015

--

If you play games, and you love being immersed in them, there’s nothing worse than screen tearing (even low-res textures are forgivable sometimes…)

Owww my face!

It’s also pretty jarring when you’re playing a competitive game like Dota, CS:GO, or Starcraft and rapidly moving your screen around causes distracting tears across the screen.

Why does this happen?

It’s because of a lack of synchronization between the GPU output and monitor input. This happens when the GPU feeds many new frames to the monitor — especially in fast moving scenes — the monitor can’t keep up with completely refreshing the whole screen.

What can we do about it?

Well there are multiple ways to go about it, and here’s some information I gathered from personal experience and the Internet.

The best and most promising fix to this to change fundamentally how monitors and GPU communicate with each other, which Nvidia and AMD are already doing with G-Sync and FreeSync.

However, that requires that you buy a particular GPU card AND monitor that supports these features. Availability of these monitors are also limited especially if you live outside the U.S.A.

So! Here’s just some methods I’ve gathered to help resolve this.

1. Use a monitor that has a fast refresh rate

If the refresh rate of the monitor is fast enough, it should refresh fast enough that the tears are perceptibly smaller, and thus less jarring.

You don’t need any particular GPU to work with them, but ideally they should be fast enough to make use of the quick refresh rate.

These screens can render up to 144hz, meaning 144 times a second!

Normal screens can only refresh at less than half of that — 60 times a second.

These screens also cost a fair bit more compared to normal screens.

2. Enable Vertical Synchronization in your game/application

One of the most popular ways to reduce screen tearing is to enable VSync (also I think that’s where the Nvidia and AMD names GSync and FreeSync come from).

https://en.wikipedia.org/wiki/Analog_television#Vertical_synchronization

What it does is asks the GPU to wait for the monitor at specific intervals to make sure it doesn’t interrupt or deliver half-frames to monitors.

You should be able to enable it in most modern games.

Dota 2
GTA V

You can also enable it in your GPU Driver Settings (Nvidia Control Panel or AMD Catalyst Control Center).

However, there are lots of caveats when it comes to enabling VSync. Because the GPU has to wait for the monitor’s refresh, it introduces a delay.

This delay is quite noticeable especially in games relying on quick response, such as MOBAs, RTS, and FPS.

Because of the additional processing strain, weaker GPUs also suffer from performance deterioration. GPUs that are not powerful enough also produce frames that are not only delayed, but inconsistently so, resulting in stutters and jerkiness.

Some games may not be programmed well to work with VSync, and can give similar stuttering or skipped frames.

Thus begins a quest to reduce input lag and stuttering.

2a. Reducing input lag and performance issues

By limiting framerates rendered by the GPU to just below the refresh rate of your monitor, it reduces input lag. This works via limiting the buffer between your input, the GPU processing, and monitor display.

It can reduce input lag, but also introduces a very slight stutter every once in a while, because for every second of 60 frames displayed, you are asking the GPU to only show 57 to 59 frames.

For Nvidia users

  1. Download and install Nvidia Inspector.
  2. Click on the settings button next to Driver Version.
  3. Under the header Sync and Refresh, there should be a dropdown called Frame Rate Limiter.
  4. Nvidia already has recommended settings for 60Hz, 75Hz, and 120Hz. So pick those unless you have weird monitor refresh rates.
  5. If you need a custom refresh rate, just change the number from Decimal to Hexadecimal and input it in the SettingValue column.
  6. The best result would be the target refresh rate minus 2.
  7. For example, if you need 142Hz for a 144Hz monitor, type into Google “142 to hex” = 8E. Put in “0xF000008E” into SettingValue.
  8. Click on Apply Changes on the top right.
  9. If your card is unable to hit the maximum refresh rate, VSync actually goes down to divisors of the refresh rate.
  10. For example, if your card is unable to sync 60fps, it will sync down to 30fps, 20fps, 15fps and so on.
  11. In Nvidia Inspector, you can switch on Adaptive VSync under Vertical Sync Tear Control
  12. You can force 30fps, 20fps, 15fps by picking the divisors under Vertical Sync — 1/2, 1/3, 1/4 respectively (assuming a 60Hz monitor).
  13. This has the effect of stabilizing framerates, which can be more beneficial than choppy framerates that go between 60 and 30fps.

Note: If you encounter the setting constantly being reset back to it’s default (not only frame rate settings but other Nvidia Control Panel settings as well), you may have a Nvidia Driver issue. Best way to deal with it is to do an uninstall of Nvidia Drivers, restart your computer, and install the latest version of Nvidia Drivers again.

For AMD (non 300-Series) users

  1. Download and install Rivatuner Statistics Server.
  2. Change the Framerate limit to 2 below the target framerate. E.g. 58 if you are targeting 60fps for a 60Hz monitor.
  3. If you need to verify that it’s working, you can switch on Show own statistics to see a FPS counter in your game.
  4. Note: I find RTSS to not reliably work in every game, as compared to driver-based changes. Unfortunately I can’t seem to find any other way around this for AMD cards at this point in time.

For AMD 300-Series users

You guys have it easier. AMD is releasing Dynamic Framerate Target Control for the new series of cards!

  1. Download the latest Catalyst Control Center
  2. Open up the Performance side menu on the left.
  3. Click on the Frame Rate Menu.
  4. Check Maximum Frame Rate and input a value that’s 2 less than your monitor’s refresh.
  5. Click Apply.

2b. Reduce frames rendered ahead

Suggested by thatnitai from Reddit

In the Nvidia Control Panel there should be a place to set Maximum pre-rendered frames to reduce input lag.

In most games, it’s set to 3. Setting it to 2 or 1 might help with input lag at the expense of slight performance hit, depending on the game.

3. Run your games in Windowed Mode

In most modern Windows, Aero is the underlying software that helps manage/render all windowed applications in Windows.

Windowed applications are like the browser you’re using to read this or Explorer windows.

Most games are run in Fullscreen mode by default to optimize performance, as there’s no need to render anything else other than the game.

Running a game in Windowed Mode (or Borderless Windowed Mode in some games that emulates a full screen), will make the game rely on Windows’ desktop manager to do composition, and by default the Windows DM uses VSync.

A side effect is that anything in Windowed mode does not experience tearing, so you don’t have to switch on VSync. However, it will use up more resources as it has to render your other windows and applications as well.

You should be able to find this in most games’ settings.

In my experience, it has a perceptible but very slight input lag compared to traditional DirectX Triple Buffered VSync.

Hope this helps in your smooth and responsive gaming experience!

If you have any other methods to reduce screen tearing and input lag, please share!

--

--

Chiawei Ong

Psychology, data, tech. Read, write, dream, photograph.