Again Tearing problems with drivers > 300, Dual-Head-Setup

Hello,

I am very experienced regarding dual/multi-monitor setups under
Linux/Xorg and configuring the native nvidia-driver for Linux.

SETUP:

  • (Linux/Xorg)

  • First monitor set to 1024x768@60Hz

  • Second Monitor set to 1920x1080@24, 25 or 30Hz and more

  • One big screen with Xinerama

  • __GL_SYNC_TO_VBLANK=1

  • __GL_SYNC_DISPLAY_DEVICE=DFP-1

  • Sync to vblank enabled with:
    XNVCTRLSetAttribute(dpy, screen, 0, NV_CTRL_SYNC_TO_VBLANK, 1);
    (This is the same as nvidia-settings sets)

  • No window manager active, just plain X/xinit

  • Option “Composite” “Disable”

  • Option “TripleBuffer” “off” (“on” tears like hell)

  • Current gentoo installation with Kernel 3.8.2

APPLICATION:

Qt/OpenGL-based (proprietary) video-recorder/player
that’s used on professional film sets in ~100 systems.
Same video is shown synchronous on both monitors in one window.

PROBLEM:

At least until nvidi-driver version 270.41.19 there was
NO TEARING on BOTH screens with any combination of resolution or refresh rate!
(I can prove it, just come over here :-) )

I recently had to upgrade the system to support newer Quadro cards
(2000D, K2000) and used driver version 310.44 and 313.30
and NOW the TEARING is BACK on the one screen
which is not the GL_SYNC_DISPLAY_DEVICE, that means it gets only
synced to one monitor (again).

A long time ago it was possible to get tearing free opengl-video-playback on two (different) monitors at the same time by using quadro cards and twinview. That stopped silently maybe three years ago and I
had to use Xinerama + NV_CTRL_SYNC_TO_VBLANK.
(That, by the way, killed XRandR-Support and cost a lot more
CPU-performance than Twinview!)

Now I am again thrown back to this f****** problem that was solved years ago.

I suppose this maybe is related to the recently (one year ago)
introduced "Adaptive VSync"feature.
But there is no possibilty to disable Adaptive Vsync with
nvidia-settings, as far as I can see.

I tried to disable it with glXSwapIntervalEXT(dpy, drawable, 1),
but that simply had no effect whatever interval I tried.
(Also removed the __GL_SYNC… variables from the environment,
disabled nvidia-settings --load-config run when starting X and
removed XNVCTRLSetAttribute-call).

I would be very thankful for any hints to bring me back
the “old” sync behaviour, i.e. tearing free playbacks on both monitors
under all circumstances.

Thank you and kind regards,

Bernhard

nvidia-bug-report.log.gz (86.4 KB)

Had similar behavior, but disabling composite worked for me. See Video tears on all screens - Linux - NVIDIA Developer Forums .

Thanks for your reply, but I wouldn’t call it a “similar” problem… :-)
Sync is working for me but only to one output. Obviously I am the only
person in the world who needs it to be synced to all outputs (with mixed refresh rates and resolutions)
Anyway, I tried it with Option “Composite” “Disabled” (as in your solution)
instead of Option “Composite” “Disable”, but this didn’t change anything (as expected).

Maybe someone from NVIDIA could comment on this?

Thanks in advance!

I hope you get an answer - we have a similar but definitely not the same problem (see [url]EVGA GeForce GTX 660 Ti Problems! - Linux - NVIDIA Developer Forums) and haven’t got an answer till now. The issue described there is affecting also if only one screen is used.

And i am pretty sure it hasn’t existed before as I had my 460 GTX, which can also indicate its been introduced in the 300++ driver series… can’t test now anymore as 660 GTX Ti is only supported by newer drivers.

Cheers!

You are definitely not alone, Berhard72. We also need multi-screen Vsync with the Nvidia drivers. We develop video playback software on Linux and are dealing with tearing problems with both OpenGL and XVideo outputs. No combination of VSync settings has resolved the issue. Hopefully someone from Nvidia will provide some guidance on this issue soon.

Wow, I am completely blown away by Nvidias official answer…
Not even a single word to the issue “Can’t disable adaptive VSYNC (in Linux)”.
Fantastic.