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.
reklama
Nejnovější články
Teleskop Jamese Webba úspěšně prošel mrazivým testem Teleskop Jamese Webba úspěšně prošel mrazivým testem
Nadějný teleskop Jamese Webba (JWST) už je dávno postaven a nyní už má také za sebou úspěšnou zkoušku v komoře, kde byly provedeny testy v prostředí o teplotě blízké absolutní nule. Nyní se chystá do Kalifornie. 
Dnes, aktualita, Jan Vítek1 komentář
Microsoft má oživit Fable jako příběhové RPG Microsoft má oživit Fable jako příběhové RPG
Už před dvěma lety Microsoft zavřel Lionhead Studios, tvůrce populární série Fable. Nyní se mluví o tom, že by ji měl oživit, a to stále jako RPG orientované na příběh, z čehož kouká singleplayer - v dnešní době už téměř ohrožený styl hraní. 
Dnes, aktualita, Jan Vítek
Čtyři rozšíření prohlížeče Chrome nakazily půl milionu počítačů malwarem Čtyři rozšíření prohlížeče Chrome nakazily půl milionu počítačů malwarem
Google již stačil stáhnout z nabídky čtyři rozšíření pro prohlížeč Chrome, která byla ve skutečnosti malware navržený tak, aby postižené počítače generovaly útočníkům zisk. To zasáhlo přes půl milionů počítačů a jejich uživatelů.
Dnes, aktualita, Jan Vítek
Vega 64 jako investiční karta: majitel ji prodal a koupil sběratelský TITAN Xp Vega 64 jako investiční karta: majitel ji prodal a koupil sběratelský TITAN Xp
Absurdní zvyšování cen karet především v západních obchodech přináší také absurdní situace. Jeden z majitelů karty AMD Radeon RX Vega 64 totiž svou kartu prodal, koupil TITAN Xp ze sběratelské edice a ještě ušetřil. 
Dnes, aktualita, Jan Vítek1 komentář
Objevují se falešné záplaty pro Spectre a Meltdown, ve skutečnosti malware Objevují se falešné záplaty pro Spectre a Meltdown, ve skutečnosti malware
Stalo se v podstatě to, co jsme mohli očekávat. Objevují se falešné softwarové záplaty, které využívají všeobecného zmatení, nejistoty a především neinformovanosti běžných uživatelů ohledně exploitů Meltdown a Spectre. 
Dnes, aktualita, Jan Vítek