Portál AbcLinuxu, 2. června 2024 12:43
nouveau + vsync pod Xorg = nic moc
18.8.2014 18:24
| Přečteno: 7930×
|
| poslední úprava: 18.8.2014 18:35
Používám nouveau a vsync videa z VLC (např. přes Xvideo) sice funguje, ale jak říká titulek, je to nic moc.
První problém je, že synchronizaci provádí samotná Xka (a to jak u výstupu pomocí Xvidea, tak při GLX), a zřejmě při čekání na vblank Xka neďelají nic jiného, takže se posekává všechno ostatní co X server renderuje, zvlášť přesuny oken.
Druhý problém je, že mám 2 monitory (každý jiný) a video se vsyncne jen ke primárnímu. Přitom Linux poskytuje API, pomocí kterého lze tohle řešit.
Tím API o kterém mluvím, je DRM_IOCTL_WAIT_VBLANK. Umožňuje aplikacím, aby na vblank čekaly samy, místo toho aby to nechaly na X. Další výhodou je že umožňuje čekat na vblank druhého monitoru.
Tak jsem si zbastlil jednoduchý patch pro VLC, který s pomocí ioctl volání čeká na vblank před swapnutím GLX bufferu. Má to drobný háček - na menším z mých dvou monitorů to funguje skvěle, zatímco na větším se stihne překreslit jen asi půlka obrazu (asi se to taky zbrzdí, než X server přijme a zpracuje požadavek na swap), takže tearing je konstantně na jednom místě. To jsem vyřešil přidáním sleepu, což ten "trhanec posune pryč z obrazu" - překreslení se trefí až do dalšího vblanku. Takže ve výsledku je to příšerně zprasený hack a pravděpodobně ten patch (v příloze) nebude nikomu jinému fungovat, ale já jsem spokojený, že mám vsync na obou monitorech bez jakéhokoli posekávání při přesunu oken.
Teď se nabízí otázka, zda to jde vyřešit korektně, aby z toho profitovali všichni. Nejlepší by asi bylo upravit samotný kód X serveru (respektive dri driveru) - tak, aby při čekání na vblank obsluhoval další eventy - pokud to jde, ale nejsem si jistý, jestli na to mám koule
Tiskni
Sdílej:
Komentáře
Vložit další komentář
18.8.2014 18:25
Hans1024 | skóre: 5
| blog:
hansovo
Re: nouveau + vsync pod Xorg = nic moc
18.8.2014 21:34
Hans1024 | skóre: 5
| blog:
hansovo
Re: nouveau + vsync pod Xorg = nic moc
Založit nové vlákno •
Nahoru
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.