LINUX.ORG.RU
ФорумTalks

[SOLVED] Nvidia compiz tearing


0

0

Вот кое-какое решение подзалюбившего tearing — горизонтальных полос в видео и анимации при использовании compiz c карточками nvidia и проприетарными драйверами.

Сам костыль:

--- src/display.c	2009-02-28 23:32:55.000000000 +0500
+++ src/display.c	2009-02-28 23:35:25.000000000 +0500
@@ -1644,6 +1644,7 @@
 			    }
 			}
 
+			s->damageMask |= COMP_SCREEN_DAMAGE_ALL_MASK;			
 			if (s->damageMask & COMP_SCREEN_DAMAGE_REGION_MASK)
 			{
 			    XIntersectRegion (s->damage, &s->region,
@@ -1684,6 +1685,7 @@
 
 			if (mask & COMP_SCREEN_DAMAGE_ALL_MASK)
 			{
+			    glFlush ();
 			    glXSwapBuffers (d->display, s->output);
 			}
 			else
--- src/screen.c	2009-02-28 23:33:05.000000000 +0500
+++ src/screen.c	2009-02-28 23:37:18.000000000 +0500
@@ -3845,7 +3845,7 @@
     if (s->pendingCommands)
     {
 	makeScreenCurrent (s);
-	glFinish ();
+	glFlush();
 
 	s->pendingCommands = FALSE;
     }

д'Ебилд:

compiz_0.7.8-0ubuntu5.dsc

compiz_0.7.8-0ubuntu5.tar.gz

Готовые пакеты для intrepid amd64:

compiz-core_0.7.8-0ubuntu5_amd64.deb

compiz-gnome_0.7.8-0ubuntu5_amd64.deb

compiz-plugins_0.7.8-0ubuntu5_amd64.deb

compiz_0.7.8-0ubuntu5_all.deb

Было бы здорово, наверное, если бы кто-нибудь собрал i386.

Howto:

1) установить патченый compiz

2) ВЫКЛЮЧИТЬ sync to vblank в compiz: gconftool-2 -s /apps/compiz/general/screen0/options/sync_to_vblank false -t bool

3) включить в nvidia-settings sync to vblank для XV и OpenGL — SyncToVBlank, XVideoTextureSyncToVBlank

4) настроить запуск 'nvidia-settings -l' перед compiz, например создав файл вида /etc/X11/Xsession.d/85nvidia: nvidia-settings -l

Вроде бы работает, даже с VDPAU. Enjoy!

ЗЫ: лоркод — леденящий душу писец, читаемо отформатировать текст в здравом уме довольно сложно.

★☆☆

> леденящий душу писец

Писенящий душу леденец :)

boombick ★★★★★
()

> горизонтальных полос в видео и анимации при использовании compiz c карточками nvidia и проприетарными драйверами.

У меня совпало всё, кроме горизонтальных полос. Что за полосы?

mamay_cozak
()
Ответ на: комментарий от mamay_cozak

> У меня совпало всё, кроме горизонтальных полос. Что за полосы?

+1

Igron ★★★★★
()
Ответ на: комментарий от mamay_cozak

Ты просто не умеешь тестировать. На богомерзком онямэ хорошо всегда видно, если быстрая смена сцен.

ptarh ★★★★★
()
Ответ на: комментарий от mamay_cozak

Например, тут же про "полосы" http://www.linux.org.ru/view-message.jsp?msgid=2616586. И тут http://darkmachine.org/~as33/vc1/3.png

Вероятно, на не очень больших разрешениях/диагоналях разница в программной и физических частотах вывода, из-за которой и появляется tearing, может быть не заметна.

as33 ★☆☆
() автор топика
Ответ на: комментарий от as33

А, ты об этом? Я даже когда-то здесь тему создавал. Проблема же решается штатным способом - включением Sync to VBlank в опциях компиза. И оно действительно проявилось именно тогда, когда я купил более крупный монитор.

mamay_cozak
()
Ответ на: комментарий от mamay_cozak

>включением Sync to VBlank в опциях компиза.

Нэт. В смысле - не решается. Тестировал в последний раз на компизе с месяц назад.

ptarh ★★★★★
()
Ответ на: комментарий от mamay_cozak

Упорно не хотела решаться этим самым штатным способом, как я ему этот Sync to VBlank не включал. :-)

as33 ★☆☆
() автор топика
Ответ на: комментарий от ptarh

Убунта 8.10, решилась. И решение это не я придумал, значит не мне одному помогло. Может быть у нас что-то в версиях не совпадает.

mamay_cozak
()
Ответ на: комментарий от as33

>Упорно не хотела решаться этим самым штатным способом, как я ему этот Sync to VBlank не включал. :-)

Помню, я даже после долгих поисков находил тему на нвидиевских форумах, где разработчики клялись и божились, что это всё косяки иксов и что они работают над решением проблемы.

ptarh ★★★★★
()

Без всяких патчей всё работает нормально. Gf8600 на арче и убунте. С компизом и с kwin4 нет проблем. Если в мплеере вывод пустить на gl - тиринг есть, на xv и gl2 его нет. На vdpau тоже есть, но какбы не нужно.

И не рассказывайте мне что такое tearing, у меня на ноуте RadeonX200m.

sid350 ★★★★★
()

кто бы решил эту проблему для композита через XRender... а так подобный эффект с компизом не наблюдался. К тому же принудительно включать вертикальную синхронизацию для всех OpenGL приложений не очень удобно - при разработке чего-нить желательно видеть максимально выдаваемый фпс, а так он будет ограничиваться. Каждый раз включать/выключать - влом )

Andru ★★★★
()
Ответ на: комментарий от Andru

Кстати, объясните мне заодно сакральный смысл обсчета скольких-то там fps, превышающих частоту вывода монитора? Все равно же их никто не видит.

as33 ★☆☆
() автор топика
Ответ на: комментарий от as33

>> Все равно же их никто не видит.

сакральный смысл в том, что при разработке какого-нить OpenGL приложения, желательно видеть реальный фпс, дабы отслеживать сделанные оптимизации или еще чего. Но да, для обычного пользователя это нафик не надо, поэтому но мои слова после затронутого XRender можно не обращать внимания :)

Andru ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.