Grafiikkaprosessoreiden ja kiihdytinpiirien käyttämä "klassinen" arkkitehtuuri (pipeline - liukuhihna) on pysynyt perusluonteeltaan lähes samanlaisena 20 vuotta. Ensimmäinen PC-ympäristössä toiminut 2D-grafiikkakiihdytin oli IBM:n 1980-luvulla valmistama 8514-prosessori, mikä pystyi kiihdyttämään yksinkertaisten primitiivien ja pikseleiden laskentaa. 1990-luvun alussa Microsoft suunnitteli ohjelmoitavan laitteistopohjaisen GDI-rajapinnan (GDI - Graphics Device Interface) ja seuraavana vuonna S3 esitteli jo sille ensimmäisen S3 86C911-kiihdytinpiirillä toimineen näytönohjaimen. 1990-luvun aikana 2D-prosessoreista kehittyi vähitellen 3D-vektorimatriiseja laskevia suoritusyksiköitä, mitkä pystyivät samalla myös pinnoittamaan primitiivit ja kuviot sekä laskemaan erilaisia tehosteita pintoihin. Ohjelmoitavat grafiikkaprosessorit ilmestyivät markkinoille vuonna 2002.
Nykyisten grafiikkaprosessoreiden klassinen arkkitehtuuri muodostuu lineaarisesti indeksoidusta ja kiinteästä liukuhihnasta, mikä sisältää erilaisia vaiheita esimerkiksi primitiivien muodostamisesta aina lopulliseen pikseliin kuvaruutupuskurissa. Liukuhihnassa on myös kiinteä määrä erityyppisiä vektoreita käsitteleviä suoritusyksiköitä (ALU:t), mitkä pystyvät suorittamaan vain niille suunnattuja käskyjä ja operaatioita. Esimerkiksi G71-grafiikkaprosessorin fragmenttiprossorit eivät voi muodostaa primitiivejä tai suorittaa verteksilaskuja, mutta pystyvät laskemaan pikselin värinarvon ja yhdistämään sen tekstuurinäytteeseen. Klassinen grafiikkaprosessoreiden arkkitehtuuri asettaa myös muutamia merkittäviä rajoituksia, koska yksinkertaisen käskyn tai operaation on käytävä liukuhihnan kaikki vaiheet läpi riippumatta siitä, mitä käsky tai operaatio sisältää.
Unified Shader-arkkitehtuuri perustuu yhtenäiseen arkkitehtuuriin, missä suoritusyksiköt ovat monitoiminnallisia (multipurpose functional unit) ja pystyvät suorittamaan rinnakkain useita erityyppisiä verteksi-, geometria-, pikseli- tai GPGPU-käskyjä sekä operaatioita. Suoritusyksiköt saattavat suorittavat myös tarvittavat laskut primitiivien ja pikselineliöiden muodostamista varten kuten esimerkiksi perspektiivin muunnokset ja verteksien sekä pikseleiden ominaisuudet. Yhtenäisempi arkkitehtuuri mahdollistaa lisäksi aikaisempia arkkitehtuureja vapaamman ja nopeamman resurssien hallinnan (kiinteät ja väliaikaiset rekisterit), kun käskyjen ja operaatioiden ei tarvitse enää käydä läpi tarpeettomia liukuhihnan vaiheita. Unified Shader-arkkitehtuuri sisältää kuitenkin edelleen muutamia samoja vaiheita kuin klassinen arkkitehtuuri, mutta yhtenäisemmän arkkitehtuurin ansioista vaiheet ovat huomattavasti tehokkaammat ja rajoitukset minimaalisia.
Yksi Unified Shader-arkkitehtuurin tuomia etuja verrattuna klassiseen arkkitehtuuriin on käskyjen ja operaatioiden uudelleen järjestely (scheduling) sekä kuorman tasapainottaminen (load-balancing) suoritusyksiköiden kesken riippumatta onko käskyt tai operaatiot verteksi-, geometria-, pikseli- tai GPGPU-käskyjä ja operaatioita. Kuorman tasapainottamisen suhdetta voidaan lisäksi muuttaa riippuen ympäristöstö ja verteksi- sekä pikselioperaatioiden laadusta ja määrästä. Esimerkiksi pikseli-intensiivisessä ympäristössä missä ei tarvita geometriaa, voidaan kuorman tasapainoa siirtää tarpeen mukaan pikselioperaatioihin. Optimaalisella käskyjen ja operaatioiden uudelleen järjestelyllä sekä kuorman tasapainottamisella pystytään tehokkaasti myös minimoimaan toimettomat (idlaavat) suoritusyksiköt grafiikkaprosessorissa sekä vähentämään tarpeettomien tai samojen vaiheiden määrää. Hyvin toteutetun Unified Shader-arkkitehtuurin hyötysuhde (IPC - instructions per clock) suoritusyksiköiden välillä on kellojaksossa 95 - 100 %.
Alla on kaksi esimerkkiä kuinka G71-grafiikkaprosessorin klassinen arkkitehtuuri toimii erilaisissa ympäristöissä. Ensimmäinen esimerkki on verteksi- ja geometriaintensiivisestä ympäristöstä ja toinen on pikseli-intensiivisestä ympäristöstä.
Kuten kuvista näkee, G71-grafiikkaprosessorin kuorman tasapainottamisen hyötysuhde on lähes olematon yhdenlaatuisilla operaatioilla, kun operaatioita ei voida jakaa kiinteiden verteksi- ja fragmenttoprosessoreiden kesken. Erikoiskäskyt (SF - special function) voidaan kuitenkin suorittaa rinnakkain G71-grafiikkaprosessorissa perinteisten verteksi- ja fragmenttokäskyjen kanssa, mikä parantaa monimutkaisten käskyjen ja operaatioiden hyötysuhdetta niitä käytettäessä.
Seuraavaksi esimerkki kuinka G80-grafiikkaprosessorin Unified Shader-arkkitehtuuri toimii samanlaisessa ympäristöissä. Ensimmäinen esimerkki on verteksi- ja geometriaintensiivisestä ympäristöstä ja toinen on pikseli-intensiivisestä ympäristöstä. Mukaan on lisätty myös Triagle Setup-vaihe, missä muodostetaan laskettavat primitiivit.
Unified Shader-arkkitehtuurin ansiosta G80-grafiikkaprosessori pystyy tasapainottamaan ohjelmien kuormaa tehokkaasti suoritusyksiköiden kesken. Kun verteksiohjelmien tarve on vähäinen, voi G80-grafiikkaprosessori siirtää hyötysuhdetta pikseliohjelmiin tai toisiin operaatioihin. Kun kaikenlaisia ohjelmia käytetään yhtäaikaa tai niiden määrä nousee, kuorma tasapainottuu kaikkien ohjelmien kesken. Primitiivien muodostaminen perinteisten verteksi- ja pikseliohjelmien rinnalla nostaa suoritusyksiköiden hyötysuhdetta ja tehokkuutta.
Sivulla 3 käsitellään tarkemmin NVIDIA:n G80-grafiikkaprosessorin Unified Shader-arkkitehtuuria ja sen ominaisuuksia. Mukana on myös viitteitä ATI:n Xenos-grafiikkaprosessorin (R500) Unified Shader-arkkitehtuurista.
Microsoftin kehittämä DirectX-ympäristö ohjelmistoille ja laitteistoille on kehittynyt versioon 10. DirectX 10 sisältää paljon uusia ja päivitettyjä peli- ja multimediaominaisuuksia kuluttajille sekä monipuolisemman ympäristön ohjelmistokehittelijöille kuin aikaisemmat DirectX-versiot. Microsoftin mukaan ensimmäiset DirectX 10-ympäristöä hyödyntävät pelit ja ohjelmistot julkaistaan kevään 2007 aikana. Kattavalta ohjelmistolistalta löytyy esimerkiksi Suomalaisen Remedy-peliyrityksen kehittämä ja Microsoftin Game Studiosin lanseeraama Alan Wake-peli. Uudistetun kehitysalustan takia päivitetyt DirectX 10-ominaisuudet ovat yhteensopivia ainoastaan vain Microsoftin Vistan kanssa ja ne eivät toimi vanhemmissa Windows XP/2000-ympäristöissä. Microsoft julkaisee Vistan ja DirectX 10:n tammikuun lopulla.
DirectX-ympäristö muodostuu niin sanotuista rajapinnoista, joita ovat Direct3D (3D-grafiikka), DirectDraw (2D-grafiikka), DirectInput (peliohjaimet), DirectSound (ääni), DirectPlay (verkko), DirectMusic (musiikki), DirectSetup (DirectX-asennus) ja DirectX Media Object (mediavirrat). Rajapintojen avulla pelien ja ohjelmistojen kehitys on huomattavasti helpompaa ja nopeampaa, kun käyttöjärjestelmä sisältää valmiit kirjastot sekä kutsut suoraan laitteistolle. Näytönohjaimien ohjelmistokehitystä varten Microsoft tarjoaa valmistajille Windows Vistan näyttöajurin mallin (WDDM - Windows Vista Display Drivers Model), joka sisältää Direct3D ja DirectDraw-rajapintoja varten erilaisia vaatimuksia.
DirectX 10:n yhtenäisempi ohjelmistoarkkitehtuuri (Unified Shader) tuo mukanaan paljon uudistuksia Direct3D-rajapinnan sisältämiin ominaisuuksiin ja vaatimuksiin. Microsoft on esimerkiksi parantanut sen suorituskykyä suunnittelemalla rajapinnan ohjelmistoarkkitehtuurin uusiksi ja lisäämällä ominaisuuksia, mitkä vähentävät huomattavasti prosessorin tarvetta, kun ohjelmat pystyvät lähettämään prosessit suoraan näytönohjaimelle. Prosessit ovat yleensä rajapinnan kutsuja tai kokonaisia liukuhihnan vaiheita kuten rasterointi tai kuvaruutupuskurin hallinta. Vaatimustasolla DirectX 10 poistaa niin sanotut "capsit" Direct3D-ympäristöstä, joiden avulla oli aikaisemmin mahdollista lisätä uusia ominaisuuksia ohjelmisto- ja laitteistotasolla. Microsoftin yhtenäisempi ohjelmistoarkkitehtuuri DirectX 10-ympäristössä ei vaadi Unified Shader-arkkitehtuurista tukea laitteistolta, mutta laitteistojen on kuitenkin tuettava kaikkia DirectX 10:n asettamia vaatimuksia ohjelmistotasolla.
Uusia Direct3D 10-rajapinnan ominaisuuksia ovat:
| DirectX Shader Model | DX8 SM1.0 | DX9 SM2.0 | DX9 SM3.0 | DX10 SM4.0 |
| Verteksikäskyjä Vertex Instructions |
128 | 256 | 512 | 65535 |
| Pikselikäskyjä Pixel Instructions |
4 + 8 | 32 + 64 | 512 | 65535 |
| Pysyviä verteksirekistereitä Vertex Constants |
96 | 256 | 256 | 16 x 4096 |
| Pysyviä pikselirekistereitä Pixel Constants |
8 | 32 | 224 | 16 x 4096 |
| Väliaikaisia verteksirekistereitä Vertex Temps |
16 | 16 | 16 | 4096 |
| Väliaikaisia pikselirekistereitä Pixel Temps |
2 | 12 | 32 | 4096 |
| Verteksin syöterekistereitä Vertex Inputs |
16 | 16 | 16 | 16 |
| Pikselin syöterekistereitä Pixel Inputs |
4 + 2 | 8 + 2 | 10 | 32 |
| Renderöintikohteita Render Targets |
1 | 4 | 4 | 8 |
| Verteksitekstuureja Vertex Textures |
- | - | 4 | 128 |
| Pikselitekstuureja Pixel Textures |
8 | 16 | 16 | 128 |
| Tekstuurin enimmäiskoko 2D Tex Size |
- | - | 2048 x 2048 | 8192 x 8192 |
| Kokonaislukuoperaatiot Int Ops |
- | - | - | Kyllä |
| Latausoperaatiot Load Ops |
- | - | - | Kyllä |
| Johdannaiset käskyt Derivatives |
- | - | Kyllä | Kyllä |
| Verteksin vuonohjaus Vertex Flow Control |
- | staattinen | staattinen dynaaminen |
dynaaminen |
| Pikselin vuonohjaus Pixel Flow Control |
- | - | staattinen dynaaminen |
dynaaminen |
| Geometriaohjelmat Geometry Shaders |
- | - | - | Kyllä |
| HLSL-tuki HLSL Support |
- | Kyllä (9) | Kyllä (9) | Kyllä (10) |
| Microsoftin ympäristö Microsoft's platform |
Windows 9x Windows ME Windows 2000 |
Windows XP | Windows XP | Vista |