Unità Texture - Architettura
Clicca per ingrandire
Nel diagramma, affianco al core dello shader sono associate le unità texture. Per R600 ATI ne ha usato quattro, ognuna di queste può indirizzare otto dati texture per ciclo, quattro per filtri bilinear e quattro per dati non filtrati. La cache per i vertex può essere usata per accessi ai vertex o altri accessi strutturati. Può anche essere usata per i displacement, che saranno sempre più usati nei giochi DX 10.
A ogni unità sono poi associati 20 texture sampler, per un totale di 80 sampler per R600. Questi prelevano e restituiscono dati. Secondo ATI, non fa differenza che si tratti di dati interi o in virgola mobile. Vengono restituiti quattro valori in virgola mobile filtrati per ciclo e quattro non filtrati, o qualsiasi altro tipo di dati. L'architettura delle 2600 e 2400 sarà simile, con un throughput inferiore dovuto al minor numero di unità.
Le cache delle texture, rispetto alle generazioni precedenti, sono un po' più complicate, siccome sono suddivise in molte cache. Ci sono quelle L1 da 32K unificate per tutte le matrici SIMD; poi una secondo livello L2 da 256K (128 per la 2600 e zero per la 2400). La cache di secondo livello consente di conservare strutture di dati imponenti, come fat pixel o texture molto grandi.
C'è anche un sistema di cache vertex che lavora in concerto con le cache delle texture. Si chiama vertex cache perché viene usata primariamente per questo tipo di dati, ma è a sua volta flessibile e quindi può contenere anche dati di texture non filtrati.
É abbastanza comune utilizzare la cache con displacement mapping, lookup strutturati nelle matrici e matrici render-to-vertex dove i dati sono recuperati nuovamente.
La disponibilità di risorse per arbitrare la cache è cruciale. La chiave per il corretto funzionamento è la bontà di conversione del codice da parte del compilatore, che determina le modalità di funzionamento delle elaborazioni e il throughput finale che si otterrà.
In operazioni come il render to texture, solitamente si crea una texture che si usa immediatamente. In questo caso potrebbero sorgere dei problemi. La texture deve essere ultimata prima di essere utilizzata. I vecchi processori dovevano finire la renderizzazione della texture prima di passare al comando successivo, il che inficiava molto le prestazioni generali. ATI ha cambiato questo approccio con la serie 2000. Come già menzionato, il controllo è stato spostato a livello hardware, così quando è necessario renderizzare una texture si effettua prima un controllo di coerenza con il chip su tutte le texture unit e il raster back end. Il driver non interviene più. Si limita a inviare un comando al chip e a riempirlo. Il processore stesso si occupa di sincronizzare le varie unità.
Unità Texture - Caratteristiche
Considerando i 6 TB di banda disponibile, ATI ha voluto puntare molto sull'ampiezza di banda all'interno della GPU. È stato deciso che il rate per 8-bit INT, 10-bit INT, 16-bit INT, e float16 sarebbe stato lo stesso se confrontato con la linea X1K.
Trilinear e Anisotropic filtering sono supportati per ogni formato e la modalità AF ad'alta qualità è la modalità di default. Il Texture depth stencil (DST) con percentage closer filtering (PFC) è stata appannaggio di Nvidia per un po' di tempo ma è poi stato ufficialmente introdotto nelle DX10, così ATI l'ha incluso nella serie R600. Questa aggiunta si trasforma in un vantaggio nella renderizzazione di alcuni effetti come le soft shadow.
ATI ha anche introdotto un nuovo formato standard. Si tratta dell'HDR 32 bit 9:9:9:5. L'unità texture supporta alte risoluzioni (8192x8192) e può anche gestire 2 texture fetch per ciclo (1 filtrata e una non fitrata) con l'opzione di quattro fetch non filtrate e una filtrata con Fetch4.