GPUreport
Grafická pipeline IV: Monitor
Další a dnes již poslední díl minisérie o grafické pipeline je věnován monitorům. Dnes si ukážeme, jak se přenáší obraz z naší počítačové hry na monitor, co je to Swap Chain, Double a Triple Buffering, jak funguje vertikální synchronizace obrazu a jak se díku ní můžeme zbavit nepříjemného Tearingu.
gpureport.cz  Pavel Šantrůček  22.09.2016

OBSAH:
1. Swap Chain a Double Buffering          
4. VSync          
2. Monitor          
5. Triple Buffering a VSync          
3. Screen Tearing          
6. Závěr          
 

Naše minisérie o grafické pipeline se pomalu blíží ke svému závěru. V minulých dílech jsme si řekli, jak počítačová hra vytváří příkazy na vykreslení (Draw Calls), které jsou následně za pomoci DirectX přeneseny do grafické karty. Grafická karta pak pomocí těchto příkazů vytvoří (vyrenderuje) finální obraz do úložiště jménem Render Target (nejčastěji Back Buffer), které je umístěno ve framebufferu (VRAM). Posledním krokem, který zbývá učinit tedy je, přenést nějak tento snímek z framebufferu do monitoru počítače a zobrazit jej.

 

Monitor

 

Co je Swap Chain?

Představte si jednu věc. My jsme si řekli, že grafická karta renderuje obraz postupně po jednotlivých primitivech do zásobníku ve framebufferu. Pokud by byl obraz přenášen do monitoru rovnou z tohoto „pracovního“ bufferu během jeho vytváření, je jasné, že by na takovýto obraz asi pěkný pohled nebyl. Z tohoto důvodu bylo třeba oddělit pracovní zásobník grafické karty od zásobníku, který je využit pro přenesení obrazu do monitoru. Bufferů je tedy v grafické paměti umístěno vícero a každý má nějakou svou úlohu. Uskupení těchto bufferů se říká Swap Chain.

Double Buffering

Nejběžnějším způsobem prezentace snímku na monitoru počítače je takzvaný Double Buffering. Jak už napovídá samotný název, pro renderování a přenášení snímku na monitor počítače Swap Chain obsahuje buffery dva – Front Buffer a Back Buffer.

Zatímco Back Buffer je bufferem pracovním, kam grafická karta postupně vytváří snímek, Front Buffer slouží pouze k přenášení obrazu na monitor. Vše pracuje na jednoduchém principu. Grafická karta renderuje snímek postupně po primitivech do Back Bufferu. Když je snímek v Back Bufferu dokončen, jeho obsah je překlopen do Front Bufferu, odkud je pak přenášen do monitoru k vlastnímu zobrazení. Když se tak stane a Back Buffer byl překlopen do Front Bufferu, obsah Back Bufferu je uvolněn a grafická karta ho může použít pro vytváření snímku dalšího. Takto to jde stále dokola a vždy, když grafická karta snímek v Back Bufferu dokončí, překlopí jej do Front Bufferu. Tomuto překlopení bufferů se říká Swap, nebo také Flip.

Takto je zajištěno to, že zatímco Back Buffer slouží pro vlastní práci grafické karty (rendering), Front Buffer je zásobníkem prezentačním, protože obsahuje vždy snímek kompletně hotový a připravený tak k přenosu do monitoru počítače.

 

Pointer

 

Samotné překlopení Back Buffer/Front Buffer (tedy Swap nebo Flip) je realizováno pouhým prohozením počátečních adres zásobníků v ukazateli (Pointer), který využívá grafická karta k tomu, aby věděla, kde je ve VRAM umístěn Back Buffer a kde zas Front Buffer. Je-li proveden Swap, tyto adresy se zamění, Back Buffer se tak stává Front Bufferem a naopak Front Buffer se stává Back Bufferem, kam grafická karta bude vytvářet snímek další. Jednoduché, avšak účinné. Nicméně, ani dvojitý buffering není bez chyb, ale o tom si povíme až v dalších kapitolách.

Velikost jednotlivých bufferů, které jsou součástí Swap Chain, je přímo úměrná rozlišení a použité „hloubce“ barev. Pokud máme ve hře nastaveno rozlišení 1920x1080 pixelů a hra využívá standardní barevnou hloubku 24-bit RGB znamená to, že každý pixel obrazu ke korektnímu zobrazení potřebuje 3 Byte. Velikost bufferu je  tedy 1920 * 1080 * 3 = 6 220 800 Bytes (6 MB). V případě dvou bufferů ve Swap Chain pak celkem 12 MB.

 

24-bit RGB znamená, že každá složka (komponenta) barvy je tvořena s přesností 8-bit (8-bit Red, 8-bit Green, 8-bit Blue) a samotná barva může tedy nabývat 16,7 miliónu odstínů (256x256x256). Existují i další formáty, které využívají třeba 32-bit hloubky, kdy je přidána další 8-bitová komponenta průhlednosti A (Alpha), nebo také i 64-bit hloubky pro HDR.

 

V každém případě, hotový snímek je nyní umístěn ve Front Bufferu a o jeho vlastní přenos do monitoru počítače se stará Video Controller (VC), který je součástí grafické karty. Video Controller postupně, pěkně řádek po řádku, čte data z Front Bufferu (Scan Out), vytváří video signál a za pomoci propojovacího kabelu (třeba HDMI) na nosné vlně tohoto signálu průběžně zasílá data do monitoru počítače.

         
  Další kapitola
         

SPONSORS & PARTNERS

Asus  Alza  MSI
AMD  Sapphire  Asbis  EVGA  Nvidia

Copyright (c) 2017 InfoTrade Powered by ASP.NET & MS SQL Server