Funzionalità direct3D 11

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

Compute Shader

Un 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 programmabili (ad esempio vertice, pixel, geometria) nel modo in cui accede agli input e agli output. La tecnologia compute shader è nota anche come tecnologia DirectCompute. Un 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 shader.

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

Uno shader di calcolo ha un proprio set di stati. Un shader di calcolo non ha necessariamente un mapping 1-1 forzato a record di input (come un vertex shader) o i record di output (come lo shader pixel). Alcune funzionalità dello shader grafico 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 shader, offrendo l'opportunità di ottimizzare il codice shader. Ciò diventa una sfida ancora più grande perché shader deve supportare un'ampia gamma di materiali diversi in una scena di rendering tra varie configurazioni hardware. Per risolvere questa sfida, gli sviluppatori di shader hanno spesso fatto ricorso a uno dei due approcci generali. Hanno creato uno shader di grandi dimensioni, per utilizzo generico che può essere usato da un'ampia gamma di elementi della scena, che scambiano alcune prestazioni per flessibilità o creano singoli shader per ogni flusso geometry, tipo di materiale o combinazione di tipi di luce necessari.

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

Il modello Direct3D 11 e shader 5 introduce costrutti di linguaggio orientati agli oggetti e fornisce il supporto di runtime del collegamento di 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 multithreading per abilitare l'interazione efficiente tra più thread CPU e le API grafiche D3D11.

Direct3D 11 abilita la funzionalità seguente per supportare il multithreading:

  • Gli oggetti simultanei vengono ora creati in thread separati: la creazione di funzioni di 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 su un thread durante il rendering su 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 consentono 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 i buffer dei comandi all'hardware.

Per altre informazioni, vedere MultiThreading .

Suddivisione a mosaico

La tessellazione può essere usata per eseguire il rendering di un singolo modello con diversi livelli di dettaglio. Questo approccio genera un modello più geometrico accurato che dipende dal livello di dettaglio richiesto per una scena. Usare la tessellazione in una scena in cui il livello di dettaglio consente un modello geometry inferiore, che riduce la domanda sulla larghezza di banda di memoria utilizzata durante il rendering.

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

Per informazioni sull'implementazione della tessellazione nella pipeline grafica, vedere Panoramica di Tessellation.

Elenco completo delle funzionalità

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

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

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

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

    • Creazione di risorse multithread/shader/oggetto
    • Creazione dell'elenco di visualizzazione multithreaded
  • Direct3D 11 espande gli shader con le funzionalità seguenti (vedere Shader Model 5)

    • Risorse indirizzabili : trame, buffer costanti e campioni

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

    • Subroutine

    • Compute shader (vedere Panoramica di Compute Shader): uno shader che accelera i calcoli suddividendo lo spazio dei problemi 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 significativamente includono post-elaborazione, animazione, fisica e intelligenza artificiale.

    • Geometry shader (vedere Funzionalità geometry shader)

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

      • Copertura come input PS

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

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

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

        • In caso contrario, l'attributo viene valutato al primo esempio coperto, ovvero l'esempio con l'indice più basso tra tutti gli indici di esempio. In questa situazione, la copertura di esempio viene determinata dopo aver applicato l'operazione AND logica alla copertura e allo stato rasterizer della maschera di esempio.

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

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

    • Raccolta4

      • Supporto per trame a più componenti: specificare un canale da cui caricare
      • Supporto per gli offset programmabili
    • Streaming

      • Morsetti di trama per limitare il preload WDDM
    • Limiti di trama 16K

    • Richiedere precisione a 8 bit di subtexel e sub-mip sul filtro della trama

    • Nuovi formati di compressione trama (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 rasterizer. Il risultato consente operazioni di analisi approfondite iniziali mantenendo la possibilità di restituire oDepth da un pixel shader.

  • Direct3D 11 supporta memoria di grandi dimensioni

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

    • Output di flusso indirizzabile
    • Aumentare il numero di output di flusso a 4
    • Modificare tutti i buffer di output del flusso in modo che siano multi-elemento
  • Direct3D 11 supporta Shader Model 5 (vedere Shader Model 5)

    • Doppie con denorms
    • Istruzioni set di bit di conteggio
    • Trovare la prima istruzione del set di bit
    • Gestione di trasporto/overflow
    • Istruzioni di inversione dei bit per le FFT
    • Intrinseco scambio condizionale
    • Resina su buffer
    • Reciproco con precisione ridotta
    • Istruzioni di conversione shader - da fp16 a fp32 e viceversa
    • Buffer strutturato, che è un nuovo tipo di buffer contenente elementi strutturati.
  • Direct3D 11 supporta visualizzazioni depth o stencil di sola lettura

    • Disabilita le scritture nella parte di sola lettura, consente l'uso della trama come input e per l'analisi approfondita
  • Direct3D 11 supporta il disegno indiretto: Direct3D 10 implementa DrawAuto, che accetta il contenuto (generato dalla GPU) ed 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 varie funzionalità

    • Viewport a virgola mobile
    • Blocco mipmap per risorsa
    • Distorsione profondità: questo algoritmo aggiorna il comportamento della distorsione della profondità usando lo stato del rasterizzatore. Il risultato elimina gli scenari in cui la distorsione calcolata potrebbe essere NaN.
    • Limiti delle risorse: gli indici delle risorse devono essere <= 32 bit, ma le risorse possono essere maggiori di 4 GB.
    • Precisione rasterizzatore
    • Requisiti dell'account del servizio gestito
    • 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