|
Grafická pipeline III: Grafická karta
|
Další díl minisérie o grafické pipeline je věnován grafickým kartám. Dnes si ukážeme, co všechno se musí udát, aby grafická karta vyrenderovala jeden snímek počítačové hry. No a také se podívámen na to, k čemu jednotlivé hardwarové jednotky GPU vůbec jsou a k čemu slouží.
|
gpureport.cz
Pavel Šantrůček
12.07.2016
|
|
|
|
|
V minulém díle naší minisérie jsme si popsali, jak příkazy na vykreslení (Draw Calls), které vytvořila počítačová hra, prošly DirectX. Jak byly tyto příkazy přeloženy do jazyka srozumitelného grafické kartě, vytvořeny Command Buffers a použité zdroje jako jsou třeba textury alokovány ve VRAM grafické karty. Jak byly dále tyto Command Buffers ukládány do zásobníku Context Queue, ze kterého byly následně odesílány pomocí příkazové fronty s názvem Command Queue ke zpracování na grafickou kartu. U DirectX 12 je pak těchto front hnedle několik (Graphics Queue, Compute Queue a Copy Queue), takže příkazy mohou být na GPU zasílány paralelně.
Dnes se tedy už konečně dostáváme k samotným grafickým kartám, které musejí všechny tyto příkazy zpracovat a ve finále zobrazit kompletní snímek scény z naší hry na monitoru počítače. Obdobně jako tomu bylo u API DirectX, tak také zpracování příkazů na grafické kartě má nějaký svůj řád, podle kterého bude grafická karta náš obraz postupně skládat, tedy opět nějakou grafickou pipeline s různými zastávkami (Stages), ve kterých se bude něco dít.
Předpokládejme, že grafická karta obdržela příkaz na vykreslení objektu. My už jsme si řekli, že každý 3D objekt je popsán v prostoru svou geometrií (vertexy primitiv) a svým vzhledem (textury a shadery). Všechny tyto informace (zdroje) byly na GPU zaslány společně s vykreslovacími příkazy. Předpokládejme tedy, že geometrii (vertexy primitiv) společně s údaji o mapování vertexů na textury, či barvou jsou uloženy v jakémsi zásobníku (Vertex Buffer), textury alokovány ve VRAM a shadery (programy manipulující s vertexy, nebo barvou pixelů) máme „uhnízděny“ na výpočetních jednotkách grafické karty a nic tedy nebrání tomu, aby práce na vykreslení mohly započít
V jádru je princip samotného postupu vykreslení jednoduchý. Nejdříve musíme z geometrických dat objekt v pomyslném 3D prostoru grafické karty poskládat, následně ho z tohoto 3D prostoru převést (promítnout) do 2D prostoru rastrové mřížky (aby mohl být později zobrazen na plochém monitoru počítače) a každému pixelu, který objekt v rastrové mřížce obsadil, přiřadit tu správnou hodnotu barvy. Takto jsou vykreslovány postupně jednotlivá primitiva 3D objektu a posledním vykresleným primitivem je pak vykreslen celý 3D objekt. Když jsou vykresleny všechny 3D objekty scény, je také hotovou celý obraz (Frame). Princip je tedy jasný, takže se pojďme podívat na jednotlivé zastávky (Stages) grafické pipeline a co se v nich vůbec děje.