OpenXR Toolkit (upscaling, world scale, hand tracking...) - Release thread

The are both done on the GPU. They are exactly the same. FSR is done by the game, RSR is done by the driver.

I have a very detailed explanation of the differences here (for NIS, but exact same thing applies to FSR):

Nvidia Image Scaling NIS and VR - Virtual Reality (VR) / General - Microsoft Flight Simulator Forums

This image sums it up perfectly:

The problem is deeper than that. Something, somewhere, needs to know when to apply the upscaling and how to apply it. Your GPU is seeing dozens if not hundreds of rendering passes throughout each frame being rendered by the application.

You can’t apply upscaling on every single one of them for 2 reasons:

  • Not all passes create content that is meant to be displayed onto a screen. Certain render passes compute things like shadows and you do not want to do upscaling to those, because it will literally break the game engine
  • Performance: you only want to do upscaling on the final image. Upscaling at every pass would be extremely slow.

Right now those driver-level upscaling injection techniques typically only work for monitors because it’s easy for the driver to intercept when something is drawn directly on screen. But this isn’t trivial for VR since a VR headset does not function like a monitor. A driver alone cannot easily know when to apply upscaling for VR.

You can’t apply things like DLSS on just any render pass because DLSS needs to have access to correlating information such as the depth buffer used when rendering the image and the motion estimation since the previous frame. In addition, DLSS requires to inject “noise” into the image. So a driver alone cannot know how to apply DLSS for free to just any content.

2 Likes