Obsah
1. Grafické akcelerátory na osobních počítačích
2. Softwarové vykreslování obrazu nebo grafická akcelerace?
3. Urychlení práce s rastrovým 2D obrazem
5. Podpora pro zobrazení kurzoru myši
6. Změna rozměrů a zrcadlení rastrových obrázků či videa
1. Grafické akcelerátory na osobních počítačích
V předchozích částech seriálu o architekturách počítačů jsme se zabývali popisem grafických karet určených pro osobní počítače kompatibilní s IBM PC. Většina popisovaných grafických karet měla ve své podstatě velmi jednoduchou funkci – na základě hodinového signálu měl čip (sekvencér a současně i řadič obrazovky) umístěný na grafické kartě postupně načítat hodnoty jednotlivých pixelů z obrazové paměti, tato data převádět na barvonosné signály (R, G, B) a posléze k těmto signálům navíc přidat trojici dalších informací důležitých pro správnou funkci monitoru – okamžiky zatemnění obrazu (většinou se jednalo o všechny čtyři okraje obrazovky) a průběhy horizontálního i vertikálního návratu elektronového paprsku na začátek dalšího obrazového řádku (horizontální návrat paprsku) popř. do levého horního rohu obrazovky (vertikální návrat paprsku). Jedním z čipů, které tuto funkci (samozřejmě s pomocí dalších elektronických prvků) zajišťovaly, byl již popisovaný grafický řadič Motorola 6845, který byl použit mj. i v grafických kartách MDA, CGA a Hercules.
Obrázek 1: Grafický řadič Motorola MC6845 použitý na osobních počítačích (PC) v grafických kartách MDA, CGA a Hercules.
S trochou nadsázky je možné říci, že i většina dalších grafických karet, které následovaly po CGA a Herculesu, se principem své práce od výše popsané funkce příliš neodlišovaly. Týká se to například i grafické karty VGA a první generace karet SVGA (viz předchozí části tohoto seriálu). I přes poměrně složité ovládání těchto karet a podporu grafických režimů s větším rozlišením i vyšším počtem barev tyto karty programátorům nenabízely prakticky žádnou podporu pro další grafické operace, například možnost vykreslování spritů (tato funkcionalita byla běžná již na některých osmibitových počítačích a samozřejmě na Amize), podporu pro blokové přenosy dat, vykreslování základních 2D tvarů atd. Existovaly sice grafické akcelerátory určené pro profesionální použití, především již popsané karty PGC – Professional Graphics Controller a TIGA – Texas Instruments Graphics Architecture, ale tyto akcelerátory byly plně podporovány pouze v několika specializovaných aplikacích, nikoli například ve hrách.
Obrázek 2: Umístění čipů na trojici plošných spojů grafického akcelerátoru PGC.
2. Softwarové vykreslování obrazu nebo grafická akcelerace?
S nástupem první generace karet SVGA (vybavených většinou 512 kB nebo 1 MB obrazové paměti) a především s postupným rozšiřováním graficky orientovaných programů (včetně MS Windows) se však stále více ukazovalo, že stávající architektura grafického subsystému osobních počítačů PC založená na tom, že veškeré vykreslování do obrazové paměti obstarává mikroprocesor, je již nedostatečná. Důvodů bylo více, zejména se jednalo o to, že mikroprocesory počítačů vybavených kartami SVGA sice byly mnohem výkonnější než procesory prvních IBM XT, ale při nutnosti provádění naprogramovaných grafických operací byly touto činností ve zbytečně velké míře zatěžovány, takže jejich výpočetní výkon nemohl být využitý pro jinou činnost. Například pouhý posun obrazu o jeden obrazový řádek (programový scrolling) v 256barevném grafickém režimu s rozlišením 1024×768 pixelů vyžadoval, aby mikroprocesor přenesl 768 kilobajtů dat (z obrazové paměti zpátky do obrazové paměti), což je i v případě použití poměrně rychlé sběrnice PCI dosti náročná operace (ostatně si můžete sami vyzkoušet, jak „rychlé“ je grafické uživatelské rozhraní v případě, že se při startu X Window systému použije obecný ovladač pro grafické karty VESA).
Obrázek 3: Pracovní plocha Macintoshe 128K nebo 512K. Jediný grafický režim, který byl na první verzi Macintoshe dostupný, nabízel svým uživatelům rozlišení 512×342 pixelů, přičemž obraz byl monochromatický (každý pixel mohl být pouze bílý nebo černý). Z toho vyplývá, že potřebná kapacita obrazové paměti má velikost pouhých 512×342/8=21 kB. Jedná se o tak malý objem dat, že se překreslování obrazovky, přesuny oken, zobrazení kurzoru myši atd. řešilo programově – všechny operace vykonával mikroprocesor Macintoshe, tj. čip Motorola 68000, který byl taktovaný na 7,834 MHz.
3. Urychlení práce s rastrovým 2D obrazem
První grafické akcelerátory, které se mezi uživateli počítačů PC rozšířily především v době nástupu sběrnice PCI a první generace mikroprocesorů Pentium, zpočátku obsahovaly pouze podporu pro blokové přesuny dat mezi operační pamětí a pamětí grafickou (většinou s využitím takzvaného bus-master přenosu, při němž řízení sběrnice převzal řadič umístěný na grafické kartě), podporu pro práci s grafickým kurzorem myši a v některých případech také umožňovaly modifikaci dat (tj. barev jednotlivých pixelů) při blokových přenosech (raster operations, raster-ops, ROPs. Možnosti grafických akcelerátorů se však poměrně rychle rozšiřovaly, některé grafické karty například začaly podporovat i dekomprimaci videa podle normy MPEG 1 či MPEG 2. Ovšem největší novinkou se pro většinu uživatelů staly grafické akcelerátory podporující vykreslování trojrozměrných scén (jednalo se například o grafické akcelerátory Voodoo). V dnešní části seriálu o architekturách počítačů se však budeme zabývat pouze těmi grafickými akcelerátory, které podporovaly práci s dvourozměrnými obrazci.
Obrázek 4: Již některé osmibitové počítače, například Atari a Commodore C64, obsahovaly čipy, které byly určeny k manipulaci s obrazem a jeho vykreslováním bez nutnosti přerušení práce mikroprocesoru. Na tomto obrázku je ukázán způsob zapojení čipů ANTIC a GTIA, které jsou používány v osmibitových počítačích Atari pro řízení vykreslování. S pomocí těchto čipů bylo možné měnit grafické režimy, zobrazovat sprity s měnitelnou prioritou i pozicí a plynule posouvat obrazem. Právě díky těmto čipům bylo možné na počítačích Atari s osmibitovým mikroprocesorem taktovaným na 1,7 MHz implementovat i graficky poměrně náročné hry. Počítače Commodore C64 byly pro podobné účely vybaveny čipem VIC-II, který se taktéž nemalou měrou podílel na velké oblibě tohoto stroje jak mezi uživateli, tak i mezi programátory. Povšimněte si, že čipy ANTIC a GTIA neobsahují vlastní obrazovou paměť – všechny potřebné údaje si tyto čipy samy načítají z operační paměti počítače pomocí DMA, což je poměrně značný rozdíl oproti grafickým kartám používaným na PC.
4. Blokové přesuny dat
Při manipulaci s obrazem vykreslovaným v grafických režimech s relativně vysokým rozlišením (například 1024×768 pixelů) a patnáctibitovou, šestnáctibitovou (hicolor) či 24bitovou barevnou hloubkou (truecolor) je pro plynulé zobrazování zapotřebí, aby grafický subsystém počítače podporoval operaci blokového přesunu rastrových dat s případnou automatickou konverzí mezi různými barvovými systémy (Bit-Block Transfer – BitBlt – Blit). Blokové přesuny dat se většinou provádí jak mezi operační pamětí a pamětí grafickou, tak mezi různými bloky grafické paměti (posun části obrazce, scrolling, obnovení části obrazu z takzvaného zadního bufferu). Důležitým požadavkem při blokových přesunech je především zajištění co nejmenšího zatížení mikroprocesoru, protože objem přenášených dat může nabývat monstrózních rozměrů. Snadným výpočtem lze například zjistit, že pro zobrazení videa s rozlišením „pouhých“ 740×574 pixelů (což zhruba odpovídá televiznímu snímku) je při snímkové frekvenci 25 fps datový tok roven cca 30Mbs-1, což mj. znamená, že pro přenos nelze použít pomalejší typy sběrnic, například ISA.
V ideálním případě řídí blokový přesun a barevné konverze grafický subsystém (čipy na grafické kartě) samostatně, mikroprocesor pouze celou operaci spustí. Při vykreslování videa je však mnohdy nutné provádět i různé pokročilejší filtrace obrazu, zejména změnu poměru jeho stran (například z formátu 4:3 na 16:9, viz šestá kapitola), odstranění prokladu řádků, vykreslení dalších obrazců do videa (titulky, ovládací panel multimediálního přehrávače) atd. I tyto operace by měl grafický subsystém podporovat bez přílišného zatížení mikroprocesoru, ideálně bez jeho zapojení do tohoto časově náročného procesu zpracování obrazu. V tomto seriálu jsme se mj. zabývali i vlastnostmi grafických karet TIGA, které obsahovaly signálový procesor TMS 34010, jenž podporoval poměrně složité operace blokových přesunů zahajované instrukcemi PIXT (pixel transfer) a PIXBLT (pixel block transfer). Při přesunech bloků pixelů se mohlo provádět maskování průhledných pixelů (v podstatě se jednalo o podporu spritů), kontrolovat, zda kopírované pixely náleží do specifikovaného obdélníkového okna, maskovat obrázek bitovou rovinou atd. Druhá verze grafického procesoru TMS 34020–2 dokázala při použití operací přesunu dat přenést až 18 milionů pixelů za sekundu a při použití operace výplně (vykreslení obdélníku konstantní barvou) rychlost dokonce přesahovala hodnotu 160 milionů pixelů za sekundu. Právě podpora těchto grafických operací učinila z grafického akcelerátoru TIGA velmi zajímavý výrobek, který měl velký vliv na další vývoj grafických karet, například i dále zmíněného čipu S3 Trio64.
Obrázek 5: Zjednodušené schéma grafického akcelerátoru TIGA vybaveného signálovým procesorem TMS 34010. Na tomto schématu můžeme vidět, že se jedná o adaptér obsahující samostatnou grafickou paměť (Video RAM) oddělenou od operační paměti počítače, podobně jako je tomu u běžných grafických karet (CGA, EGA, VGA…). Přenosy dat mezi operační pamětí a grafickou pamětí, popř. mezi různými částmi grafické paměti, jsou řízeny grafickým procesorem vybaveným modulem pro blokové přesuny dat (viz předchozí odstavec).
5. Podpora pro zobrazení kurzoru myši
Další graficky orientovanou operací, kterou bylo zapotřebí urychlit a zjednodušit, bylo vykreslování kurzoru myši. Na první pohled se může zdát, že se jedná o operaci zcela podružnou, neboť kurzor myši obsazuje na ploše obrazovky poměrně malý prostor (typicky má velikost rastru 20×20 pixelů). Ve skutečnosti bylo při programovém (softwarovém) vykreslování kurzoru myši zapotřebí při každé grafické operaci testovat, zda vykreslovaný obrazec nebo dialog nezasahuje do oblasti se zobrazeným kurzorem myši. Pokud kolize nastala, musel se obrazec nejprve neviditelně vykreslit do operační paměti počítače, provést kombinaci s kurzorem myši (pomocí bitově orientovaných operací) a následně výsledný modifikovaný obrázek okna či dialogu vykreslit. Pouze tak bylo možné zamezit poblikávání kurzoru, což by bylo z uživatelského hlediska nepřípustné. Také pohyb kurzoru musel být řešen přečtením obrazových dat z obrazové (video) paměti, jejich kombinací s rastrem kurzoru na nové pozici a opětovným zápisem do obrazové paměti. Navíc se při pohybu kurzoru myši muselo neustále provádět překreslování grafických objektů (oken, dialogů, menu atd.) v místech, které kurzor opustil. Pokud by se překreslení neprovedlo, kurzor myši by při svém pohybu po obrazovce za sebou zanechával stopu, což je „efekt“, který již většina uživatelů grafických uživatelských rozhraní zažila, například tehdy, pokud nějaká aplikace přestala reagovat na zprávy posílané systémem. Objem dat, který se při celodenní práci s grafickým uživatelským rozhraním tímto způsobem zbytečně přenesl mezi obrazovou pamětí a pamětí operační pak dosahoval řádu gigabajtů.
Obrázek 6: Osm čtyřbarevných spritů zobrazených v režimu multi-color na osmibitovém domácím počítači Commodore C64. Sprity bylo možné použít i pro zobrazení kurzoru myši, který se mohl pohybovat na obrazovce nezávisle na obsahu „podkladového“ obrázku.
Zejména operace čtení pixelů z obrazové paměti byla dosti pomalá, proto se již počátkem devadesátých let minulého století stále častěji objevovaly grafické karty, které implementovaly zobrazení a pohyb kurzoru myši s hardwarovou podporou. Princip funkce těchto karet při práci s kurzorem byl velmi podobný jako u výše zmíněných čipů GTIA (Atari) či VIC-II (Commodore C64), tj. rastrový obraz kurzoru se kombinoval s rastrovým obrazem pozadí až během vykreslování, vlastní pozadí tedy nebylo kurzorem měněno (nedocházelo k modifikaci obsahu obrazové paměti). Urychlení zobrazování se oproti běžným grafickým kartám bez podpory vykreslování kurzoru myši pohybovalo v řádu procent až desítek procent, zejména při práci s plnobarevným kurzorem. Mezi grafické karty, které podporovaly nezávislé vykreslování kurzoru myši patří především karty Cirrus Logic s grafickými čipy řady CL-GD 542×, CL-GD 543× a CL-GD 64×x. Z dalších firem vyrábějících grafické karty jmenujme například velmi úspěšnou firmu S3 (grafické čipy řady Vision 864, 964, 866 a 868, dále Trio32, Trio64 – poslední jmenované čipy se staly nepsaným standardem v mnoha kancelářských počítačích) a Matrox (zejména velmi kvalitní karty známé vývojové řady Matrox Millenium).
6. Změna rozměrů a zrcadlení rastrových obrázků či videa
V neposlední řadě je po grafických kartách také vyžadována schopnost zvětšovat, zmenšovat a zrcadlit zobrazované video, často dokonce neproporcionálně (například kvůli konverzi mezi televizním formátem 4:3 a širokoúhlým filmovým formátem 16:9). Při těchto operacích je nutné používat různé metody interpolace a filtrace obrazu, aby se zamezilo vzniku nežádoucích vizuálních artefaktů vlivem podvzorkování signálu (časový a především prostorový alias). Tyto operace je většinou nutné provádět přímo na grafické kartě, protože při výpočtu mikroprocesorem by byly velmi pomalé, opět z důvodu dvojího přenosu dat přes sběrnice a vyrovnávací paměti. Zejména se to týká operace horizontálního či vertikálního zrcadlení, kdy dochází při čtení či zápisu k neustálému vyprazdňování vyrovnávací paměti (buď čtení či zápis se provádí v opačném pořadí, než v jakém jsou přirozeně uspořádány paměťové buňky). Mezi prvními široce používanými grafickými kartami, které obsahovaly podporu pro rychlé vykreslování rastrových obrázků (videa), patří karty Cirrus Logic řady CL-GD 64×x, S3 Trio32 a především karty od kanadské firmy ATI, například ATI Rage 128, která současně patří do třídy 3D grafických akcelerátorů popsaných v následujících částech tohoto seriálu.
Obrázek 7: Kombinace tří datových toků na grafické kartě s čipem S3 Trio64V+. Bližší informace o tomto čipu jsou uvedeny v následující kapitole.
7. Čip S3 Trio64V+
Jedním z nejznámějších čipů optimalizovaných pro grafické akcelerátory určené pro urychlení zpracování rastrové 2D graficky, byl čip nazvaný S3 Trio64V+. Název „trio“ byl v názvu tohoto čipu použit z jednoduchého důvodu – jedná se o trojici vzájemně spolupracujících modulů: grafického jádra (procesoru), generátoru hodinových pulsů (clock generator) a RAMDAC, tj. D/A převodníku kombinovaného s pamětí s organizací 256×18 bitů, která sloužila pro transformaci barev. Grafický čip Trio64V+ kromě zpětné kompatibility s grafickou kartou VGA podporoval i nové grafické režimy (typické rozlišení až 1280×1024 pixelů) a video paměť o kapacitě maximálně 4 MB (což ovšem v případě zmíněného režimu 1280×1024 pixelů znamená, že double buffering byl podporován pouze při práci s 256 barvami). Kromě nových grafických režimů podporoval čip S3 Trio64V+ i poměrně velké množství grafických operací, které se vykonávaly bez přerušení práce mikroprocesoru. Mezi podporované operace patří především:
- Vykreslení úsečky konstantní barvou
- Vykreslení otexturované úsečky
- Vykreslení krátkého vektoru o délce maximálně 15 pixelů a sklonem s násobkem 45° (jedná se o optimalizovanou operaci, která se provádí rychleji než vykreslení obecné úsečky)
- Vyplnění obdélníka (osově orientovaného)
- Přenos obdélníkového výřezu obrazu (BitBLT)
- Podpora pro hardwarový kurzor myši o rozlišení maximálně 64×64 pixelů
- Změna měřítka obrazu
- Míchání dat (video signálu) ze dvou různých zdrojů – používá se například při zobrazení videa v okně
Obrázek 8: Grafická karta s čipem S3 Trio32. Jedná se o zjednodušenou verzi čipu S3 Trio64. Zjednodušení spočívá ve zúžení datové sběrnice používané při přesunu obrazových dat.
Ke grafickému procesoru S3 Trio64V+ bylo možné v případě potřeby nainstalovat volitelný koprocesor, kterým byl v první generaci těchto grafických karet čip Scenic/MX2, jenž dokázal provádět rychlou dekomprimaci dat MPEG. Ve druhé generaci karet S3 Trio je již možné použít koprocesor určený pro urychlení výpočtů používaných při transformacích objektů v ploše nebo v trojrozměrném prostoru (Geometry Engine), to je již ovšem téma, kterým se budeme zabývat až v příští části seriálu.
Obrázek 9: Grafická karta s čipem S3 Trio64V+ určená pro sběrnici PCI.
8. Odkazy na Internetu
- Professional Graphics Controller
http://en.wikipedia.org/…s_Controller - The IBM PGA Graphics Adapter
http://incolor.inebraska.com/…_adapter.htm - Professional Graphics Controller: Notes
http://www.seasip.info/…ePC/pgc.html - A professional graphics controller (PDF ke stažení po zaplacení 10 doalrů)
http://domino.research.ibm.com/…6bfa00685b97?… - Texas Instruments Graphics Architecture
http://en.wikipedia.org/…Architecture - TMS34010
http://en.wikipedia.org/wiki/TMS34010 - Trident SuperVGA
http://world.std.com/…/trident.txt - TMS34010 Graphics System Processor
http://focus.ti.com/…ms34010.html - TMS34020A Graphics Processor
http://focus.ti.com/…s34020a.html - 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 - Wikipedia: MOS Technology VIC-II
http://en.wikipedia.org/…ology_VIC-II - S3 Trio
http://en.wikipedia.org/wiki/S3_Trio