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
Facebook brzy vypustí satelity pro golbální internet Facebook brzy vypustí satelity pro golbální internet
Především chudé země mají velký problém s pokrytím internetem i jeho cenou. Facebook se to už dlouho snaží vyřešit a nyní to vypadá, že použije satelity systému Athena na nízké orbitě. Ty by se mohly objevit už velmi brzy.
Dnes, aktualita, Milan Šurkala
Doporučené PC sestavy: červenec 2018 Doporučené PC sestavy: červenec 2018
V tomto článku se podíváme na doporučené konfigurace vhodné pro různá využití. Od levných, malých a úsporných nettopů přes sestavy OFFICE a HOME až po herní a vysoce výkonné sestavy GAME a TOP.
Dnes, návod, Jan Vítek52 komentářů
Microsoft Identity Bounty Program, za nalezení chyby až $100 000 Microsoft Identity Bounty Program, za nalezení chyby až $100 000
Microsoft spustil Identity Bounty Program, kdy za nalezení závažné chyby v systémech přihlašování u vybraných služeb Microsoftu můžete dostat nemalou peněžní odměnu. Ta může činit až 100 tisíc dolarů.
Včera, aktualita, Milan Šurkala
Hackeři z MoneyTaker ukradli v ruské bance 20 mil. Kč Hackeři z MoneyTaker ukradli v ruské bance 20 mil. Kč
Nesprávně nastavený a neaktualizovaný router stál za úspěšným útokem hackerské skupiny MoneyTaker na ruskou banku PIR Bank. Hackeři byli schopni převést a vybrat peníze v hodnotě téměř 20 milionů korun.
Včera, aktualita, Milan Šurkala1 komentář
Samsung uvádí obří 43" zakřivený monitor C43J89 Samsung uvádí obří 43" zakřivený monitor C43J89
Samsung představil nový obrovský 43" monitor C43J89, který pochopitelně disponuje zakřivenou obrazovkou s poměrem stran 32:10. Díky VA panelu potěší vysokým kontrastem 3000:1 a nabídne i 120Hz frekvenci.
Včera, aktualita, Milan Šurkala1 komentář