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
Kopie egyptské hrobky vzniká i díky 3D tisku Kopie egyptské hrobky vzniká i díky 3D tisku
Staré památky nezůstanou nedotčené zubem času ani vandaly. Ani egyptská hrobka Sethiho I. nebyla ušetřena. Aby ale zůstala uchována ve své původní podobě, tým ze společnosti Factum Foundation vytváří s pomocí 3D tisku její kopii. 
Včera, aktualita, Kateřina Hoferková
Studie odhaluje, že hráči MOBA mají vyšší IQ než hráči stříleček Studie odhaluje, že hráči MOBA mají vyšší IQ než hráči stříleček
Studiím tohoto ražení se obvykle moc nevěnujeme, ale když už máme závěr pracovního týdne před prodlouženým víkendem, nadneseme trošku odlehčené téma. Výzkumníci z Univerzity v Yorku se věnovali srovnání IQ hráčů MOBA a FPS. Co zjistili? 
16.11.2017, aktualita, Jan Vítek12 komentářů
IBM věří, že měděné spoje vydrží až do konce technologie CMOS IBM věří, že měděné spoje vydrží až do konce technologie CMOS
IBM samotné přišlo s využitím mědi pro propojení prvků v čipech vyráběných technologií CMOS už před dvaceti lety. Uvažovalo se přitom o tom, že měď v těchto čipech bude nahrazena grafenem, ale dle IBM to nenastane. 
16.11.2017, aktualita, Jan Vítek1 komentář
Video: NASA otestovala nadzvukový padák pro nový Mars Rover Video: NASA otestovala nadzvukový padák pro nový Mars Rover
NASA chce sice použít v podstatě stejný systém pro přistání roveru Mars 2020 jako v případě Curiosity, ale to neznamená, že všechny jeho součásti budou identické. Nyní byl otestován nadzvukový padák, který bude pro tuto misi využit.
16.11.2017, aktualita, Jan Vítek
SilverStone RedLine RL07 chtějí zaujmout elegancí a sklem SilverStone RedLine RL07 chtějí zaujmout elegancí a sklem
Pokud dnes přijde na trh nějaká skříň patřící alespoň do střední třídy, můžeme si být téměř jistí dvěma věcmi. Nabídne bočnici se sklem, nebo rovnou celou ze skla a také LED podsvícení. Řada RedLine RL07 nabízí oboje ve dvojím provedení. 
16.11.2017, aktualita, Jan Vítek