www.svethardware.cz
>
>

Grafická pipeline: jak se tvoří obraz III

Grafická pipeline: jak se tvoří obraz III
, , článek
Máme za sebou dva kontrolní lety nad naším grafickým potrubím. Dnes nás čeká let závěrečný, na jehož konci bychom už konečně rádi viděli nějaký ten obrázek z naší hry na samotném monitoru počítače.
Kapitoly článku:



reklama
Nejdříve doporučujeme si přečíst:
1. díl série: Grafická pipeline: jak se vytváří obraz
2. díl série: Grafická pipeline: jak se tvoří obraz II

V prvním letu jsme zjistili, jak nám počítačová hra vytváří Draw Calls a jak nám tyto požadavky na vykreslení prochází potrubím DirectX. Druhý let nás zase poučil o tom, jak se s těmito požadavky postupně vypořádala grafická karta a nakonec umístila finální snímek do zásobníku jménem Back Buffer. Dnes tedy jdeme do finále.

Je mi jasné, že valná většina z vás už jistě někdy slyšela výrazy jako Double Buffering, VBLANK, VSync či Tearing, které jsou úzce svázané s problematikou kolem přenosu obrazu z grafické karty do monitoru počítače. Také článků zabývajících se tímto tématem je na internetu poměrně velké množství a tak nepochybuji o tom, že mnozí z vás jsou také s touto problematikou více či méně detailně seznámeni. Já však musím a budu popisovat tuto část pipeline tak, jakoby o ní ještě nikde nic napsáno nebylo a čtenáři neměli o ničem ani potuchu. Věřím ale, že i ostřílení borci si v tomto díle najdou něco, co ještě nevěděli a nebude tak pro ně čtení tohoto článku ztrátou času.

Cílem našeho dnešního letu bude zjistit, jakým způsobem funguje monitor a jak s ním vůbec naše grafická karta komunikuje. Náš dnešní letový plán není pevně stanoven, protože budeme létat mezi grafickou kartou a monitorem počítače podle toho, kam nás vítr a hlavně různé problémy zanesou. Bez dlouhých okolků tedy půjdeme rovnou na věc a kde jinde začít než tam, kde jsme minule skončili. Vzhůru tedy ke Swap Chain a jeho Back Bufferu.


Monitor to gpu


Double Buffering



V minulém díle jsme si řekli, že výsledný snímek naší hry je grafickou kartou postupně vytvářen v úložišti zvaném Back Buffer, který je součástí uskupení zásobníků pojmenovaného Swap Chain. Kromě Back Bufferu obsahuje Swap Chain minimálně ještě jeden zásobník s názvem Front Buffer, který je povinný a slouží k prezentaci snímku na monitoru počítače. Důvod několika zásobníků je poměrně prostý. Back Buffer, jako pracovní zásobník, obsahuje data nehotového snímku, kde ho grafická karta teprve postupně vytváří a pokud bychom jeho obsah chtěli zobrazit na monitoru, nebyl by to věru pěkný pohled.

Front Buffer pak jako prezentační zásobník obsahuje vždy a za všech okolností snímek hotový. O samotnou prezentaci, tedy odesílání finálního snímku na monitor počítače, se stará Video Controller (VC), který je součástí grafické karty. VC čte data z Front Bufferu (tedy data hotového snímku) a vytváří TV signál, který je pro monitor srozumitelný, takže náš snímek může korektně zobrazit.

Swap Chain tedy funguje tak, že v zásobníku jménem Back Buffer je obrázek vytvářen a jakmile je dokončen, je jeho obsah (snímek) přenesen do zásobníku Front Buffer, který VC používá pro čtení (skenování) a vytváření vlastního signálu pro monitor počítače. Jakmile je snímek přenesen do Front Bufferu, Back Buffer je uvolněn pro tvorbu dalšího snímku grafickou kartou. Jak vidíte, nic složitého na tom není. Pokud je princip jasný, zbývá pouze objasnit způsob, jakým je přenos mezi zásobníky realizován.

Samozřejmě, že by samotný přenos šel provést jednoduchým kopírováním mezi zásobníky, ale to je celkem pracné a také to zabere nějaký drahocenný čas, který grafická karta nemá. Místo nákladného kopírování se zde používají ukazatele (Pointer). Oba zásobníky jsou umístěny v paměti grafické karty (VRAM) a jejich obsah začíná na nějaké paměťové adrese. Pomocí adresy do paměťového prostoru pak tedy víme, kde je a co obsahuje libovolný zásobník.

Princip je následující:
  1. GPU pracuje v Back Bufferu na novém snímku a zároveň je obsah Front Bufferu odesílán pomocí VC na monitor
  2. GPU dokončilo práci na snímku v Back Bufferu. Pomocí změny ukazatele (jeho adresy v paměti) sdělí VC, že od teď právě tento zásobník bude plnit funkci Front Bufferu a ať tedy posílá snímek na monitor odtud. Samozřejmě bývalý Front Buffer se tak stává pracovním Back Bufferem, kde může GPU vytvářet snímek následující.

Pointer
Pointer odkazuje na počáteční adresu zásobníku v paměti

Všechno to pracuje v nekonečné smyčce a tomu prohození adresy v ukazateli, které má za následek také prohození funkcí zásobníků Back/Front Buffer, se říká Swap (nebo také Flip). Protože výše uvedený příklad využíval k práci zásobníky dva, je tento způsob řešení nazýván „Double Buffering“. Swap Chain samozřejmě může využívat systém i s více zásobníky, ale o tom si povíme až později.





Systém zásobníků Swap Chain a to, jak spolu tyto zásobníky kooperují na odesílání finálního snímku na monitor, je tedy za námi. Zbývá snad jen něco málo říct o jejich velikosti, kterou v paměti grafické karty zabírají.

Velikost každého z těchto zásobníků je přímo úměrná rozlišení, které máme ve hře nastaveno a použité „hloubce“ barev. Jako příklad budeme uvažovat, že máme ve hře nastaveno FullHD (1920x1080) rozlišení a budeme používat standardní barevnou hloubku 24bit RGB. 24bit RGB znamená, že každá složka (komponent) barvy je tvořena s přesností 8bit (8bit Red, 8bit Green, 8bit Blue) a samotná barva může tedy nabývat 16,7 miliónu odstínů (256x256x256). Velikost jednoho zásobníku by tedy měla být 1920 x 1080 x 3Byte(24bit) = 6 220 800 Bytes, cca tedy 6 MB. V našem příkladu Double Buffering obsadí v paměti grafické karty cca 12 MB, protože pracuje se dvěma zásobníky.

Swap Chain využívající Double Buffering je tedy snad osvětlen. Víme také, že pomocí obsahu Front Bufferu a Video Controlleru je vytvářen TV signál, který je zasílán do monitoru počítače. V tomto signálu musí být v nějaké formě uložen náš hotový snímek. Vezmeme tedy naše letadlo a rychle přeletíme k monitoru počítače, kde se pokusíme náš snímek odchytnout. Cestu známe, protože poletíme nad kabelem s nějakými nápisy „HDMI“, který nás tam bezpečně dovede.
Nejpopulárnější grafické karty
reklama
Nejnovější články
Kostní implantáty vyrobené 3D tiskem pomohou lékařům Kostní implantáty vyrobené 3D tiskem pomohou lékařům
Tým amerických vědců z Northwestern University vyvíjí flexibilní kostní implantáty, které jsou vyráběny pomocí technologie 3D tisku. Tyto implantáty mohou pomoci například i v rozvojových zemích.
Včera,  aktualita, Kateřina Hoferková
Chystá se nový Ethernet: 5 Gb/s na stávajících kabelech Chystá se nový Ethernet: 5 Gb/s na stávajících kabelech
Ve spotřebitelském sektoru jsme už mnoho let odkázáni na 1Gb/s Ethernet, což se má brzy změnit. Můžeme se těšit až na propustnost 5 Gb/s, přičemž té bude možné dosáhnout na stávajících kabelových rozvodech.
Včera,  aktualita, Jan Vítek,  7 komentářů
K čemu vůbec jsou karty Founders Edition? Prý k řešení problémů K čemu vůbec jsou karty Founders Edition? Prý k řešení problémů
NVIDIA s představením generace Pascal odstartovala také kontroverzní program, když začala vydávat na trh karty série Founders Edition. Ty mnoho výrobců vidí jako snahu slíznout smetanu, ale tak to prý není.
Včera,  aktualita, Jan Vítek
ADATA SX8000: první běžné SSD s Intel 3D MLC ADATA SX8000: první běžné SSD s Intel 3D MLC
Dle Samsungu už mají brzy získat převahu SSD vybavená pro rozhraní PCI Express a protokol NVMe. Nástup nových ADATA SX8000 to jen dokazuje a jde prý také o první spotřebitelské modely vybavené 256Gbit paměťmi Intel / Micron 3D MLC.
Včera,  aktualita, Jan Vítek
HP vrací možnost využívat neoriginální náplně, prozatím HP vrací možnost využívat neoriginální náplně, prozatím
Společnost HP nedávno k nelibosti mnoha svých zákazníků aktivovala DRM, které už delší dobu bylo připraveno ve firmwaru inkoustových tiskáren OfficeJet. Znemožnila tak využití neoriginálních náplní a vysloužila si hlasitou kritiku.
Včera,  aktualita, Jan Vítek,  2 komentáře