Funzionalità di Direct3D 11

La guida alla programmazione contiene informazioni su come usare la pipeline programmabile Direct3D 11 per creare grafica 3D in tempo reale per i giochi e per applicazioni scientifiche e desktop.

Compute Shader

Uno shader di calcolo è uno shader programmabile progettato per l'elaborazione parallela dei dati per utilizzo generico. In altre parole, gli shader di calcolo consentono l'uso di una GPU come processore parallelo per utilizzo generico. Lo shader di calcolo è simile agli altri shader della pipeline programmabile (ad esempio vertice, pixel, geometria) nel modo in cui accede agli input e agli output. La tecnologia compute shader è nota anche come tecnologia DirectCompute. Uno shader di calcolo è integrato in Direct3D ed è accessibile tramite un dispositivo Direct3D. Può condividere direttamente le risorse di memoria con gli shader grafici usando il dispositivo Direct3D. Tuttavia, non è direttamente connesso ad altre fasi dello shader.

Un compute shader è progettato per le applicazioni di mercato di massa che eseguono calcoli a velocità interattive, quando il costo della transizione tra l'API (e lo stack di software associato) e una CPU consuma un sovraccarico eccessivo.

Un compute shader ha un proprio set di stati. Un compute shader non ha necessariamente un mapping 1-1 forzato a record di input (ad esempio un vertex shader) o record di output (come lo fa il pixel shader). Alcune funzionalità dello shader di grafica sono supportate, ma altre sono state rimosse in modo da poter aggiungere nuove funzionalità specifiche dello shader di calcolo.

Per supportare le funzionalità specifiche dello shader di calcolo, sono ora disponibili diversi nuovi tipi di risorse, ad esempio buffer di lettura/scrittura, trame e buffer strutturati.

Per altre informazioni, vedere Panoramica di Compute Shader .

Collegamento di dynamic shader

I sistemi di rendering devono gestire una complessità significativa quando gestiscono gli shader, offrendo al tempo stesso la possibilità di ottimizzare il codice dello shader. Questo diventa una sfida ancora più grande perché gli shader devono supportare una varietà di materiali diversi in una scena sottoposta a rendering in varie configurazioni hardware. Per risolvere questa sfida, gli sviluppatori di shader hanno spesso fatto ricorso a uno dei due approcci generali. Sono stati creati shader di grandi dimensioni e per utilizzo generico completi che possono essere usati da un'ampia gamma di elementi della scena, che compromettono alcune prestazioni per la flessibilità o hanno creato singoli shader per ogni flusso geometrico, tipo di materiale o combinazione di tipi di luce necessari.

Questi shader generici di grandi dimensioni gestiscono questa sfida ricompilando lo stesso shader con definizioni di preprocessore diverse e quest'ultimo metodo usa la potenza di sviluppo di forza bruta per ottenere lo stesso risultato. L'esplosione della permutazione dello shader è spesso un problema per gli sviluppatori che devono ora gestire migliaia di permutazioni diverse dello shader all'interno della pipeline di gioco e asset.

Il modello Direct3D 11 e shader 5 introducono costrutti di linguaggio orientati agli oggetti e forniscono il supporto di runtime del collegamento dello shader per aiutare gli sviluppatori a programmare shader.

Per altre informazioni, vedere Collegamento dinamico .

Multithreading

Molte applicazioni grafiche sono associate alla CPU a causa di attività costose, ad esempio l'attraversamento del grafico della scena, l'ordinamento degli oggetti e le simulazioni di fisica. Poiché i sistemi multicore stanno diventando sempre più disponibili, Direct3D 11 ha migliorato il supporto per il multithreading per consentire un'interazione efficiente tra più thread CPU e le API grafiche D3D11.

Direct3D 11 abilita le funzionalità seguenti per supportare il multithreading:

  • Gli oggetti simultanei vengono ora creati in thread separati: rendendo le funzioni del punto di ingresso che creano oggetti senza thread consente a molti thread di creare oggetti contemporaneamente. Ad esempio, un'applicazione può ora compilare uno shader o caricare una trama in un thread durante il rendering in un altro.
  • Gli elenchi di comandi possono essere creati in più thread: un elenco di comandi è una sequenza registrata di comandi grafici. Con Direct3D 11 è possibile creare elenchi di comandi in più thread CPU, che consente l'attraversamento parallelo del database della scena o l'elaborazione fisica su più thread. In questo modo il thread di rendering principale consente di inviare buffer dei comandi all'hardware.

Per altre informazioni, vedere MultiThreading .

Suddivisione a mosaico

La tassellatura può essere usata per eseguire il rendering di un singolo modello con diversi livelli di dettaglio. Questo approccio genera un modello più geometricamente accurato che dipende dal livello di dettaglio necessario per una scena. Usare la tassellatura in una scena in cui il livello di dettaglio consente un modello geometrico inferiore, riducendo la richiesta di larghezza di banda di memoria utilizzata durante il rendering.

In Direct3D la tassellatura viene implementata nella GPU per calcolare una superficie curva più liscia da una patch di input grossolana (meno dettagliata). Ogni viso di patch (quad o triangolo) è suddiviso in facce triangolari più piccole che meglio approssimano la superficie desiderata.

Per informazioni sull'implementazione della tassellatura nella pipeline grafica, vedere Panoramica della suddivisione a mosaico.

Elenco completo delle funzionalità

Questo è un elenco completo delle funzionalità in Direct3D 11.

  • È possibile eseguire Direct3D 11 su hardware di livello inferiore specificando un livello di funzionalità quando si crea un dispositivo.

  • È possibile eseguire la tassellatura (vedere Tessellation Overview) usando i tipi di shader seguenti:

    • Hull shader
    • Domain shader
  • Direct3D 11 supporta il multithreading (vedere MultiThreading)

    • Creazione di risorse/shader/oggetti multithread
    • Creazione dell'elenco di visualizzazione multithreading
  • Direct3D 11 espande gli shader con le funzionalità seguenti (vedere Modello shader 5)

    • Risorse indirizzabili: trame, buffer costanti e campionatori

    • Tipi di risorse aggiuntivi, ad esempio buffer di lettura/scrittura e trame (vedere Nuovi tipi di risorse).

    • Subroutine

    • Compute shader (vedere Panoramica dello shader di calcolo): uno shader che accelera i calcoli dividendo lo spazio di problema tra diversi thread software o gruppi di thread e condividendo i dati tra i registri shader per ridurre significativamente la quantità di dati necessari per l'input in uno shader. Gli algoritmi che il compute shader può migliorare in modo significativo includono post-elaborazione, animazione, fisica e intelligenza artificiale.

    • Geometry shader (vedere Caratteristiche geometry shader)

      • Creazione di istanze: consente al geometry shader di restituire un massimo di 1024 vertici o qualsiasi combinazione di istanze e vertici fino a 1024 (massimo 32 istanze di 32 vertici ciascuno).
    • Pixel shader

      • Copertura come input PS

      • Interpolazione programmabile di input: il pixel shader può valutare gli attributi all'interno del pixel, ovunque nella griglia multisample

      • Il campionamento centroide degli attributi deve rispettare le regole seguenti:

        • Se tutti i campioni nella primitiva vengono coperti, l'attributo viene valutato al centro del pixel indipendentemente dal fatto che il modello di esempio abbia una posizione di esempio al centro del pixel.

        • In caso contrario, l'attributo viene valutato al primo campione coperto, ovvero l'esempio con l'indice più basso tra tutti gli indici di esempio. In questo caso, la copertura del campione viene determinata dopo l'applicazione dell'operazione AND logica alla copertura e allo stato del rasterizzatore di maschera di esempio.

        • Se non vengono coperti campioni (ad esempio sui pixel helper eseguiti dai limiti di una primitiva per compilare indicatori di pixel 2x2), l'attributo viene valutato in uno dei modi seguenti:

          • Se lo stato del rasterizzatore di maschera di esempio è un subset dei campioni nel pixel, il primo campione coperto dallo stato del rasterizzatore di maschera di esempio è il punto di valutazione.
          • In caso contrario, nella condizione completa della maschera di campionamento, il centro pixel è il punto di valutazione.
  • Direct3D 11 espande le trame (vedere Panoramica delle trame) con le funzionalità seguenti

    • Gather4

      • Supporto per trame multi-componente: specificare un canale da cui caricare
      • Supporto per offset programmabili
    • Streaming

      • Morsetti di trama per limitare il precaricamento WDDM
    • Limiti delle trame da 16.000

    • Richiedere 8 bit di subtexel e precisione sub-mip per il filtro delle trame

    • Nuovi formati di compressione delle trame (1 nuovo formato LDR e 1 nuovo formato HDR)

  • Direct3D 11 supporta l'oDepth conservativo: questo algoritmo consente a un pixel shader di confrontare il valore di profondità per pixel del pixel shader con quello nel rasterizzatore. Il risultato consente operazioni di culling approfondite iniziali mantenendo al tempo stesso la possibilità di restituire oDepth da un pixel shader.

  • Direct3D 11 supporta memoria di grandi dimensioni

    • Consenti risorse > da 4 GB
    • Mantenere gli indici delle risorse a 32 bit, ma le risorse più grandi
  • Direct3D 11 supporta miglioramenti dell'output del flusso

    • Output di Stream indirizzabile
    • Aumentare il numero di output di Stream a 4
    • Modificare tutti i buffer di output del flusso in modo che siano multielemento
  • Direct3D 11 supporta il modello shader 5 (vedere Modello shader 5)

    • Double con denorm
    • Istruzioni set di bit di conteggio
    • Trovare l'istruzione first bit set
    • Gestione dei flussi di trasporto/overflow
    • Istruzioni di inversione bit per le FFT
    • Scambio condizionale intrinseco
    • Resinfo sui buffer
    • Reciproca precisione ridotta
    • Istruzioni di conversione shader - fp16 a fp32 e viceversa
    • Buffer strutturato, che è un nuovo tipo di buffer contenente elementi strutturati.
  • Direct3D 11 supporta visualizzazioni di profondità o stencil di sola lettura

    • Disabilita le scritture nella parte che è di sola lettura, consente di usare la trama come input e per l'analisi approfondita
  • Direct3D 11 supporta il disegno indiretto - Direct3D 10 implementa DrawAuto, che accetta contenuto (generato dalla GPU) e lo esegue il rendering (nella GPU). Direct3D 11 generalizza DrawAuto in modo che possa essere chiamato da un Compute Shader usando DrawInstanced e DrawIndexedInstanced.

  • Direct3D 11 supporta funzionalità varie

    • Viste a virgola mobile
    • Blocco mipmap per risorsa
    • Bias profondità: questo algoritmo aggiorna il comportamento della distorsione della profondità usando lo stato del rasterizzatore. Il risultato elimina gli scenari in cui il pregiudizio calcolato potrebbe essere NaN.
    • Limiti delle risorse: gli indici delle risorse devono comunque essere <= 32 bit, ma le risorse possono essere maggiori di 4 GB.
    • Precisione rasterizzatore
    • Requisiti di MSAA
    • Contatori ridotti
    • Formato a 1 bit e filtro di testo rimosso

Funzionalità aggiunte nelle versioni precedenti

Per l'elenco delle funzionalità aggiunte nelle versioni precedenti, vedere gli argomenti seguenti:

Novità di Direct3D 11