Comment 5 for bug 1769857

nastys (alisfquarto) wrote :

I know that VSync and PRIME Sync are not the same thing. With modeset disabled, VSync IS enabled but there is tearing regardless, and I can see that even just by dragging a window around the screen.

glxgears reports:
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
37879 frames in 5.0 seconds = 7575.718 FPS
38056 frames in 5.0 seconds = 7611.121 FPS
[...]

There is absolutely no option in nvidia-settings to fix this. I have taken a few screenshots:
https://imgur.com/a/EqRi1NT

Note that there are a lot more options on a desktop computer with a PCI-E NVIDIA graphics card.

This post by an NVIDIA explains why PRIME Synchronization is critical to get rid of tearing on Optimus laptops and why nvidia-drm modeset=1 is necessary:
https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/

I quote:
"The NVIDIA driver’s PRIME Synchronization support relies on DRM-KMS, which is disabled by default due to its current incompatibility with SLI. To enable it, run ‘sudo rmmod nvidia-drm; sudo modprobe nvidia-drm modeset=1’. In other words, load the nvidia-drm module with the parameter modeset=1."

Instead of reloading the module every time I need to use my laptop, I just added that parameter to GRUB, which works but breaks Vulkan if gdm3 is used.

If I run:
$ xrandr --output eDP-1-1 --set "PRIME Synchronization" 1
without modeset enabled, the screen goes blank for a couple of seconds and GNOME is reloaded, but I still get tearing and according to xrandr it's still disabled:
$ xrandr --verbose
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 16384 x 16384
eDP-1-1 connected primary 1920x1080+0+0 (0x47) normal (normal left inverted right x axis y axis) 344mm x 194mm
[...]
 PRIME Synchronization: 0
  supported: 0, 1
[...]

Of course, I get no tearing if modeset is enabled. I don't need to edit my xorg.conf or anything.

Anyway the summary of this bug is "Vulkan not working if nvidia-drm.modeset=1 is set and gdm3 is used (Optimus)", regardless of the tearing issues.

If gdm3 is not affected then why does this ONLY happen with GDM?