Nouveau ze wsparciem Page-Flipping, Sync-To-VBlank

Nouveau ze wsparciem Page-Flipping, Sync-To-VBlank

    przez -
    1 277
    X.Org
    Ostatnimi czasy otwarte sterowniki Nouveau, jakby przyspieszyły w rozwoju, jeżeli chodzi o liczbę dodawanych funkcji. Nie tak dawno Francisco Jerez dodał do drzewa Git zawierającego kod sterownika xf86-video-nouveau wsparcie dla DRI2 page-flipping i sync-to-vblank.

    KMS page-flipping był już dostępny od jakiegoś czasu w jądrze Linux 2.6.32 z DRI2 w postaci page-flipping ioctl. Wykorzystywały go sterowniki ATI oraz Intela, jak również X.Org Server i Wayland. Od teraz również projekt Nouveau może korzystać z dobrodziejstw w postaci zwiększonej wydajności.

    Co takiego robi page-flipping?

    Page-flipping polega na tym, że ramka rysowana jest zawsze w pamięci, która nie jest wyświetlana na ekranie – gdy wyświetlana jest poprzednia stabilna ramka.

    Jak już się cały obraz narysuje, podmienia się go na wyświetlany. Podmienianie zajmuje bardzo mało czasu – jest to zazwyczaj wskazanie karcie,  że ma pokazywać inny obszar pamięci (tzw. flip), albo obraz jest wkopiowywany na ten wyswietlany (blit) – wkopiowywanie i tak trwa dużo krócej niż rysowanie.

    Drugą ważną zmianą jest wsparcie dla sync-to-vblank. Pozwala to zredukować tzw. tearing.

    W ten sposób unika się widzenia, jak obraz jest rysowany. Trik polega na tym, żeby podmiany jednego obrazu na drugi dokonać w tzw. Vertical blank (vblank). W starych monitorach jest to czas, w którym strumień elektronu wraca po narysowaniu całego obrazu w pozycję wyjściową do rysowania kolejnego. Ogólnie jest to czas, w którym monitor nie aktualizuje niczego na obrazie i cokolwiek zrobimy z obrazem, będzie to niewidoczne – tzn widoczne dopiero przy wyświetlaniu kolejnego obrazu. Oczywiście, to co robimy (czyli flip lub blit) musi być dokładnie zsynchronizowane z momentem vblank i trwać krócej niż koniec vblank. Jeżeli tak nie jest – obserwujemy efekty typu tearing – widać część starego i nowego obrazu naraz.

    Jak widzimy jest to bardzo ważna cecha, szczególnie jeżeli chodzi o sceny 3D. Jednakże, aby móc wykorzystać nowe zdolności, potrzebujemy relatywnie nowego jądra, gdzie to jest wspierane. Trzeba pamiętać o dodaniu opcji GLXVBlank do pliku xorg.conf, w celu aktywowania klienta synchronizacji GLX do VBlank, który wyeliminuje nam tearing.

    • lole

      to moglbys napisac od razu jak to zrobic… ?