I had hoped to be able to start posting the information that I've found on my investigation of this issue yesterday but some of life's hurdles got in the way.
I'm going to post what I've found in installments and so this is the first one:
So let’s tackle this question first: How, exactly, does Oculus Link software work?
Here is a link to an article by Oculus developers that explain in detail how Oculus Link works:
How does Oculus Link Work? The Architecture, Pipeline and AADT Explained
Weeding through the technical jargon, it basically boils down to this: the Quest headset is, for all practical purposes, a display device. It is accepting a data stream through a USB port and cable that is generated by the GPU and then displaying that data onto its display panels. The only difference between it and the way a monitor works, albeit an important one, is that the data stream is compressed by the GPU encoder in order to transmit the necessary amount of data for VR and the Quest 2 must then decompress the data stream before displaying it.
So the game app runs on the PC, the PC CPU renders the physics (draws the objects principally) and then sends the frames to the PC GPU which fills in lighting, color, textures and other visuals. Once each frame is complete, instead of sending the image directly to a connected monitor screen it compresses the frames through the GPU’s encoder, transmits the compressed data stream internally to the PC’s USB controller (via the CPU) which then delivers the data stream to the USB port connected to the Quest 2 by cable.
When the Quest 2 receives the data stream it first decompresses the frames which are then sent to the Quest compositor for display. Before the frames are displayed they are first adjusted for the curvature of the Fresnal lenses (barrel distortion). There are two other processes that occur at this point. One is Asynchronous Space Warp (ASW) and the other is Asynchronous Time Warp (ATW).
ASW was introduced by Oculus in 2016 and is an algorithm which calculates the motion between previous frames to predict how the next frame should look. ASW can be set by the user to either be on or off. When enabled ASW automatically detects when an app is consistently dropping multiple frames over a short time period and then force the application to run at a ½ framerate (45 fps instead of 90 fps) while synthetically generating every other frame. When enabled the “fake” frames are passed on to the compositor for display.
ATW “is a technique that warps the rendered image before sending it to the display in order to correct for head motion that occurred after the scene was rendered and thereby reduce the perceived latency”. (Michael Antonov, Meta Chief Software Architect)
ATW adjusts for any change in headset tracking between the time a frame was rendered and it is ready to be displayed. It reads the current headset positioning and determines if there has been a change. If so, it reprojects the previous frame with the current tracking data to compensate for the position change and then forwards the frame for display. ATW occurs with every frame and is not a process that the user can disable.
A more detailed explanation can be found here:
Asynchronous TimeWarp (ATW) | Oculus Developers
And here:
Asynchronous Timewarp Examined (oculus.com)
Specifically what changes to a rendered frame may occur once received from the GPU, if any?
The headset receives a compressed data stream of already rendered frames from the PC’s GPU and displays those frames after decompressing them. So besides transmitting tracking and audio data between the headset and the PC the headset is primarily a display device when used for PCVR apps. The Quest 2 does have its own GPU to render frames when it is used as a standalone VR headset but its GPU is not in play when connected via Link for PCVR.
Therefore there is no apparent ability for the headset itself to introduce artifacts into a rendered frame that it receives from the GPU. Any artifact, like the white horizontal bars or anything else in the frame, must have already been incorporated into the frame at the time of rendering by the PC’s GPU.
What can cause a frame to be corrupted once it is received by the Quest 2?
Could there be a problem with how the Quest 2 decompresses the received frames from the PC’s GPU that would introduce the white line stripe? It is unlikely for the following reasons: if so, the problem would be occurring with a much larger number of users and with a much larger number of games. In fact, most likely ALL games over wired link and it would be much more consistent instead of random in many cases. But we are not seeing that.
Could the issue in some way be occurring with the Quest 2 display compositor and/or the result of the ASW or ATW processes. Again it is very unlikely because if so the problem would be occurring outside of Oculus Link when used in standalone mode. The display compositor is the same and works the same way with either frames generated through PCVR and received via cable or frames generated when used as standalone VR.
Therefore, the issue must be originating during the rendering of the frames by the PC’s GPU.