Comment 213 for bug 269904

Revision history for this message
levien (levien) wrote : Re: Screen refresh problems with nvidia on intrepid

I've been trying to track down the cause of this problem for ages, and I think the comment from another user at bug #270377 has just helped me find it.

Apparently the redraw problems described here and in the other bug reports are caused by a race condition, that can occur with compiz in combination with nvidia driver versions above 177.76. According to nvidia developers at the nvnews forums: "[the cause of the problem] is a race condition between the X server and compiz that's the result of a fundamental design problem in the way the Damage extension works." and "[fixing it] will require more changes to the Damage and GLX extensions, the X server, Compiz, and the NVIDIA X driver."

Because it is apparently caused by a design problem, it will probably take some time before the problem is fixed. The only real way to ensure it doesn't happen at the moment is not to use compiz. But on some systems it helps to change settings that affect the timing of pixmap uploads to the GPU. That's why it may help to disable the compiz "--loose-binding" option, or to play with the powermizer settings.

The fact that the occurrence of race-conditions may be affected by timing also explains the fact that everyone seems to experience this bug (and its many duplicates) differently, depending on hardware-configuration, which programs are running, the number of open windows, X.org and driver settings, etc.

For me, restarting compiz without loose binding immediately solved the refresh problems, albeit at the cost of compiz rendering performance. I just had a look at the wrapper script that launches compiz in Ubuntu. It enables --loose-binding on nvidia hardware (which in turn works around a performance issue with texture binding on nVidia cards), but it only seems to do this when indirect rendering is disabled (the default setting). So in theory this should disable --loose-binding without having to edit the wrapper script or (re)start compiz by hand every time:

mkdir -p ~/.config/compiz; echo INDIRECT=0 >> ~/.config/compiz/compiz-manager

It just adds "INDIRECT=0" to the configuration file ~/.config/compiz/compiz-manager, to force indirect rendering. This will of course degrade performance (e.g. with desktop cube) and will also disable some effect plugins (e.g. water). But I much prefer it to having the current redraw problems or disabling desktop effects all together.

I do hope this issue gets properly fixed though...

See also:
http://www.nvnews.net/vbulletin/showthread.php?t=120892
http://www.nvnews.net/vbulletin/showthread.php?t=124470