A '90-es évek elején kifejlesztett PCI busz akkor még rendkívül nagynak vélt sávszélessége a real-time 3D alkalmazások térhódításával kezdett szűkössé válni. Az elméletben 132 MB/s-os csúcssebességre képes 32 bites, 33 MHz-es PCI valójában még burst módban sem tud 110 MB/s-os gyakorlati sebesség fölé kapaszkodni. Ez egy átlagos 128 bites, 100 MHz-es lokális busszal szerelt videokártya belső átviteli sebességének (max. 1.6 GB/s) csak töredéke. Könnyen belátható tehát, hogy a képadatok (főleg textúrák) rendszermemóriából a videokártyához való eljuttatása a PCI buszon csak alacsony felbontásban oldható meg.

Hogyan tovább?

A kép bonyolultságának és a felbontásnak növelésével az adatokat a videokártya memóriájában kell tárolni, ha elfogadható sebességet akarunk elérni. Ez bizonyos határokon belül működik csak, hiszen pl. 1280x1024-es felbontásban, 32 bites színmélységű (32 bit Z-buffer, Double Frame Buffer) képfolyam folyamatos renderelése 15 MB videomemóriát igényel! Így egy manapság átlagosnak tekinthető 16 MB-os videokártya esetén mindössze 1 MB videomemória marad a textúráknak. Ezen aztán lehet segíteni az S3 Savage3D-ben debütált textúratömörítéssel, mely nem csak a textúramemória, hanem a sávszélesség szűkösségére is gyógyír lehet. Ez a technológia azonban ront a textúrák minőségén, és sajnos egyelőre gyakorlatilag nulla a támogatottsága...

További gyorsító megoldás lehet az ún. 'bus mastering' megoldás használata. Bus mastering tulajdonsággal rendelkező perifériák képesek a PCI buszon keresztül egymással kommunikálni: működést összehangolni, információt cserélni, akár nagy mennyiségű adatot is mozgatni. S ami a lényeg: mindezt a CPU teljes kikerülésével. Ez a 3D gyorsító kártyáknál remekül alkalmazható a textúrák vagy egyéb képadatok mozgatására a rendszermemóriából a videokártya lokális memóriájába. Közben természetesen a CPU már az elkövetkező képek adataival foglalkozhat, hiszen a bus mastering csak a PCI buszt terheli, a CPU-t nem.

A feldolgozás tovább gyorsítható, ha a geometriát és a kép előállításához szükséges adatokat a processzor előre kiszámolja, és valamilyen feladatleíró nyelvvel szekvenciális utasítások sorozataként tárolja a memória meghatározott részén. Ez nagy segítség lehet bus mastering-et támogató rendszerben, hiszen így a kép-információkat teljes egészében a CPU kihagyásával lehet a videokártyához szállítani.

AGP

Az imént vázolt megoldások azonban egytől-egyig csak átmenetileg jelentenek gyógyírt a sávszélesség problémára. Végső megoldásként 1996-ban jelentették be az AGP-t (Accelerated Graphics Port). Az új szabvány a már létező 66 MHz-es PCI 2.1 specifikációra épül, azt egészíti ki néhány optimalizációt célzó újítással. Az AGP szoftverszinten megegyezik a PCI-jal, tehát lefelé kompatibilis vele, azonban minden más tekintetben eltér tőle.

A PCI eszközök egy lokális buszon helyezkednek el, s ez a busz az alaplapi chipkészletre csatlakozik. Az AGP teljesen független a PCI busztól, egyetlen portjával közvetlenül a chipkészlettel kommunikál (point-to-point kapcsolat). Sem logikailag, sem fizikailag nem egyeztethető össze a PCI specifikációval, ám mégis kompatibilis azzal.

Az első AGP-s videokártyák (pl. Matrox Millennium II AGP) minden tekintetben megfeleltek az AGP leírásnak, azonban csak PCI tranzakciókat bonyolítottak, semmilyen AGP specifikus műveletre nem voltak képesek. Jogos lehet a kérdés: minek akkor az AGP? Nos, elsősorban marketing fogás, hiszen egy hiper-szuper újdonságokat felvonultató termék jóval könnyebben eladható, mint egy bevált technológiával felvértezett - amiből kismillió van már a piacon. Nem szabad azonban azt hinni, hogy semmi értelme az ilyen 'AGP-s' videokártyáknak. Először is, az AGP független a PCI busztól, így a videokártya AGP-n keresztüli adatforgalma felszabadítja a PCI buszt. Kérdés, hogy ez mennyire számít, hiszen lehet, hogy a busz eleve nem volt terhelve :) Másodsorban, az AGP kétszer akkora órajelen működik, és a tranzakciók lebonyolítása is hatékonyabb, mint a PCI buszon.

Sebesség

A PCI busz burst módban 4 db 32 bites adatot képes átvinni 5 órajelciklus alatt (1 ciklus szükséges a címzéshez). Így a PCI effektív sebessége 33 MHz-en 110 MB/s. Az AGP eleve duplaakkora órajelen működik, ráádásul az ún 'sideband addressing'-nek köszönhetően egy 32 bites adat átvitele pontosan 1 órajelciklus alatt megy végbe. Ugyanis az AGP speciális címbusszal rendelkezik, ezen keresztül már jóval az adatok mozgatása előtt megtörténik a címek átvitele. Így végül az AGP effektív sebessége 32 bit x 66 MHz = 264 MB/s.

Ha azonban utánaszámolunk, ezt az első ránézésre tekintélyes sávszélességet nem is olyan nehéz kihasználni. Vegyünk egy egyszerű példát: 3D lövöldözős játék, nagy teremben állunk, és forgunk körbe-körbe. Egy nagyon jó képminőségű játékhoz elengedhetetlen a legalább 512 x 512 pixeles textúrák és az 1280x1024-es, 32 bites színmélységű felbontás használata, természetesen min. 30 FPS (30 képkocka/s) képfrissítéssel. Ha a geometria adatoknak lefoglalunk 4 MB-ot másodpercenként, akkor 260 / 30 = 8.66 MB/s marad a textúráknak. Ez 512 x 512-es textúrákból mindössze 8 db-ra elegendő! (512 x 512 x 32 bit = 1 MB) Más kérdés, hogy általában nem szokott minden képkockában cserélődni az összes textúra - de mi vegyük csak a legrosszabb eshetőséget :)

Szükség van tehát egy nagyobb sebességre, amit jelenleg az AGP 2x szabvány képvisel. Egy órajelciklus alatt 2 adatot képes mozgatni az új AGP port, mely minden más tekintetben megegyezik az eredeti AGP-vel. Az effektív sebesség ezzel a duplájára, 528 MB/s-ra nőtt. A jelenleg kapható második generációs 3D gyorsítók AGP változatai egytől-egyig támogatják az AGP 2x szabványt.

A sávszélesség éhség növekedése elvezetett a manapság teret hódító AGP 4x szabvány bevezetéséhez. Ez az AGP 2x-szel megegyező megoldás, azonban az eddigi adat- és címbuszt megduplázták, így effektíve 133 MHz-es sebesség érhető el. Elgondolkodtató, hogy az AGP 4x-et támogató alaplapokon a PC100-as memória és a chipkészlet közötti sávszélesség kisebb, mint a videokártyáé (AGP 4x: 1 GB/s, PC100: 800 MB/s)...

Újdonságok

Az eddigiekben felvázolt technikák lehetővé teszik a sávszélesség növelését, azonban a gyakorlatban nem jelentenek igazi megoldást a videokártyák textúra éhségének kielégítésére. Lássuk tehát, mit is tud valójában az AGP!

A PCI bus mastering lehetősége remekül alkalmazható kis mennyiségű adatok mozgatásánál, azonban nagyméretű textúrák átvitelénél nincs értelme minden egyes textúránál újra felprogramozni az alaplapi chipkészletet. Nem erre találták ki a bus mastering-et, ez tény. Emellett, a videokártya számára sem túl könnyű állandóan a chipkészlethez fordulni, ha újabb textúrára van szüksége, és ráadásul tudnia is kell, hogy a fizikai memóriában éppen hol helyezkedik el a kívánt adat. Ráadásul teljesen fölöslegesen töltögeti át a saját memóriájába a textúrákat. Ez úgy, ahogy van, alkalmatlan a feladatra.

Az igazi megoldást már jóval előbb kidolgozták, bár nem PC-re, hanem nagyteljesítményű grafikai munkaállomásokra (pl. Silicon Graphics). Minden címzési nehézséget el lehet kerülni, ha a videokártya memóriáját kiterjesztjük a rendszermemória meghatározott részére. Ezt természetesen az alkalmazások számára el kell rejteni, mindent az AGP vezérlőre és a videokártyára kell bízni.

A rendszermemóriában lefoglalt címterületet hívja a szakma 'AGP aperture'-nek. Ez a címterület a rendszermemóriában a videokártya Linear Frame Buffer-ének (videomemória leképezése a virtuális memóriába) területe alatt helyezkedik el. A címterület nagyságát a BIOS setup-ban beállítható 'AGP Aperture Size' határozza meg, de a méretről meg lehet győződni Win98 alatt is, a Vezérlőpult / Rendszer / Eszközkezelő / Rendszereszközök-ben rákeresve az alaplapi AGP vezérlőre. Az AGP vezérlő által lefoglalt címtartomány nagysága pontosan az AGP aperture méretét adja.

Az AGP aperture-ben elhelyezkedő adatok kiterjesztett videomemóriába való elhelyezését a GART (Graphics Aperture Remapping Table) írja le. A Minden egyes AGP aperture hivatkozást a GART segítségével lehet átkonvertálni fizikai rendszermemória címmé. A GART az alaplapi chipkészletben helyezkedik el, és az operációs rendszer programozza fel (emiatt van szükség Windows alatt az AGP driverekre). A GART szerkezete a flexibilitás érdekében fizikailag nem meghatározott, szoftverszinten kell a megfelelő struktúrát felépíteni (AGP driver feladata).

Az AGP optimális működését DIME-nak (DIrect Memory Execution) nevezik, mely egyszerűen csak az AGP aperture és a GART használatát jelenti. Az alapvető különbség a DIME és a klasszikus DMA (Direct Memory Access) megoldás között mindössze annyi, hogy DIME használatával nincs szükség minden memória műveletnél az alaplapi vezérlő felprogramozására, hiszen azt automatikusan végzi az AGP aperture és a GART segítségével. DMA módban a kevésbé effektív bus mastering technikával történik az adatátvitel - akárcsak a klasszikus PCI buszon -, mindössze a sávszélesség duzzad fel min. 264 MB/s-ra...

Problémák

DIME a kulcsszó. Ezt szokták leegyszerűsítve AGP texturázásnak (AGP texturing) hívni. Sajnos még a legújabb, csillogó-villogó videokártyák közül sem képes mind DIME-re, ezeknél a felbontás ill. a színmélység csökkentésével lehet videomemóriát felszabadítani a textúrák számára. A sok kritikát kapott Voodoo3 esetén ez nem is nagy probléma, hiszen a kártya csak 16 bites megjelenítésre képes, így ha nem vesszük figyelembe az ominózus '22 bitet', akkor 1280x1024-ben (16 bit Z-buffer, Double Frame Buffer) a kép megjelenítéséhez még 8 MB videomemória sem szükséges, s így a textúráknak bőven marad még hely. Az ilyen kártyáknál a probléma csak akkor fog jelentkezni, ha elterjednek a nagy méretű textúrát használó játékok. Ha ugyanis a videomemória megtelik, a sebességet csak a felbontás csökkentésével lehet visszanyerni...

DIME-ot DOS alatt a megfelelő GART driver és természetesen a védett mód hiányából adódóan nem lehet használni.

Néhány alaplapi chipkészlet nem tud egyszerre AGP 2x és DIME módban működni, ezeknél az AGP 1x mód DIME-vel általában gyorsabb, mint az AGP 2x DIME nélkül...

3D szótár
 

  • Anti-aliasing: A kontrasztos színek határán megjelenő 'cakkos' élek eltüntetésére született. A két szín közötti különbséget színátmenet segítségével tünteti el, ennek eredménye azonban kissé elmosódott kép lesz. Az Anti-aliasing mértéke erősen befolyásolja a kép minőségét, túlzott alkalmazása homályos ('mosott') képhez vezethet (Voodoo)

  • Back Buffer: A Double és Triple Buffering technikánál használt tárterület.
  • Bilinear Filtering: Olyan Texture Filtering eljárás, melynek folyamán a texel színe a saját és a szomszédos 4 texel színéből átlagolódik.

  • Bitmap: 2D kép vagy valamilyen anyag mintázat. Textúrázáshoz használatos.
  • Culling: A renderelési folyamatból eltávolítja a nem látható objektumokat. A pipeline ezáltal felszabadul, a feldolgozás gyorsul.

  • Depth Cueing: A valóság minél jobb megközelítése érdekében a távolban lévő tárgyak színének élénkségét tompítja.

  • Double Buffering: A látható mozgás folyamatosságát biztosítja. A megjelenített képet reprezentáló Frame Buffer a renderelés alatt nem változik, a következő képkocka a Back Buffer-ben jön létre. A renderelés végeztével a videokártya egyszerűen átváltja a megjelenítésért felelős DAC-ot a Back Buffer területére, és az eddigi Frame Buffer lesz a Back Buffer

  • Fogging / Haze: Ködeffektus, a távolban lévő tárgyak láthatóságát csökkenti. Általában úgy oldják meg, hogy egészen egyszerűen minden pixel színéhez hozzáadnak egy ún. fog color értéket.

  • Frame Buffer: Képek tárolására alkalmas memóriaterület. Nagyságát a kép felbontása és színmélysége determinálja.

  • Linear Frame Buffer: A Frame Buffer olyan ábrázolása, ahol az egymást követő memóriacímek sorra az egymás mellett lévő pixelekre vonatkoznak, sorvégen a következő sor elején folytatódik a pixelfolyam. A teljes LFB terület megcímezhető egy 32 bites mutatóval.

  • MIP Mapping: Speciális texturázási eljárás, melynek lényege, hogy a tárgyakhoz többféle textúrát rendel. Különböző távolságból nézve a tárgyat, nincs mindig szükség a legnagyobb felbontású textúrára, ilyenkor több MIP szintet (MIP Level) definiálnak, az egyes szintekhez külön textúrát rendelnek (pl. 4 szint: 128 x 128, 64 x 64, 32 x 32, 16 x 16). Rendereléskor kiválasztódik a megfelelő textúra, vagy épp két szint közötti átmenetként - interpolációval - jön létre a megjelenített textúra (= Trilinear Filtering).

  • Pixel: A Picture Element kifejezésből. A megjelenített kép legkisebb egysége, csak szín-információval rendelkezhet.

  • Poligon: 3, 4 vagy több oldalú sokszög, belőlük épülnek fel a bonyolultabb objektumok (akár több tízezer poligonbol is állhatnak). A poligonokra leginkább a hardveres gyorsítás miatt van szükség.

  • Rendering: Magasszintű nyelven leírt objektum (pl. poligonok + textúrák + köd + Anti-aliasing + stb.) pixelekké, vagyis képpé alakítása.

  • Texel: Textúrákat építenek fel, alapvetően egy színnel rendelkező pixel.
  • Textúra: 2 dimenziós bittérkép (Bitmap), mely a tárgyak realisztikus megjelenítéséhez szükséges.

  • Texture Filtering: Textúrák határán lévő pixelek színét a két (vagy több) szomszédos texel színének átlagaként határozza meg. Meglehetősen számításigényes feladat.

  • Trilinear Filtering: Olyan MIP Mapping, melynek során a két szomszédos MIP szintre Bilinear Filtering eljárást alkalmazunk, hogy a végleges textúrát megkapjuk.

  • Z-buffer: A nem látható élek, objektumok eltüntetését végzi. Minden egyes pixel kirajzolása előtt megnézi, hogy a Z-bufferben tárolt Z koordináta értékhez képest előtte vagy mögötte helyezkedik el az új pixel. Ha mögötte, akkor figyelmen kívül hagyja, ha előtte, akkor kirajzolja, és az új Z értéket beírja a Z-bufferbe.

Buszrendszerek összehasonlítása
 

VESA PCI AGP 1x AGP 2x AGP 4x
Sávszélesség 32 bit 32 bit 32 bit 32 bit 32 bit
Buszsebesség 33 MHz 33 MHz 66 MHz 66 MHz 66 MHz
Max. átviteli sebesség 132 MB/s 132 MB/s 264 MB/s 528 MB/s 1 GB/s
Bus mastering
támogatás
Van Van Van Van Van
Adat / cím paritás Nincs Van Van Van Van
Kártya ID (automatikus konfiguráció) Van Van Van Van Van