3Dfx: pensieri e parole (con qualche immagine)

3dfx-logo.bmpIl nome di 3dfx, per chi è appassionato di 3D e videogame su pc, evoca, da sempre, particolari suggestioni e suscita emozioni e ricordi in cui la realtà e il mito finiscono col confondersi.

Quel che è certo è che 3dfx non ha inventato il 3D e neppure è stata la prima a farne un’implementazione su pc.

Ha, però, l’enorme merito di averlo reso fruibile al popolo del computer, al quale, grazie alla possibilità di acquistare un acceleratore 3D ad un prezzo, per l’epoca, relativamente abbordabile, ha visto, improvvisamente, aprirglisi davanti un mondo sconosciuto ed affascinante.

Non è mia intenzione, però, in questa sede, parlare del “mito” 3dfx e neppure fare una rievocazione dei bei tempi videoludici andati. Farò, invece, un molto più pragmatico e, forse, noioso, cenno al frutto del lavoro dei tecnici di 3dfx: i suoi acceleratori 3D e i suoi chip grafici.

Iniziamo dall’ormai lontano 1995 e dalla piattaforma denominata SST-1 Graphic Engine, meglio nota come Voodoo che, per prima, faceva uso delle funzioni di depth buffering su una piattaforma a basso costo, introducendo, di fatto, la terza dimensione virtuale nelle case di ogni utente dotato di pc.

Si tratta, appunto, di una piattaforma, poichè dotata, in realtà, di due chip, denominati Texture Raster Engine (TREX) e Frame Buffer Interface (FBI). La scheda è, inoltre, equipaggiata da due gruppi di EDOram o SDRAM, uno dedicato alle operazioni di texturing, di dimensioni variabili tra 1 e 8 MB e l’altro utilizzato come frame buffer, con dimensioni comprese tra 2 e 4 MB.

voodoo.bmp

Il TREX è il chip master che si occupa di tutte le operazioni relative alle texture, tra cui il calcolo del LoD (level of detail), il mipmapping, le tecniche di filtraggio semplici (point sampling, bilinear filtering, ecc) e quelle, per l’epoca, più avanzate (trilinear  filtering, detail texture mapping e projected texture mapping). Il FBI è un chip slave, attraverso cui passano tutte le comunicazioni con il bus PCI e, di conseguenza, con la cpu. Il FBI gestisce anche le operazioni di base sulle primitive, tra cui gourad shading, alpha blending, dithering e depth buffering, svolgendo, di fatto, il ruolo che, negli attuali chip, è affidato alle cosiddette RBE o ROP’s.

Il TREX è dotato di un bus di espansione che gli permette, in teoria, di essere connesso ad altre unità gemelle, in modo da potenziare la capacità di testuring del sistema. In particolare, si può arrivare ad una configurazione che provede fino a 3 TREX connessi tra di loro

voodoo-3-trex.bmp

Dal momento che un singolo TREX ha la capacità di effettuare bilinear filtering con mipmapping in single pass, una configurazione con 3 TREX arrtiva a fare trilinear filtering con mipmapping e detail texture in single pass. Inoltre, la configurazione con un solo TREX  è in grado di effettuare solo trilinear filtering con mipmapping in due passate ma non supporta le operazioni più complesse abbinate a filtraggio bilineare o trilineare.

Di fatto, un TREX comprende una unità di texture sampling una di texture fetch ed un testure combiner, ovvero, è l’equivalente di una tmu. 

Il FBI, invece, presenta un color combiner e unità di alpha blending, dithering, color e z compare.

sst-1-schema-a-blocchi-2.bmp

Il bus di interfaccia con il frame buffer è ampio 64 bit  e lavora a 50MHz; le prestazioni teoriche prevedono la scrittura di 1 pixel per ciclo in caso di operazioni di gourad shading o texture mapping con depth buffer attivo, il che significa un picco teorico di 50 Mpixel/sec.

Il datapath di accesso alla ram dedicata alle operazioni di texturing è di tipo fully interleaved; in pratica significa che è possibile accedere a più dati, contenuti in diversi banchi di menoria, in contemporanea e indipendentemente. Questo permette, nel caso specifico, di fare bilinear filtering in single pass con un singolo TREX.

Le operazioni interne sono svolte a 24 bit nativi e, solo all’uscita della pipeline, sono convertite a 16 bit e immagazzinate in quel formato all’interno del FB.

Su SST-1 ci sarebbero molte altre cose da aggiungere, anche solo a titolo informativo, senza alcun approfondimento. Non è questo, però, l’intento che mi sono ripromesso. L’idea è quella di iniziare a descrivere, per sommi capi, il funzionamento delle architetture grafiche e, secondo la mia opinione, il modo migliore per farlo è quello di cominciare parlando del primo acceleratore grafico 3D di tipo consumer e con la società che ha, di fatto, schiuso il mondo del 3D ai possessori di pc.

Continuo, perciò, il breve excursus sulle architetture grafiche progettate da 3dfx, passando al successore di SST-1, ovvero il sistema Voodoo 2.

Nello schema a blocchi sottostante, si può notare che le differenze più evidenti rispetto all’SST-1 sono  l’utilizzo di ram di tipo SDRM/SGRAM, il maggior quantitativo utilizzabile per le texture e l’uscitaTV. Anzi no, ce n’è un’altra, direi fondamentale, ovvero i nomi dei due chip master e slave: Chuck (Norris)  e Bruce (Lee).

voodoo-2-schema-a-blocchi.bmp

In pratica, Chuck è il FBI e Bruce il TREX visti nell’SST-1 anche se ci sono più  differenze di quante ne risultino ad una prima occhiata.  Ad esempio, il bus che nel TREX permetteva di mettere in comunicazione tra loro più unità dello stesso tipo, in BRUCE permette anche l’accesso diretto alla texture memory da parte di un dispositivo esterno.

Inoltre, CHUCK supporta anche una sorta di edge antialiasing per rimuovere le scalettature sui bordi dei poligoni che è, però, dipendente dall’algoritmo di sorting dei poligoni (varia la modalità in caso sia front to back o back to front); né questa funzionalità e neppure la possibilità di accedere a texture da parte di chip esterni, sono state esposte nelle prima revisione del chip.

C’è da aggiungere che il bus di Bruce verso la texture ram è di 64 bit, come quello di Chuck verso il FB.

Di fatto, oltre a supportare qualche funzione in più e a lavorare a frequenze più alte, sia per la ram che per i chip, il grosso vantaggio a livello prestazionale delle Voodoo 2 messe in commercio, rispetto alle Voodoo 1 risiede soprattutto nel fatto che le prime sono state commercializzate con 2 unità di tipo Bruce, mentre le prime con una sola TREX. Il che fornisce alla Voodoo 2 una capacità di texturing doppia rispetto al sistema che l’ha preceduta.

Occorre far presente che, a differenza di quanto si è iniziato a vedere con i chip DX8 (o, in precedenza, ma era un’eccezione, con il Kyro), in precedenza non si faceva una particolare distinzione tra istruzioni eseguite in single pass o con un solo ciclo. Questo perchè, per la maggior parte delle funzioni, non si faceva uso di buffer di accumulazione dei risultati intermedi di un’elaborazione. Così, se ad esempio, nel caso dell’NV20, si potevano applicare 2 texel per ciclo su singolo pixel, ma si poteva arrivare a 4 texel per pass (che diventano 6 con lo SM1.4 e 16 con lo SM2.0) , per NV15 (che ha la stessa configurazione di tipo 4×2, ovvero 4 pipeline con 2 tmu ciascuna) c’era la possibilità di applicare 2 texel per ciclo ma anche e solo 2 texel per pass. Il vantaggio dell’uso di buffer di accumulazione consiste nel non dover accedere ogni volta che si è concluso un ciclo, al FB per scrivere o leggere dati, ma si può far uso di memoria interna di più veloce accesso. La Matrox Parhelia, ad esempio, non utilizzando buffer interni, per poter vantare la compatibilità con lo SM1.3 che richiede 4 texture per pass, fa uso di un’architettura 4×4. Ovvio che, all’aumentare della complessità dei calcoli, diventa sempre più difficile (al giorno d’oggi impossibile) avere un’architettura con tante tmu per pipeline quante sono le texture richieste per pass (come la si metterebbe, ad esempio, con 128 texture in single pass?).

Ma torniamo a 3dfx: dopo Chen e Walker (Texas ranger), troviamo i Vendicatori, o meglio IL VENDICATORE, in quanto il nome in codice del chip che equipaggia la Voodoo3 è proprio AVENGER . Si tratta del secondo chip (dopo il Banshee) prodotto da 3dfx che non è solo un acceleratore 3D ma un vero e proprio chip grafico, con funzionalità 2D avanzate e del primo progettato anche per l’interfaccia AGP 2.0. Se il banshee era, volendo schematizzare al massimo, un chip Bruce+Chuck con funzionalità 2D, Avengerè un banshee con un Bruce in più e frequenze maggiorate. In realtà ci sono alcune piccole differenze che, ai fini di questo tipo di trattazione non sono fondamentali e su cui non ci si soffermerà.

voodoo3.bmp

Dalla figura si può vedere che è ancora presente il FBI, come è presente un blocco denominato TMU che, stavolta, comprende 2 unità di texturing che si trovano sullo stesso chip del FBI. C’è anche, come è ovvio, il blocco relativo alle funzioni 2D.

Avenger, al pari del Banshee, presenta un bus di 128 bit sia come interfaccia con il FB che nel collegamento tra tmu e texture memory.

Al contrario dei suoi predecessori, Avenger lavora, internamente, a 32 bit lungo quasi tutta la pipeline, convertendo solo in prossimità dell’uscita. i dati a 24 o 16 bit.  Ovviamente i 32 bit in oggetto non sono da confondere con i 32 bit di cui si parla oggi (ovvero 32 bit in fp per canale) ma di 32 bit complessivi (ovvero 8 pr canale). Discorso analogo per i 16 e i 24 bit.

Qui sotto, un grafico che dà un’idea della perdita di prestazioni nel caso di applicazioni che richiedono più accessi al FB per le operazioni di texturing

comparazione-prestazioni-v3-banshee.bmp

Nonostante gli innegabili vantaggi mostrati anche in questa immagine, forse sull’onda del successo dei chip che, sulla falsarige del TnT Riva, iniziano a proporre architetture nx1 (2×1 per il TnT ed il TnT2, 4×1 per l’NV10)  che, se da un lato, perdevano il confronto nelle mere operazioni di texturing, dall’altro potevano vantare un pixel fillrate più elevato, potendo “scrivere” più pixel per ciclo, il successore del Voodoo3 abbandona l’architettura con un solo Chuck e più Bruce per adottare un’architettura 2×1, ovvero con 2 FBI e 2 TREX o comunque li si voglia definire: in pratica, due pipeline con 1 tmu ciascuna.

Questa è la principale novità ma non l’unica, presentata da VSA-100, un chip che doveva rappresentare la riscossa di 3dfx ma che, al contrario, non ha avuto un successore a causa delle note vicende che hanno portato all’acquisizione della stessa 3dfx da parte di nVidia.

VSA-100 è un ottimo chip, capace di effettuare calcoli a 32 bit lungo tutta la pipeline, in grado di utilizzare due modalità di texture compression, quella standard prevista dalle dx (DXTC) e la FXT1 capace di un rapporto di compressione di tipo lossy (con perdita di qualità comunque accettabile) di 8:1 . Inoltre, tra le caratteristiche di VSA-100 c’è anche il miglior FSAA del periodo e che, ancora oggi, è da considerarsi una pietra miliare del settore. L’algoritmo utilizzato è un RGSS con gamma correction e fa uso di accumulation buffer interni al chip definiti T-buffer. Dei T-buffer si fa uso anche per l’applicazione del motion blur e per soft sahdow e soft reflection.

VSA-100 è progettato per lavorare insieme ad altri chip identici (fino ad un massimo di 32 teorici), in modalità scan line interleave (SLI), in cui uno dei due chip si occupa di renderizzare le linee pari e l’altro quelle dispari di un frame.  Sarà così sulle Voodoo 5 5000 (PCI) e 5500 (AGP)  con 2 chip in paralello e sarebbe dovuto essere così sulla Voodoo 5 6000 (con 4 VSA-100 in parallelo).

Insomma, si tratta di un chip in cui non si è sacrificata la qualità alle prestazioni. Ma, visto che si parla di 3D e, di conseguenza, quello che viene alla mente sono i soliti grafici dei benchmark, come è il VSA-100 in fatto di prestazioni?  Nella sua incarnazione più spinta, arriva a 183 MH che, considerate la due pipeline, danno un pixel fillrate di 366 Mpixel/sec per chip. Non è un valore elevato (solo un 25-30% in più di una TnT2). In SLI arriva a superare di un buon 40% le prestazioni di una Geforce. Il problema è che si trova a confrontarsi con chip prodotti da nVidia e ATi, di nuova generazione che iniziano a far uso, al pari di NV10 e dello sfortunato Savage 2000 di S3, di accelerazione HW per le operazioni geometriche (anche se ancora limitati a funzioni fisse e non programmabili) e hanno valori di pixel e texel fillrate decisamente superiori: NV15, nota come Geforce 2 e R100 conosciuto come Radeon.

Se da un punto do vista qualitativo VSA-100 non ha nulla da invidiare ai suoi diretti concorrenti, anzi, può ad esempio, vantare un FSAA che non solo ha un’ottima qualità ma che, grazie all’adozione del T-buffer, ha un impatto prestazionale inferiore rispetto a quello visto su NV15 e R100 (per quanto sempre devastante come tutte le forme di FSAA), dal punto di vista delle prestazioni pure risulta inferiore ad entrambi, anche in modalità SLI ed inoltre, necessita di una cpu più potente per poter dare il meglio, in quanto per i calcoli geometrici si appoggia completamente su di essa. Rispetto alle rivali, ha in più le GLIDE, alternativa proprietaria alle D3D e alle OpenGL ma ormai sono lontani i tempi in cui 3dfx era sinonimo di prestazioni vertiginose in 3D. La serie Geforce, soprattutto in versione NV15, grazie al fatto che internamente supporta, nativamente, sia i calcoli a 16 che a 32 bit, nella prima modalità riesce a sfoderare prestazioni molto al di sopra dei concorrenti, seppure con una qualità a dir poco pessima. A 32 bit, invece, soprattutto in D3D, brilla R100, che effettua i calcoli interni, al pari di MGA 400 (la matrox G400), sempre a 32 bit ma riesce a gestire meglio il bus di accesso alla ram grazie all’Hyper-z, una serie di feature atte ad effettuare operazioni di HSR, di compressione dei dati e di pulizia veloce dello z-buffer.

Infine, buon ultimo, VSA-100, al contrario dei chip nVidia (da NV10) e ATi (da R100), non supporta le ram DDR, il che limita la bandwidth in single chip e in modalità SLI non permette ad un chip di far uso di più di 32 MB di ram (il che significa che con alcune applicazioni si può diventare frame buffer limited). Quest’ultimo gap, 3dfx si riproponeva di superarlo con il successore di VSA-100, ovvero VSA-101 che, però, non ha mai visto il mercato.

Ora 3dfx è sinonimo di elevata qualità d’immagine ma lo scettro delle prestazioni è definitivamente passato di mano.

Possiamo concludere dicendo che VSA-100 ha rappresentato il canto del cigno di 3dfx. Il suo miglior chip e anche quello con cui ha deciso di staccarsi dalla tradizione, costretta, in un certo senso, a cercare l’innovazione, è stato anche il suo ultimo. Forse è proprio in queste considerazioni che si può cercare il limite che ha portato alla fine di 3dfx. In questo articolo si è fatto un breve riassunto delle varie architetture prodotte da 3dfx ma quella che è mancata è stata proprio l’innovazione, la modifica radicale di un progetto. Si è rimasti legati al vecchio schema della singola pipeline fino ad arrivare, in pratica, all’ultimo chip della serie, la dove, nVidia che, in quel periodo, è stata sicuramente la più attiva, partendo dal nulla e guadagnando una meritata leadership, ha proposto architetture 1×1, 2×1, 4×1, fino ad arrivare alla 4×2 di NV15 e li si è fermata anche lei fino ad NV30 ed è stata superata da ATi con la 8×1 di R300.

Ma questa è un’altra storia.

Press ESC to close