Imagination uvolnila ovladače Series 1 jako open source [historie VideoLogic]
Společnost Imagination Technologies na GitHub zveřejnila obsah nazvaný „Original source code for the PowerVR Series 1 GPUs : Midas Arcade, PCX1 and PCX2“. Zdrojový kód ovladačů PowerVR Series 1. Ale co to vlastně je?
Imagination je pamětníkům známá především jako autor grafických čipů / karet Kyro. V éře smartphonů se pak stala známou jako autor návrhů výkonných a úsporných mobilních GPU pro ARM SoC, které si od ní dlouhá léta licencoval Apple, než přešel na vlastní architekturu. Krom těchto dvou milníků ale v historii Imagination existuje ještě třetí, nejstarší.
Projekt Trident
Okolnosti vzniku byly následující: Společnost, založená v roce 1985, se původně jmenovala VideoLogic. Někdy v roce 1992 se její architekt Martin Ashton, který se do té doby zabýval 2D grafikou, začal zabývat myšlenkou efektivní 3D akcelerace v reálném čase. Podporoval jej tehdejší šéf Tony McClaren, neboť v tom spatřoval prostor pro realizaci firemních plánů v arkádách, herních automatech, které byly tehdy velmi populární a na nichž vydělávali nejen provozovatelé heren, ale i dodavatelé hardwaru. Protože to bylo příliš práce na jednoho člověka, přijal tehdy VideoLogic Simona Fenneyho, který již zkušenosti s vektorovou a 3D grafikou měl. Oba pánové dali hlavy dohromady a přišli s myšlenkou nazvanou TBDR, Tile-Based Deferred Rendering. Ta měla minimalizovat nároky na hardware dostačující pro vytyčený cíl.
Project Trident, Imagination
Aby měli na čem demonstrovat svojí myšlenku, sestavili kartu slouženou z FPGA čipů Xilinx a Altera propojených s DSP. Práce na prototypu nebyla úplně jednoduchá, tehdejší trh neznal paměti dostatečně rychlé pro akceleraci 3D v reálném čase, takže prototyp TBDR karty musel být vybaven prototypy nové generace pamětí, které měly vlastní potíže - nicméně funkční model akcelerátoru nakonec vznikl. Šlo nejspíš o první neprofesionální akcelerátor podporující real-time shadow volumes - protože však tehdejší FPGA Xilinxu nedisponovaly dostatečným počtem hradel, nebyl už prostor pro podporu textur (což však bylo u 3D akcelerátorů do cca poloviny 90. let zcela běžné).
Series 1
Midas
Řešení postavené na FPGA a DSP bylo použitelné pouze jako demonstrační platforma, a tak od jeho dokončení a úspěšného ověření myšlenky společnost pracovala na integraci nápadu do vlastních čipů. Skutečně je na místě množné číslo, protože při tehdejších procesech bylo grafické jádro (zde přesněji 3D jádro) rozloženo na tři samostatné čipy. Ani na rozdělení grafického jádra na více čipů nebylo v polovině 90. let nic neobvyklého: Vzpomene-li na 3Dfx Voodoo Graphics, nesla jeden pixelový procesor a jeden texturový procesor (nepočítáme-li DAC). Midas byl ale složen ze tří čipů: ISP (Image Synthesis Processor) realizujícího základ tile-based architektury (integrovaná 12K parametrová cache) a podporujícího vykreslování stínů a mlhy, dále TSP (Texture and Shading Processor) zodpovědného za stínování a textury, a nakonec řadiče, který zajišťoval komunikaci mezi nimi a PCI sběrnicí (ten byl v případě 3Dfx Voodoo integrovaný v pixelovém procesoru). ISP podporoval volitelnou (0-2MB) externí parametrovou cache, která obvykle nebývala osazena a TSP mohl být vybaven 4-16 MB texturové paměti a 1-4MB frame-bufferem, do kterého byl obraz vykreslován.
Midas 1, Imagination
Karta Midas 1 fungovala v tandemu se standardním grafickým adaptérem podobným způsobem jako starší televizní karty z cca druhé třetiny 90. let: Grafický adaptér vykresloval své a pro obsah dodávaný akcelerátorem nechával prázdnou plochu vyplněnou předem definovanou barvou. Takový obraz dodával akcelerátoru a ten podle barvy poznal, kterou část obrazu má nahradit vlastním obsahem.
Pokud jde o Midas 1, pohybujeme se v polovině 90. let. Simon Fenney na tuto éru zavzpomínal příběhem ze spolupráce se společností Namco, autora hry Rave Racer, která na přelomu roku 1995 / 1996 připravovala port této hry podporující akceleraci na Midas 1 (API PowerVR SGL). Fenney čekal dlouho do noci, až dostane výsledek - demo. Když jej tehdy po modemu stáhl, bylo již hodně po půlnoci, všude naprosté ticho a klid. Demo okamžitě spustil. Netušil však, že autoři dema měli zvukovou stopu vyřešenou přehráváním z CD. Fenney měl právě v mechanice CD od OMD a závodní demo začalo po spuštění s maximální a neregulovatelnou hlasitostí přehrávat píseň OMD - Stay, kterou měl Fenney od té doby spojenou se závodní hrou.
Midas 2
Následoval Midas 2, který mnoho zásadního neměnil. VideoLogic si v té době začal uvědomovat, že arkády jsou již na ústupu a trendem bude 3D akcelerace na osobních počítačích. Vedení firmy se podařilo navázat spolupráci se společností Compaq (výrobce sestav), jehož high-endové systémy měly být vybaveny akcelerátorem VideoLogic. Compaq chtěl ale dodávky podstatně dříve, než měl VideoLogic připravenou řadu PCX určenou pro PC. Výrobce počítačů ale na svém požadavku trval, a tak vznikl Midas 3: zmenšená verze předchozích Midasů, která změnila komunikaci s primárním grafickým adaptérem z plochého interního kabelu na PCI sběrnici. Midas 3 posílal vykreslený obraz grafickému adaptéru a ten jej převáděl do analogové podoby a předával monitoru.
Midas 3, Imagination
Nasazení arkádového čipsetu do PC nebyl nejšťastnější nápad, neboť zde byl podstatný rozdíl: Na rozdíl od arkád nebyly hry pro PC psány na míru konkrétního hardwaru a byla zapotřebí širší kompatibilita, kterou však u labutí písně arkádového čipsetu nebylo možné očekávat. Štěstím pro VideoLogic (i Compaq) bylo, že se PC Midasů prodalo jen pár stovek.
PCX1
Myšlenka akcelerátorů PCX1 byla mnohem dotaženější a využívala (téměř) naplno všechny výhody TBDR architektury. Funkce tří čipů byla sloučena do jediného a dvě až tři sady paměťových čipů zredukovány na jednu. Vznikla tak malá kartička s jedním grafickým a dvěma paměťovými čipy (SDRAM nebo SGRAM) na 32bit sběrnici (informace o 64bit sběrnici na anglické Wikipedii je nepravdivá).
PCX1, Imagination
Zde se můžeme stručně zastavit nad tím, jak vlastně TBDR fungovalo. 3D scéna má určitou hloubku. Údaje, které se jí týkají, se ukládají do grafické paměti do části zvané Z-buffer (paměť hloubky). Grafické jádro s vazbou na tato data vyhodnocuje, který objekt je ve scéně blíže a dále. Během vykreslování jsou postupně překresleny vzdálenější objekty těmi, které jsou blíž a z pohledu pozorovatele (uživatele) je překrývají. Při klasickém renderingu tedy jednak dochází k výpočtům, stínování, texturování a dalším operacím pro povrchy a objekty, které nakonec „nejsou vidět“, čímž je zbytečně ztrácen výkon grafického jádra. Dále je potřeba údaje ze Z-bufferu stále přenášet mezi pamětí a grafickým jádrem, což násobí nároky na paměťovou sběrnici. TBDR obraz rozložil na čtverečky 32×32 pixelů velké (respektive malé) a Z-buffer v grafické paměti nahradil 12k parametrovou cache v čipu (která dostačovala dané ploše). Čip nejdříve pro tuto plošku (dlaždici) vyhodnotil, co bude ve výsledné scéně viditelné a až to vykreslil. Eliminoval se Z-Buffer a komunikace s ním, eliminovalo se překreslování ve frame-bufferu, eliminovalo se vykreslování „neviditelných“ ploch. Díky tomu byla paměť na 3D akcelerátoru PCX1 využívána (téměř jen) pro textury, vykreslené dlaždice se po PCI sběrnici posílaly do frame-bufferu primárního grafického adaptéru. Ušetřilo se na kapacitě i výkonu onboard paměti.
PCX2
V roce 1997 došlo na druhou generaci akcelerátoru PCX, který nebyl revolucí, ale spíše evolucí. Doplnil podporu pro filtraci textur, která se tehdy stávala standardem (textury tak už nebyly „kostičkaté“ jako v Doomu, Wolfensteinu a dalších - tehdy - softwarových 3D hrách). Výrobní proces byl povýšen z 0,5 µm na 0,35 µm a taktovací frekvence zvýšena z 60 na 66 MHz. U pamětí to nebylo s takty jinak, neboť PCX1 i 2 běžely synchronně s jádrem). Společnost tehdy vyráběla křemík u NECu a Simon Fenney vzpomínal, že rozhodnutí o taktu PCX2 vyplývající z knihoven společnosti NEC bylo poněkud konzervativní, neboť karty bezproblémově zvládaly i 75 MHz, což jim mohlo dát příjemný výkonnostní bonus. Krom desetiprocentního bonusu daného vyššími takty se v některých situacích přičetl bonus daný zjednodušením ovladačů, což souviselo mj. s přesunutím části úloh (obecně nazývaných jako triangle setup) z CPU a 3D jádro. Konkrétně šlo o dva prvky: Hardwarový převod desetinných čísel na celá a hardwarová podpora pro parametrové škálování.
Matrox m3D s PCX1
Čipy PCX2 odebírala především společnost Matrox, která je osazovala na akcelerátory pojmenované m3D, kterými bylo možné doplňovat (zejména) její karty řady Millennium a Mystique. To bylo konceptuálně docela zajímavé, neboť různé hry vyžadovaly různá API (tehdy velmi roztříštěná) a koupí m3D ke standardní kartě Matroxu získal uživatel velmi široké spektrum podporovaných standardů: Direct 3D, OpenGL, Heidi, QuickDraw 3D (pro MAC) a PowerVR SGL. Krom toho m3D oproti řešením Matroxu posunula i výkon a kvalitu obrazu.
Kvalita obrazu byla obecně u PCX2 na velmi vysoké úrovni. Krom filtrovaných textur (bilineárně) používalo jádro interně 24bit rendering (bylo možné vybrat mezi 16bit a 24bit výstupem), zatímco s výjimkou 3Dfx používali ostatní známí výrobci většinou jen 16bit rendering. Další plus byl „interní 32bit Z-buffer“, zatímco ostatní výrobci pro dosažení rozumného výkonu používali 16bit (a to i o několik let později, když hardware podporoval 32bit - propad výkonu byl totiž příliš vysoký). Dobrá alternativa přišla až s řadou ATi Rage 128, která podporovala 24bit Z-buffer, díky němuž dosahovala vysoké kvality, ale přesouvané objemy dat nesrážely výkon. 16bit Z-buffer způsoboval u některých her artefakty jako problikávající geometrické okraje různých 3D objektů, tzv. z-fighting a podobně.
Jedinou slabinou PCX2 po stránce kvality obrazu (byť v tehdejší době ne vysloveně podstatnou) bylo prolínání. TBDR fungoval tak, že co je nejblíže, přes to není vidět a vše skryté za nejbližší plochou nemusí být vykreslováno. Přesně proti tomuto konceptu jde ve 3D grafice koncept průhlednosti (musel být vykreslován i obsah za průhledným povrchem). Aby průhlednost mohla fungovat, vyřešili to pánové z VideoLogic tzv. akumulačním bufferem, který podporoval 16 stupňů průhlednosti. Když měl být nějaký objekt jistým způsobem (polo)průhledný, nebyl problém. Pokud však měl být vytvořen přechod průhledný / neprůhledný, byl škálovaný těmito 16 přechody (neplést s 16bit přechody, tohle bylo skutečně „4bit“). Je však pravdou, že v některých portech pro nativní API PowerVR SGL to ve VideoLogic vyladili kombinaci barev tak, že i přechody vypadaly relativně dobře.
Srovnání 3Dfx Glide (začátek) a PowerVR SGL na PCX2 (po 5. minutě) v Tomb Raider, což byl asi pro SGL nejvyladěnější port:
Kvalita obrazu byla vůči dobové konkurenci hodně nadprůměrná (podobně na tom bylo asi jen 3Dfx a Rendition). Jak to bylo s výkonem? Akcelerátory PCX patřily k tomu slušnějšímu, byť v průměru nedosahovaly výkonu (ale ani ceny) 3Dfx Voodoo Graphics. Akcelerátory jako S3 Virge, 3DLabs Permedia, ATi Rage / Rage II, Rendition Verite a jim podobné nechávala PCX2 v prachu. Permedia 2 nebo Intel i740 překonávala PCX2 mírně a ATi Rage Pro a Rendition Verite 2100 byly srovnatelné nebo mírně rychlejší.
Rozsáhlý test webu Vintage3D srovnal Midas 3, PCX1 a PCX2. První pohled na výkonnostní výsledky však nepředkládá objektivní obraz skutečnosti. Zelené pruhy náležící Midas 3 sice v četných hrách indikují (na danou dobu) dobrý výkon, ale problematická kompatibilita znamenala v mnoha hrách grafické chyby, absenci textur nebo chybějící prvky, takže delší zelený pruh mnohdy znamená jen to, že nebylo vykresleno vše, a proto byl výkon vyšší. Do Midas 3 však nelze jen kopat, je sice pravdou, že karta byla problémová, ale to se týkalo téměř každého prvního PC 3D akcelerátoru od většiny značek (S3, Trident, Matrox, Nvidia, ATi… snad s výjimkou 3Dfx a částečně Rendition). PCX2 je pak v průměru rychlejší než PCX1, ale pár výjimek se najde. Tyto výjimky jsou z valné části dané kombinací dvou faktů. PCX1 neprováděla filtraci textur (PCX2 ano, takže pokud hra byla náročnější na textury, mohlo to mít vliv) a některé hry byly optimalizované přímo pro PCX1, ale už se nedočkaly specifických optimalizací pro PCX2. Ta se navíc prodávala ještě levněji než původní PCX1.
Series 2
Tolik tedy k hardwaru, pro který byl zveřejněn zdrojový kód na GitHubu. VideoLogic / Imagination samozřejmě pokračovala dále, ale další vývoj situace poznamenala událost, která se z dnešního pohledu může jevit jako chyba. S architekturou Series 2 totiž vyhrála zakázku na konzoli Sega DreamCast. VideoLogic se totiž podařilo předběhnout 3Dfx Voodoo II, jejíž příprava ještě nebyla hotová a dostala se tak do světa domácích herních konzolí. Problém byl, že žádná ze společností vyrábějících 3D akcelerátory tehdy ještě nebyla tak velká, aby stíhala úspěšně vyvíjet čipy pro PC i pro konzole zároveň. PC verze Series 2 nazvaná Neon 250 tak nabrala roční zpoždění a k tomu byla v některých ohledech ořezaná. Roční zpoždění se pak promítlo i na Series 3: Kyro a Kyro II, které - kdyby byly vydány o rok dříve - mohly být velice úspěšné.