Z Buffers e HiZ

Dopo aver fatto una panoramica sulla nuova scheda ATI/AMD HD 2900 XT è giunto il momento di entrare più nel dettaglio con un approfondimento tecnico sull'architettura del chip R600.

Avatar di Andrea Ferrario

a cura di Andrea Ferrario

Editor in Chief

Z Buffers e HiZ

Per questa nuova famiglia, ATI ha duplicato le prestazioni Z fino a 32 pixel per clock, sia che si tratti di multisampling o meno. Per le HD2600 e HD2400 questo valore si abbassa a 8 pixel per clock poiché queste schede sono dotate di solo un'unità anziché quattro. ATI include dei nuovi formati floating-point a 128 bit e 11:11:10 per DX10. Con R600, possono essere definiti 8 multipli obiettivi di rendering (MRT) che permettono molteplici output shader. Questi numeri sono il doppio rispetto la serie X1000. In alcuni casi i dati possono essere anche salvati per ridurre la quantità di istruzioni da effettuare. Perché fare qualcosa una seconda volta quando si può semplicemente salvare il risultato e utilizzarlo in una seconda occasione? 

Non solo ATI ha duplicato il numero di Z-Buffer ma li ha anche resi più complessi. La Z range optimization è parte delle DX10. Questo significa che potete regolare lo Z buffer in maniera tale da renderlo più efficiente per le stencil shadow. La compressione è stata duplicata rispetto alla generazione precedente. Nella modalità standard si può gestire una compressione 16:1 contro la 8:1 delle X1000; si possono inoltre comprimere i valori stencil. Si può arrivare fino a 128:1 utilizzando l'MSAA 8x. Inoltre, è stato aggiunto il supporto per i formati float e integer a 32 bit. Secondo ATI, le prestazioni degli shadow sono il doppio se confrontiamo una HD 2900 e una X1950. C'è però da considerare che questa affermazione si basa su prove effettuate con i driver beta, quindi in futuro le prestazioni potrebbe essere ancora superiori.

Z Buffers And HiZ

Oltre all'HiZ (hierarchical Z) che esisteva già con l'hardware precedente, è stato aggiunto lo Hierarchical stencil (HiS) per aumentare le prestazioni  stencil. HiZ è stato implementato sul chip Xenos di Xbox e ora è stato portato sull'R600.

Lo Z Buffer è separato dallo stencil. Ora Z e stencil sono compressi separatamente per raggiungere prestazioni migliori. Nelle architetture precedenti i dati erano immagazzinati assieme per giochi come Doom, dove era necessario memorizzare entrambi i tipi di valori. Nella serie 500 c'era un chip per l'immagazzinamento dei dai compressi che diceva al processore lo stato della compressione per ogni sezione dello schermo. I problemi sorgevano quando la risoluzione andava oltre quella per cui era stato progettato il sistema. Ora i blocchi sono gestiti per buffer e regioni, il che permette una compressione più elevata, specialmente alle alte risoluzioni. Il guadagno in termini di prestazioni, in questo caso, dovrebbe vedersi a risoluzioni di oltre 1600x1200 o in applicazioni complesse dove vengono utilizzati assiduamente buffer colori e Z.

Re-Z

Re-Z è l'abilita di eseguire multipli passaggi Z nell'ambito di un singolo rendering. Normalmente primo o dopo lo shading si effettua un controllo Z. Ora può essere sia prima che dopo. Questo sarà necessario se lo shading influenza il valore Z. Prima la scena veniva modificata con il controllo successivo e in maniera distruttiva, mentre ora può essere fatto tutto prima e in maniera non distruttiva. Questa nuova implementazione evita azioni ricorsive e dovrebbe portare un guadagno prestazionale di circa il 15%.

Re-Z is the ability to do multiple Z passes within one rendering. Normally a Z check is done once before or after shading. Now it can be done before and after. This can be necessary as shading can affect the Z value. A pixel might be killed during flight in the shader or if an alpha test is done on the corner of some foliage. When that was detected in the past, ATI only did latency or Z after all of the pixels were killed. Now they can do it before as well and in a non-destructive way by asking if the pixel is going to be displayed. If it is going to be displayed, then the pixel shader will shade it and it can do a Z test later. If it is not going to be displayed then it can be killed. In the case when it is going to be displayed, the Z buffer will not be updated until the process is finished. Basically there is some forward looking to help skip useless shading work as well as to modify the values when applicable. It is a more efficient way than it has been done in the past and translates into what ATI states can be up to 15% faster.