Direct3D 10.1: cosa c'è di nuovo?

AMD colma il buco prestazionale che aveva lasciato tra la HD 2900 e la HD 2600. Ecco le HD 3800, compatibili con le Direct3D 10.1, all'attacco della fascia media.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Direct3D 10.1: cosa c'è di nuovo?

Cerchiamo di essere chiari fin da subito: le novità integrate in queste nuove API non sono rivoluzionarie. Il passaggio alle Direct3D 10 ha portato molte novità, ma come spesso  accade in queste situazioni, le nuove API erano affette da alcuni errori. La versione 10.1 è una sorta di aggiornamento che corregge i problemi ed elimina alcune restrizioni.

Tutti i miglioramenti possono essere riassunti in tre categorie:

  • Rigorose specifiche per limitare le discrepanze tra implementazioni multiple.
  • Una manciata di nuove caratteristiche
  • Maggiore qualità e precisione di rendering e antialiasing

Rigorose specifiche

Ora è obbligatorio supportare il filtraggio texture FP32, mentre nella versione 10 era solo opzionale (anche se le GPU di entrambi i produttori supportavano già questa caratteristica). Allo stesso modo è obbligatorio  anche il blending integer a 16 bit.

Microsoft ha rafforzato le specifiche sulla precisione di calcolo, sia in operazioni di in-shader che blending. Molte operazioni (addizione, sottrazione, moltiplicazione e divisione) sono ora in linea con le norme IEEE-754; poco cambia in questo caso per i videogiocatori ma, i ricercatori affezionati alle GPGPU, ne potranno trarre vantaggio.

Nuove funzionalità

Microsoft ha scelto la via della moderazione per quanto riguarda le caratteristiche aggiuntive delle nuove API. Gli sviluppatori stanno ancora assimilando le caratteristiche delle Direct3D 10 e non sono ancora in grado di sfruttarle appieno. Sarebbe stato poco sensato aggiungere a questa versione una cascata di nuove funzionalità.

Prima di tutto, troviamo i Cube Map Arrays. Con le Direct3D 10, Microsoft ha introdotto i Texture Arrays, tabelle di texture che possono essere indicizzate direttamente negli shader. I Texture Arrays ricordano le Texture 3D, in circolazione da molto tempo, ma praticamente il loro comportamento è molto differente. Quando si accede a un elemento delle texture 3D, viene applicato ai vari layer un filtraggio, comportamento normale poiché una texture 3D è caratterizzata da un volume. Diversamente, le texture presenti nella tabella non hanno nessun nesso tra loro. Conseguentemente, non c'è alcun filtraggio tra gli elementi limitrofi. Inoltre, quando si usa il mipmapping, una texture 3D è divisa in 2 secondo le 3 dimensioni, mentre con le texture arrays ciò non avviene: se la composizione delle varie texture vede una diminuzione delle loro dimensioni, la dimensione della tabella rimane inalterata.

Le Direct3D 10.1 generalizzano queste Texture Arrays aggiungendo il supporto alle Cube Maps, mentre fino ad ora, erano supportate solo le tabelle di texture 1D e 2D.

Per quanto riguarda lo Shader Core, viene introdotto lo Shader Model 4.1 che apporta alcune novità come il Gather-4, che è praticamente il Fetch-4 (introdotto da ATI con la sua precedente generazione di schede). Per aggiornare la memoria più velocemente, questa istruzione permette di recuperare 4 elementi non filtrati da una single-channel texture con un solo texture fetch, che quindi permette un'implementazione più efficiente e personalizzati dei filtri negli shader.

Un'altra istruzione presente nello Shader Model 4.1 permette di recuperare il livello di dettaglio (mipmal level) durante un texture sampling. Microsoft ha aggiornato anche alcuni limiti, specialmente il numero di input vertex shader, passando da 16 vettori a 128 bit (4 floating point precision) a 32.

Per quanto riguarda il blending, abbiamo già menzionato il nuovo formato supportato, Int 16, ma non è l'unica novità; le Direct3D 10.1 ora permettono l'utilizzo di modalità di blending indipendenti durante rendering simultanei in più di un buffer (MRT: Multiple Render Targets).