Hlavní navigace

Grafický akcelerátor Intel 740

14. 1. 2010
Doba čtení: 11 minut

Sdílet

V dnešní části seriálu o architekturách počítačů nejprve dokončíme popis funkcí grafického akcelerátoru Voodoo 1 a poté se začneme zabývat grafickým akcelerátorem, jehož uvedení na trh představovalo další milník v rozmachu akcelerované 3D grafiky na PC. Jedná se o grafický akcelerátor Intel 740.

Obsah

1. Dithering obrazu implementovaný čipem FBI

2. Algoritmy prováděné texturovací jednotkou: mapování textur a modulace textur

3. Dekomprimace textur

4. Přepočty mezi barvovým modelem RGB a Yab

5. Grafický akcelerátor Intel 740

6. Využití možností AGP grafickým akcelerátorem Intel 740

7. 2D operace

8. Podpora pro práci s kurzory myši

9. Odkazy na Internetu

1. Dithering obrazu implementovaný čipem FBI

V předchozí části tohoto seriálu jsme si popsali téměř všechny důležité funkce (přesněji řečeno grafické algoritmy) prováděné na grafickém akcelerátoru Voodoo 1 čipem nazvaným FBI. Jednalo se o implementaci všech funkcí framebufferu, tj. podporu pro přední i zadní barvové buffery (části video paměti určené pro ukládání rastrových obrazů), přepínání předních a zadních bufferů (flipping) i podporu pro paměť hloubky neboli Z-buffer. Dalším grafickým algoritmem, který je implementován v čipu FBI, je takzvaný dithering. Ten je na grafickém akcelerátoru Voodoo 1 použit z toho důvodu, že všechny výpočty barev pixelů (přesněji řečeno fragmentů) sice probíhají v třicetidvou­bitovém barvovém prostoru RGBA, v němž je každá barvová složka (+ průhlednost) reprezentována osmi bity, ovšem ve framebufferu (obrazové paměti) je barva každého pixelu reprezentován pouze jako šestnáctibitová hodnota, tj. počet bitů rezervovaných pro jednotlivé barvové složky se zmenšuje na pět (červená, modrá), popř. na šest (zelená).

pc9501

Obrázek 1: Známý testovací snímek Leny zobrazený v originálních barvách (truecolor).

Grafický akcelerátor Voodoo 1 z tohoto důvodu podporuje dithering obrazu prováděný na ploše 2×2 či 4×4 pixely, který probíhá již při vykreslování prostorové scény v průběhu rasterizace polygonů a zápisu hodnot fragmentů do framebufferu. Jedná se o mírně upravený algoritmus maticového rozptylu. Při zobrazování obsahu předního bufferu na monitoru dokáže akcelerátor provádět vyhlazení obrazu, čímž se alespoň částečně eliminují některé vizuální artefakty vzniklé aplikací ditheringu. Jak dithering prováděný při rasterizaci, tak i vyhlazení obrazu při jeho zobrazování je možné vypnout a dosáhnout tak urychlení vykreslování za cenu snížení vizuální kvality výsledného snímku. Poznámka: dithering implementovaný na grafickém akcelerátoru Voodoo 1 je v několika ohledech odlišný od komprimace textur metodou S3TC nebo FXT1, i když i v těchto případech se jedná o postupy určené pro zmenšení objemu obsazené obrazové paměti. Jedná se o metody, které si popíšeme v některém z dalších pokračování tohoto seriálu.

pc9502

Obrázek 2: Testovací snímek, u nějž se pomocí ditheringu (maticového rozptylu) snížil celkový počet barev na 256.

2. Algoritmy prováděné texturovací jednotkou: mapování textur a modulace textur

V této kapitole si popíšeme některé algoritmy implementované druhým čipem, ze kterého se skládá grafický akcelerátor Voodoo 1. Jedná se o čip nazvaný TMU. Jedná se o texturovací jednotku, který pracuje do značné míry nezávisle na minule popsaném čipu FBI. Na čipu TMU jsou implementovány především následující grafické algoritmy či jejich části:

Mapování textur (texture mapping) respektující perspektivu. Při vykreslování trojúhelníků lze jejich povrch vybarvit na základě barvových vzorků (texelů) umístěných v textuře – rastrovém obrazci uloženém v texturovací paměti. Při mapování textur se pro každý vykreslovaný pixel zjišťuje odpovídající souřadnice v prostoru textury, z textury se následně načte jeden či více texelů (při použití antialiasingu vždy několik sousedních texelů) a jejich barva je přiřazena vykreslovanému pixelu. Programátor musí pro každý vrchol trojúhelníku či jiného konvexního polygonu dodat odpovídající souřadnice v textuře (takzvané uv souřadnice). Při rasterizaci celého polygonu se však souřadnice v prostoru textur nedají vypočítat jako prostý lineární přechod (ten je použit v minule zmíněném Gouraudovu stínování), ale musí se brát v potaz i zkreslení textury způsobené perspektivní projekcí. I tuto operaci, která je výpočetně složitější než výpočet lineárního přechodu (interpolace), texturovací jednotka TMU automaticky provádí.

pc9503

Obrázek 3: Dva trojúhelníky se společnou hranou, které jsou pokryty texturou. Pouze při respektování perspektivy je textura na oba trojúhelníky nanesena tím způsobem, že je výsledek zobrazen korektně.

Mapování textur společně s jejich modulací. Jedná se v podstatě o kombinaci obou již popsaných metod pro výpočet barev pixelů rasterizovaných trojúhelníků či jiných konvexních polygonů. Pro každý vykreslovaný pixel se s využitím Gouraudova stínování vypočte jeho barva získaná většinou na základě Phongova osvětlovacího modelu a navíc se s pomocí perspektivně korektního mapování textur přečte i barva uložená v textuře. Obě barvy se následně vhodným způsobem zkombinují (modulují), většinou vzájemným vynásobením, součtem atd. Tímto způsobem lze vykreslit otexturovaný a současně i správně nasvětlený povrch tělesa.

pc9405

Obrázek 4: Utah teapot pokrytý texturou, která je modulovaná barvovým přechodem vypočteným pomocí Gouraudova stínování na základě jednotlivých vrcholů polygonů (barvy vrcholů byly vypočteny mimo grafický akcelerátor pomocí Phongova osvětlovacího modelu).

3. Dekomprimace textur

V předchozí části tohoto seriálu jsme si mj. také řekli, že grafický akcelerátor Voodoo 1 byl (při použití typické konfigurace grafické karty) vybaven dvěma megabajty texturovací paměti vytvořenými z běžných (a tudíž i levných) paměťových modulů EDO DRAM. 2MB jsou však pro uložení většího množství textur poměrně malá kapacita, takže se firma 3dfx při návrhu čipů FBI a TMU rozhodla implementovat poměrně jednoduchý algoritmus dekomprimace textur, který bylo možné provádět v reálném čase (komprimaci může provádět CPU při zavádění textur do texturovací paměti). Textury mohou být uloženy buď ve formátu 32 bitů na texel v barvovém prostoru RGBA (tedy stejně jako například plnobarevné bitmapy s alfa kanálem) nebo ve speciálním formátu založeném na barvovém prostoru YIQ, obsahujícím trojici složek Y, a, b, v němž Y značí luminanci (intenzitu) a složky a a b nesou rozdílové hodnoty mezi luminancí a jednotlivými základními barvami modelu RGB (stejným způsobem se počítají i průběhy barvonosných signálů v televizní normě NTSC používající taktéž barvový model YIQ).

pc9402

Obrázek 5: Grafický akcelerátor Voodoo 1 s čipy FBI a TMU (viz potisk) a paměťmi EDO DRAM, pomocí nichž je sestavený framebuffer i paměť pro textury.

4. Přepočty mezi barvovým modelem RGB a Yab

Přepočty mezi složkami barvového modelu RGB a Yab jsou velmi jednoduché, nevyskytují se zde například žádné nelineární funkce či podmínky, které by bylo zapotřebí zdlouhavě vyhodnocovat:

Y = 0.299×red + 0.587×green + 0.114×blue
a = 0.596×red - 0.275×green - 0.321×blue
b = 0.212×red - 0.523×green + 0.311×blue

red   = Y + 0.95×a + 0.62×b
green = Y - 0.28×a - 0.64×b
blue  = Y - 1.11×a + 1.73×b

Při použití barvového prostoru Yab může být pro jeden texel vyhrazen pouze jediný bajt, protože se ihned po převodu z RGB do YIQ provádí kvantizace, tj. snížení počtu bitů pro jednotlivé barvové složky: čtyři bity jsou určeny pro uložení složky Y (luminance), dva bity pro složku a a taktéž dva bity pro složku b (chrominance). Z důvodu provádění kvantizace sice dochází ke ztrátě barvové informace, ovšem díky tomu, že lidský mozek je citlivější na změnu intenzity světla (uloženou v barvové složce Y) a již méně citlivý na změnu barevného odstínu (složky a a b), nemá tato kvantizace tak velký vliv jako v případě, kdy by byla kvantizace prováděna přímo v barvovém prostoru RGB (navíc textury většinou neobsahují ostré přechody mezi dvojicí barev se stejnou či podobnou luminancí). Alternativně lze pro uložení každého texelu využít šestnácti bitů. V tomto případě je na osmi bitech uložena průhlednost, čtyři bity jsou vyhrazeny pro barvovou složku Y a pro rozdílové barvové složky a a b zbývá 2×2 bitů.

pc9506

Obrázek 6: Utah teapot vykreslený do framebufferu podporujícího barevnou hloubku 24bitů na pixel (nejedná se o výsledek práce Voodoo 1, ale grafického akcelerátoru TNT).

Texturovací jednotka TMU dokáže dekompresi (tj. převod z barvového prostoru Yab do RGB) provádět automaticky při načítání texelů z texturovací paměti. Jednotlivé podporované formáty uložení textur (přesněji řečeno uložení texelů v texturách) je v rozhraní GLIDE reprezentováno následujícími konstantami:

Konstanta v GLIDE Struktura (počet bitů na složky)
RGB332 (3–3–2)
RGB565 (5–6–5)
ARGB_1555 (1–5–5–5)
ARGB_4444 (4–4–4–4)
ARGB_8332 (8–3–3–2)
YIQ422 (4–2–2)
AYIQ_8422 (8–4–2–2)
ALPHA8 8-bit Alpha
INTENSITY8 8-bit Intensity
ALPHA_INTENSITY44 8-bit Alpha and Intensity (4–4)
ALPHA_INTENSITY88 (8–8)
pc9507

Obrázek 7: Stejný model, jaký byl použit pro vytvoření obrázku číslo 6, ovšem nyní vykresleného do framebufferu se sníženou bitovou hloubkou a použitím ditheringu. Při zobrazení snímku nebyla využita filtrace, aby byl vliv ditheringu více patrný.

5. Grafický akcelerátor Intel 740

Dalším grafickým akcelerátorem, se kterým se v seriálu o architekturách počítačů seznámíme, je grafický akcelerátor Intel 740. Jedná se o akcelerátor, který byl firmou Intel představen v roce 1998. Jedná se o jeden z prvních grafických akcelerátorů, který plně využíval možnosti přenosového kanálu/portu AGP. Není se ostatně čemu divit, protože firma Intel port AGP navrhovala, takže již měla s touto technologií velké zkušenosti; navíc Intel 740 měl mj. sloužit i jako technologické demo představující výhody AGP oproti PCI. Zatímco minule popsaný grafický akcelerátor Voodoo 1 určený pro universální sběrnici PCI musel mít všechny textury před jejich použitím uloženy v texturovací paměti, bylo možné u grafických akcelerátorů zapojených na AGP postupně načítat texely z textur uložených v paměti operační, přičemž se v tomto případě využívala jak vyšší přenosová rychlost sběrnice (ve verzi AGP 1× se jednalo o limit 266 MB/s oproti poloviční mezní rychlosti PCI), tak i dalších vlastností AGP, například blokového přenosu dat pomocí DMA či mapování mezi adresním prostorem procesoru a adresním prostorem grafického akcelerátoru pomocí GART.

pc9508

Obrázek 8: Grafická karta vybavená čipem Intel 740.

6. Využití možností AGP grafickým akcelerátorem Intel 740

Načítání texelů přímo z operační paměti namísto z paměťových modulů umístěných na grafickém akcelerátoru s sebou nese některé výhody, ale samozřejmě i nevýhody. Výhodou je to, že programátor nebyl omezen mnohdy nedostatečnou kapacitou paměťových modulů nainstalovaných na grafickém akcelerátoru (což se často stávalo zejména na Voodoo 1, neboť na tomto akcelerátoru nebylo možné „obětovat“ část kapacity framebufferu na úkor texturovací paměti a naopak) a taktéž docházelo k lepšímu využití prostředků počítače – operační paměť byla při běžné práci využívána operačním systémem i aplikacemi a pouze při použití 3D akcelerace se její část použila pro uložení textur. Nevýhodou tohoto řešení je především to, že přenosová kapacita AGP musela být využívána jak pro přenos texelů, tak i geometrie scény, tj. vrcholů jednotlivých polygonů, normálových vektorů těchto vrcholů, souřadnic v prostoru textur atd. To tedy znamená, že v případě komplikované scény mohla nastat situace, kdy nebyla propustnost AGP dostatečná pro přenos jak textur, tak i současně geometrických informací.

pc9509

Obrázek 9: Při použití MIP mappingu je textura uložena v rekurzivní podobě naznačené na tomto obrázku. Můžeme zde vidět rozdělení textury na trojici obrázků, z nichž každý obsahuje pouze jednu barvovou složku a ve zbylém čtverci je umístěna tatáž textura, ovšem zmenšená na polovinu (čtvrtinu, osminu atd.) svého původního horizontálního i vertikálního rozlišení. Texturovací jednotka při vykreslování vybírá na základě vzdálenosti objektu od pozorovatele dvojici texelů (z nejbližší vyšší a nižší úrovně MIP mapy), ze kterých následně pomocí lineární interpolace vypočte barvu fragmentu, což znamená, že při práci s jediným fragmentem je zapotřebí provést hned několik přístupů do texturovací paměti.

7. 2D operace

Grafický akcelerátor Intel 740 obsahuje dva paralelně pracující řetězce. První z těchto řetězců je určen pro provádění 2D operací, druhý pro zpracování a vykreslování 3D scény. To je poměrně významný rozdíl oproti grafickému akcelerátoru Voodoo 1, jenž byl určený pouze pro 3D akceleraci a 2D operace bylo nutné provádět na jiné grafické kartě nainstalované v počítači. Z 2D funkcí jsou dostupné zejména operace určené pro blokové přenosy rastrových obrazů. Jedná se o operace typu FixedBitBlt (přenos obrazu beze změny jeho velikosti) a StretchBitBlt (přenos obrazu spolu se změnou jeho rozlišení a případnou filtrací). Při přenosu rastrového obrazu je možné nad přenášenými daty vykonávat několik typů operací, například expanzi barev, bitové operace (prováděné nad dvojicí obrázků), maskování pixelů, porovnávání hodnot dvou pixelů atd. Vzhledem k tomu, že šířka přenášených dat je při provádění těchto operací rovna 64 bitům, je možné v jednom taktu zpracovat i větší množství pixelů.

8. Podpora pro práci s kurzory myši

Kromě blokových přenosů obrazů a operací nad přenášenými daty podporuje grafický akcelerátor Intel 740 i možnost práce s kurzory myši, které mohou mít různou velikost i počet barev (barevnou hloubku). Základem je zobrazení kurzoru o velikosti 32×32 pixelů, který je reprezentovaný dvojicí bitových rovin – maskovací a barevnou (při zobrazení se nejprve provádí bitová operace AND a následně XOR). Dále je možné pracovat s kurzory (můžeme je považovat za jednoduché sprity) o velikosti 64×64 pixelů, které jsou reprezentovány buď jedinou bitmapou s 2bpp (čtyři barvy), dvojicí bitmap (maskovací a barvovou) či tříbarevným kurzorem, přičemž čtvrtá barva je rezervována pro oblasti, které mají zůstat při zobrazení kurzoru průhledné. Posledním typem kurzorů (spritů) jsou kurzory o velikosti 128×128 pixelů, které mohou být buď dvoubarevné (1bpp) nebo monochromatické (daný pixel je vykreslen nebo je ponechán průhledný).

CS24_early

Možnostem tohoto grafického akcelerátoru při práci s prostorovými scénami se budeme věnovat v následující části seriálu.

9. Odkazy na Internetu

  1. S3 Graphics
    http://www.s3graphics.com/en/index.aspx
  2. TSENG ET6000 Performance Page
    http://dani75.tripod.com/TSENG.htm
  3. Tseng Labs Ships ET6000 Advanced Graphics Chip, Announces Additional Manufacturing Sources
     http://www.encyclopedia.com/…8088868.html
  4. CyberMax chooses Tseng Labs' ET6000 Graphics and Video Controller for Max and ProMax Series PCs
     http://findarticles.com/…ai_18754932/
  5. Intel i860
    http://en.wikipedia.org/wiki/Intel_860
  6. Intel i860 64-Bit Microprocessor
    http://www.microprocessor.sscc.ru/i860.html
  7. 25 Microchips That Shook the World
    http://www.synbio.org.uk/…ws/1351.html
  8. Sprite (computer graphics)
    http://en.wikipedia.org/wiki/Sprite_(computer_grap­hics)
  9. Sprite (počítačová grafika)
    http://cs.wikipedia.org/wiki/Sprite_(počítačová_gra­fika)
  10. Wikipedia: Video Display Controller
    http://en.wikipedia.org/…y_Controller
  11. 3dfx Voodoo1 PCI
    http://www.v3info.de/…tml/v1.shtml
  12. Glide 2.2 Programming Guide
    http://www.gamers.org/…glidepgm.htm
  13. Glide API
    http://en.wikipedia.org/wiki/Glide_API
  14. S3 Savage
    http://en.wikipedia.org/wiki/S3_Savage
  15. Savage (S3)
    http://www.economy-point.org/…vage-s3.html
  16. Intel i740
    http://en.wikipedia.org/wiki/Intel740
  17. Intel i740 Datasheet
    ftp://download.intel.com/…29061902.pdf
  18. Intel740™ Graphics Accelerator P854 Hardware
     ftp://download.intel.com/…29062202.pdf
  19. 3dfx Interactive
    http://en.wikipedia.org/…doo_Graphics
  20. Intel 860@cpu-collection
    http://www.cpu-collection.de/?…

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.