• @kadu@lemmy.world
      link
      fedilink
      48
      edit-2
      1 year ago

      You might know VRR from the commercial names from AMD and Nvidia: G-Sync and FreeSync.

      Your game/software can render as many frames as it wants or the hardware allows, yet your screen can only refresh at a set interval.

      Assume your game is running at 55 FPS, but your screen is refreshing at 60 Hz. There’s no way to assign one full frame to each display refresh, because these are not integer multiples of each other. This means that if you do absolutely nothing and just feed the display the latest available frame at all times, you get screen tearing: parts of the image shown on screen will come from one frame, and parts will come from the next frame, this results in weird artifacts where vertical lines appear to be cut or mixed. This is bad.

      You can then take the classic and most universally used approach: software vsync. In this case, your GPU will hold back each frame on a buffer and wait for your monitor to send a command requesting the next full frame. This fixes the artifacts, but because each frame must be kept waiting on a buffer, you get a delay between when the frame was calculated and when it shows up, this results in increased latency and it’s quite noticeable.

      VRR compatible displays will do something entirely different: they won’t just warn the GPU they’re ready for the next frame, but rather the display and GPU will constantly negotiate the refresh rate and adjust on the fly. The game is running at 55 FPS? The screen will refresh at 55 Hz. A heavy scene came up and now the game dropped to 43 FPS? Display will immediately refresh at 43 Hz.

      The end result is that if both the monitor and device support VRR, you get smooth frame delivery without latency spikes and without artifacts.