galister / WlxOverlay

A simple OpenVR overlay for Wayland and X11 desktops
GNU General Public License v3.0
127 stars 6 forks source link

Hybrid GPU frame copy #8

Closed SpookySkeletons closed 1 year ago

SpookySkeletons commented 1 year ago

What's the status of peeking at swapchains of mismatching memory tiling right now?

Typically if you don't use linear buffer or translate one tiling to another peeking at windows across different GPUs such as a hybrid setup where your VR is running on your laptop dGPU and the desktop session is running on your iGPU results in completely scrambled visuals.

Is anything done in the project to address this?

SpookySkeletons commented 1 year ago

Taking at look at your code it appears you use pipewire screencast which (should) properly account for this, neat!

Please comment anything else you can, I want to document from the horse's mouth for future laptop users.

galister commented 1 year ago

With Xorg desktops, Xshm capture is used, so that will not pose an issue.

As for Wayland, the screencopy and pipewire capture methods currently both use shm capture, so these are safe to use for dual-GPU setups. DMA-buf for Pipewire is WIP.

The wlr-export-dmabuf capture method might be auto-detected on your system in case you use a wlroots-based compositor. In that case, you may want to set the wayland_capture option to either screencopy or pipewire in your config.yaml.

SpookySkeletons commented 1 year ago

Confirm pipewire screen captures as working, screencopy should work well too.

Make sure to set the overlay DRI_PRIME=1 so the wrist watch is not garbled if you have a multi GPU system.