Obsah
1. Grafické akcelerátory určené pro vykreslování trojrozměrných scén
2. Základní operace prováděné 3D akcelerátory
4. Mikroprocesor Intel i860 – Cray on a Chip?
5. Podpora grafických operací mikroprocesorem Intel i860
6. Grafický akcelerátor Voodoo 1
7. Grafické operace podporované akcelerátorem Voodoo 1
8. Obsah dalšího pokračování seriálu
1. Grafické akcelerátory určené pro vykreslování trojrozměrných scén
V předchozí části seriálu o architekturách počítačů jsme se zabývali především popisem grafických akcelerátorů určených pro urychlení práce s plošnou (2D) grafikou, popř. pro rychlou dekomprimaci (a v některých případech i komprimaci) videa. Tyto grafické akcelerátory sice nabízely dostatek funkcí pro běžná (neherní) PC, ovšem před cca deseti lety se ve velké míře rozšířily grafické karty a grafické čipy podporující vykreslování 3D scén, které postupně nahradily 2D akcelerátory (na tento trend zareagovali i vývojáři grafických částí operačních systémů, ale to je již téma na některé z dalších pokračování tohoto seriálu). V současné době tedy patří mezi nejčastěji používané grafické akcelerátory takové systémy, které umožňují rychlé vykreslení prostorových těles popsaných pomocí hraniční reprezentace (boundary representation, B-rep). Tělesa jsou v hraniční reprezentaci popsána svým povrchem rozděleným většinou na plošné konvexní polygony.

Obrázek 1: Vykreslovací řetězec používaný grafickými akcelerátory při zpracovávání trojrozměrných scén. Do vykreslovacího řetězce vstupují dva typy dat – informace o vrcholech polygonů (trojúhelníků, plošných čtyřúhelníků atd.) a rastrová data, většinou bitmapy (znaky v rastrové podobě, bitové masky, sprity, kurzory myši) a především textury nanášené na vykreslované polygony.
Postupný vývoj čipů určených pro 3D akceleraci je naznačen v následující tabulce. Jsou v ní vypsány některé čipy (i860 je dokonce samostatně pracující mikroprocesor), na které zhruba na přelomu tisíciletí navázaly výkonnější 3D akcelerátory druhé generace, kterými se budeme zabývat později.
Akcelerátor/čip | Rok vydání |
---|---|
Intel i860 | 1989 |
Voodoo I Graphics PCI | 1996 |
S3 Savage 3D | 1998 |
Intel i740 | 1998 |
2. Základní operace prováděné 3D akcelerátory
Zjednodušeně je možné říci, že základní operací, kterou musí tyto 3D grafické akcelerátory provádět, je zobrazení vyplněných trojúhelníků s korektním řešením jejich vzájemného překryvu podle vzdálenosti od pozorovatele (kamery). Tato základní operace však musí být pro reálné použití (především v počítačových hrách) v několika směrech rozšířena, protože trojúhelník může být osvětlený jedním či několika světelnými zdroji nebo může být pokrytý texturou, popř. obojím (k tomu ještě připočítejme možnost vykreslení poloprůhledných trojúhelníků, které vyžaduje poněkud obtížnější přípravu 3D scény před jejím vykreslením). Dále může být povrch prostorových těles reprezentovaný polygony s větším počtem vrcholů, takže je – v případech, kdy se jedná o polygony nekonvexní – zapotřebí provádět výpočetně náročnou tesselaci obecných polygonů na jednodušší trojúhelníky. V neposlední řadě je žádoucí provádět pokročilejší operace s vykreslovanými tělesy (resp. s jejich povrchem), například postupné skrývání objektů v mlze (fog), bilineární či trilineární filtraci textur (především při použití mipmappingu) nebo provádění antialiasingu při vykreslování (supersampling, adaptive antialiasing).

Obrázek 2: Slavná Utažská čajová konvice (Utah teapot) vykreslená pomocí grafického akcelerátoru. Povrch konvice byl před provedením vykreslování programově převeden ze spline ploch na síť trojúhelníků. Pro každý vrchol trojúhelníku bylo vypočtena jeho barva pomocí Phongova osvětlovacího modelu a trojúhelníky byly následně vykresleny s využitím Gouraudova stínování, které interpoluje barvu v každém bodě povrchu trojúhelníku na základě pozice tohoto bodu oproti vrcholům trojúhelníku. Algoritmus Gouraudova stínování je tak jednoduchý, že ho bylo možné relativně snadno implementovat i v první generaci 3D grafických akcelerátorů.
3. GPU, OpenGL a Direct3D
První generace grafických akcelerátorů dostupná pro počítače PC sice nedokázala provádět veškeré výše zmíněné operace, ovšem grafické subsystémy se neustále zrychlují a zdokonalují, čímž je umožněna aplikace stále většího množství grafických algoritmů přímo na čipech grafického akcelerátoru. To je důležité zejména v situacích, kdy se kromě vlastního zobrazování používají i další výpočty nad vykreslovanou scénou, například fyzikální simulace či výpočet trajektorie a případných kolizí pohybujících se těles. V tomto případě je vhodné ponechat co nejvíce výpočetního výkonu mikroprocesoru pro výpočet simulací a veškeré grafické algoritmy či co jejich největší část provádět na specializovaném zařízení – grafickém procesoru GPU (Graphics Processor Unit), který se stává nedílnou součástí prakticky všech grafických čipů a některé jeho vlastnosti (především paralelní zpracování dat, hluboké zřetězení operací – pipelining) předurčují GPU i k tomu, že se pomocí nich provádí i další (negrafické) algoritmy.

Obrázek 3: Utah teapot zobrazený s odlesky způsobenými odrazem světelných paprsků od jeho povrchu. Tento efekt některé grafické akcelerátory z první generace nedokázaly vytvořit (neobsahovaly jednotku pro výpočet osvětlovacího modelu), proto se musely odlesky předpočítat (a uložit například formou textury, která modulovala texturu základní). Moderní grafické akcelerátory již mají implementován celý osvětlovací model, tedy i výpočet odlesků.
Za zmínku stojí také skutečnost, že téměř všechny postupy, které jsou dnes implementovány na popisovaných grafických akcelerátorech, je možné vyjádřit či popsat pomocí funkcí dvou v současnosti nejpoužívanějších rozhraní pro 3D grafiku: OpenGL a Direct3D (v minulosti bylo pro akcelerátory s čipy firmy 3dfx vyvinuto i poměrně populární rozhraní GLIDE, které dokázalo využít i takové vlastnosti grafických akcelerátorů, které nebyly v tehdejších verzích OpenGL a vznikajícího DirectX dostupné). Unifikované rozhraní je výhodné především pro programátory aplikací, kteří mohou jednotně vytvářet aplikace, které budou funkční na téměř všech grafických akcelerátorech této kategorie. Pokud není nějaký grafický efekt či trik přímo implementován na akcelerátoru (například skrývání objektů v mlze), je zvolen jeho (obecně pomalejší) programový výpočet nebo se efekt vůbec neaplikuje. Pěkným příkladem je například takzvaný bump mapping, který je možné vynechat za cenu vizuálního „vyrovnání“ původně nerovných povrchů.

Obrázek 4: Trojrozměrná scéna vykreslená s využitím efektu mlhy (fog), který byl ve své nejjednodušší podobě implementován již na prvních grafických 3D akcelerátorech pro PC vybavených čipy 3dfx (Voodoo Graphics PCI).
4. Mikroprocesor Intel i860 – Cray on a Chip?
Ještě před popisem grafických akcelerátorů reálně používaných na počítačích PC se zmiňme a zajímavém (i když komerčně neúspěšném) projektu firmy Intel, který se v několika ohledech podobá již popsané architektuře TIGA, i když samotná interní struktura obou čipů byla odlišná. Firma Intel navrhla a následně na konci roku 1989 představila nový typ mikroprocesoru s architekturou RISC a instrukční sadou typu VLIW (v jednom instrukčním slově je zakódováno větší množství operací, každá z nich určená pro jinou jednotku na čipu), který nazvala Intel i860 a v propagačních materiálech poněkud nadneseně označovala sloganem „Cray on a Chip“. Jednalo se v podstatě o výkonný signálový procesor (DSP – Digital Signal Processor) podporující celočíselné i základní FP operace, který byl navíc vybavený jednotkou specializovanou pro provádění grafických operací použitelných například při vyplňování trojúhelníků, vykreslování poloprůhledných ploch atd.

Obrázek 5: Mikroprocesor Intel i860.
Mikroprocesor i860 obsahoval 32 třicetidvoubitových registrů určených pro provádění běžných celočíselných aritmetických i logických operací a dále pak 16 registrů o šířce 64 bitů (rozdělitelných na 32 třicetidvoubitových registrů) použitelných pro operace prováděné s hodnotami uloženými ve formátu plovoucí řádové tečky (čárky). Kromě klasické aritmeticko-logické jednotky (ALU) tento procesor obsahoval i dvě specializované jednotky, které dohromady můžeme označit jako zjednodušený, ale o to rychlejší matematický koprocesor. První z těchto jednotek byl FP adder, s jehož pomocí bylo možné provádět součty, rozdíly, porovnání a konverze čísel uložených v systému plovoucí řádové tečky. Druhá jednotka nazvaná FP multiplier sloužila k součinu dvou čísel a taktéž k výpočtu převrácené hodnoty. Všechny tři základní jednotky, tj. ALU, FP adder a FP multiplier pracovaly paralelně, přičemž paralelismus byl podporován přímo v instrukční sadě (viz výše uvedená zmínka o instrukční sadě typu VLIW – Very Long Instruction Word).

Obrázek 6: Při výpočtu mlhy (viz předchozí obrázky) je nutné provést pro každý vykreslovaný fragment (fragment je, zjednodušeně řečeno, entita nesoucí informaci o jednom pixelu doplněnou o další atributy, například hloubku/vzdálenost fragmentu od pozorovatele) smíchání původní barvy fragmentu s barvou mlhy, přičemž poměr mezi původní barvou a barvou mlhy je určen na základě vzdálenosti fragmentu od pozorovatele a hustoty mlhy. Tuto operaci lze na mikroprocesoru Intel i860 implementovat poměrně snadno, především při použití jeho „grafických“ operací.
5. Podpora grafických operací mikroprocesorem Intel i860
Vraťme se však k podpoře grafických operací mikroprocesorem Intel i860. Tyto operace byly implementovány přímo v jeho instrukční sadě – kromě běžných instrukcí určených pro provádění operací s operandy reprezentovanými v systému pevné i pohyblivé řádové čárky (fixed point, floating point) rozpoznával mikroprocesor deset instrukcí provádějících grafické operace. Jednalo se například o operace umožňující práci s pixely (čtení, zápis, konverze z různých formátů, míchání barev) či práci se Z-bufferem (testování hodnoty uložené v registru oproti hodnotě uložené v Z-bufferu). Nejednalo se tedy o stejné operace, jaké můžeme najít na moderních grafických akcelerátorech, ale o určitou podporu pro vykreslovací (renderovací) algoritmy, které mohly s výhodou využít možnosti souběžného zpracování několika operací mikroprocesorem (tento typ paralelismu byl přímo řízený překladačem, na rozdíl od dnešních superskalárních procesorů vybavených obvody, které instrukce samy rozdělují mezi jednotlivé jednotky).

Obrázek 7: Operace s fragmenty prováděné při rasterizaci trojúhelníků či obecnějších konvexních polygonů na grafickém akcelerátoru. Naznačené operace s fragmenty je možné poměrně snadno programově implementovat i na mikroprocesoru Intel i860 s využitím specializovaných grafických instrukcí.
Aby byla rychlost provádění grafických operací dostatečná, prováděly se operace vždy nad větším množstvím dat, například nad čtveřicí či osmicí pixelů, jejichž hodnoty byly uložené v registrech původně určených pro operace s plovoucí řádovou tečkou (FP). Tato technologie byla později po několika úpravách představena i na platformě x86 pod jménem MMX. Výkonnost grafických operací byla na dobu vzniku mikroprocesoru poměrně uspokojivá: mikroprocesor například dokázal zkonvertovat a následně vystínovat Gouraudovým stínováním až 50 000 trojúhelníků za sekundu, přičemž se počítá s tím, že plocha každého trojúhelníku je průměrně 100 pixelů. Jediný problém, který částečně zapříčinil neúspěch celého mikroprocesoru i860, spočíval v tom, že optimalizaci kódu musel provádět buď přímo programátor v assembleru (nepoužitelné na větší projekty) nebo překladač; ovšem kvalita tehdejších překladačů nebyla tak dobrá do té míry, aby se využila celá výpočetní síla tohoto mikroprocesoru (viz následující tabulka s teoretickými hodnotami).
Mikroprocesor | Hodinová frekvence | Výpočetní výkon |
---|---|---|
i860 | 40 MHz | 80 MFLOPS (single precision) |
i860 | 40 MHz | 60 MFLOPS (double precision) |
i860XR | 40 MHz | 80 MFLOPS (double precision) |
i860XR | 40 MHz | 42 SPECmark |
6. Grafický akcelerátor Voodoo 1
Při popisu první generace grafických akcelerátorů určených pro osobní počítače PC samozřejmě nesmíme zapomenout na slavný grafický akcelerátor Voodoo 1, který se záhy po svém uvedení na trh stal po dobu cca 1,5 roku ikonou akcelerované 3D grafiky. Tento grafický akcelerátor se do počítače připojoval přes sběrnici PCI. Jednalo se přitom – což je možná z dnešního pohledu neobvyklé, ale z obchodního hlediska velmi dobré řešení – o doplněk ke grafické kartě, což v praxi znamenalo, že pro běžnou práci s počítačem (textové i grafické režimy) se využívalo funkcí grafické karty (VGA, SVGA atd.) a teprve při práci s trojrozměrnými scénami se výstup z grafické karty zakázal a její funkci převzal grafický akcelerátor Voodoo 1, který tak nemusel obsahovat VGA BIOS, zaručovat kompatibilitu s VGA ani další funkce očekávané od běžné 2D grafické karty. Tvůrci Voodoo 1 tak mohli své čipy optimalizovat pouze pro 3D grafiku.

Obrázek 8: Grafický akcelerátor Voodoo 1. Na plošném spoji můžeme vidět dvojici čipů tvořících srdce grafického akcelerátoru – FBI a TMU. Po levé straně se nachází dvojice patnáctipinových konektorů. Jeden z konektorů sloužil k propojení mezi grafickou kartou a grafickým akcelerátorem, druhý konektor pak k připojení monitoru.
7. Grafické operace podporované akcelerátorem Voodoo 1
Akcelerátor Voodoo 1 obsahoval dvojici patnáctipinových konektorů D-sub. Na první konektor se pomocí krátkého kabelu připojoval výstup z grafické karty (karta si tedy „myslela“, že posílá video signál na monitor, ve skutečnosti ho však předávala do grafického akcelerátoru). Na konektor druhý se buď posílal signál z grafické karty (přemostění) nebo naopak signál generovaný přímo grafickým akcelerátorem (některé karty Voodoo 1 pro přepínání video signálu používaly relé, které slyšitelně „cvakalo“ při spuštění 3D akcelerace). O vykreslování 3D scén se starala dvojice specializovaných čipů nazvaných FBI a TMU. Čip FBI neboli Pixelfx zajišťoval komunikaci s počítačem, přístup do lineárního framebufferu (obrazové paměti), implementoval Gouraudovo stínování (pomocí interpolátorů), funkci Z-bufferu (paměti hloubky), ditheringu obrazu a taktéž výpočet efektu mlhy. Naproti tomu čip TMU neboli Texelfx sloužil pro mapování textur, bilineární a trilineární filtraci textur a mipmapping.
Video paměť složená z modulů EDO DRAM, měla kapacitu 4 MB, přičemž byla rozdělena na dvě poloviny. První 2 MB sloužily pro framebuffer, tj. pro uložení rastrového obrazu a „zadní“ buffer (při použití double bufferingu), ale i pro paměť hloubky (Z-buffer). Tato paměťová kapacita umožňovala použití double bufferingu pro rozlišení 640×480 pixelů při použití 16bitové barevné hloubky a 16bitového Z-bufferu (informace v něm mohly být uloženy buď jako celá čísla nebo hodnoty v pohyblivé řádové čárce představující převrácenou hodnotu vzdálenosti fragmentů od pozorovatele, důvod si vysvětlíme příště). Potřebná kapacita video paměti je v tomto případě rovna: 640×480×2×3=1843200 bajtů (konstanta 3 znamená přední buffer + zadní buffer + Z-buffer, konstanta 2 samozřejmě 16 bitů na pixel či fragment). Druhé 2 MB video paměti byly určeny pro uložení textur a jejich zpracování čipem TMU.
Podrobnější informace o tomto (z hlediska vývoje 3D grafiky) významném grafickém akcelerátoru si uvedeme v následující části seriálu.
8. Obsah dalšího pokračování seriálu
V následující části seriálu o architekturách počítačů si podrobněji popíšeme vnitřní strukturu a funkci dalších grafických akcelerátorů. Především se budeme zabývat čipem Intel i740, který jako první nabídl uživatelům grafický akcelerátor určený pro sběrnici AGP se všemi výhodami, které tato sběrnice nabízí (Intel měl v tomto ohledu nad ostatními výrobci grafických akcelerátorů výhodu, protože kromě detailní znalosti AGP tento grafický čip přizpůsobil svému čipsetu i440). Jedná se především o možnost uložení textur přímo v operační paměti počítače s tím, že grafický akcelerátor může automaticky načítat ty části textur, které potřebuje při vykreslování celé trojrozměrné scény, z operační paměti bez nutnosti meziuložení textur v paměti texturovací. Tento způsob práce grafického akcelerátoru je sice pomalejší než přímé použití video paměti (zde speciálně texturovací paměti), ovšem umožňuje poměrně výrazné snížení ceny celého grafického akcelerátoru. Právě z tohoto důvodu byly grafické akcelerátory vybavené čipem Intel i740 i přes nižší grafický výkon v našich krajinách velmi oblíbené.

Obrázek 9: Grafická karta osazená čipem Intel i740.
9. Odkazy na Internetu
- 25 Microchips That Shook the World
http://www.synbio.org.uk/…ws/1351.html - Sprite (computer graphics)
http://en.wikipedia.org/wiki/Sprite_(computer_graphics) - Sprite (počítačová grafika)
http://cs.wikipedia.org/wiki/Sprite_(počítačová_grafika) - Wikipedia: Video Display Controller
http://en.wikipedia.org/…y_Controller - 3dfx Voodoo1 PCI
http://www.v3info.de/…tml/v1.shtml - Glide 2.2 Programming Guide
http://www.gamers.org/…glidepgm.htm - Glide API
http://en.wikipedia.org/wiki/Glide_API - S3 Graphics
http://www.s3graphics.com/en/index.aspx - TSENG ET6000 Performance Page
http://dani75.tripod.com/TSENG.htm - Tseng Labs Ships ET6000 Advanced Graphics Chip, Announces Additional Manufacturing Sources
http://www.encyclopedia.com/…8088868.html - CyberMax chooses Tseng Labs' ET6000 Graphics and Video Controller for Max and ProMax Series PCs
http://findarticles.com/…ai_18754932/ - Intel i860
http://en.wikipedia.org/wiki/Intel_860 - Intel i860 64-Bit Microprocessor
http://www.microprocessor.sscc.ru/i860.html - S3 Savage
http://en.wikipedia.org/wiki/S3_Savage - Savage (S3)
http://www.economy-point.org/…vage-s3.html - Intel i740
http://en.wikipedia.org/wiki/Intel740 - Intel i740 Datasheet
ftp://download.intel.com/…29061902.pdf - Intel740™ Graphics Accelerator P854 Hardware
ftp://download.intel.com/…29062202.pdf - 3dfx Interactive
http://en.wikipedia.org/…doo_Graphics - Intel 860@cpu-collection
http://www.cpu-collection.de/?…