Condividi tramite


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

Un compute shader è 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 di 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 compute shader è 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 applicazioni di massa che eseguono calcoli a velocità interattive, quando il costo della transizione tra l'API (e lo stack 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 ai record di input (ad esempio un vertex shader) o ai record di output (come lo fa il pixel shader). Alcune funzionalità dello shader di grafica sono supportate, ma altre sono state rimosse in modo che possano essere aggiunte nuove funzionalità specifiche del compute shader.

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 Compute Shader Overview (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 shader. Questo diventa ancora più difficile 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 usato uno dei due approcci generali. Hanno creato 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 creano singoli shader per ogni flusso di geometria, tipo di materiale o combinazione di tipi di luce necessari.

Questi shader di grandi dimensioni per utilizzo generico gestiscono questa sfida ricompilando lo stesso shader con definizioni di preprocessore diverse e quest'ultimo metodo usa la potenza dello sviluppatore 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 di shader diverse 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 in fase di esecuzione 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: 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 in 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 su 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 viene liberato per inviare i buffer dei comandi all'hardware.

Per altre informazioni, vedere multithreading.

Tessellazione

La tassellatura può essere usata per eseguire il rendering di un singolo modello con diversi livelli di dettaglio. Questo approccio genera un modello più accurato geometricamente che dipende dal livello di dettaglio richiesto per una scena. Usare la tassellatura in una scena in cui il livello di dettaglio consente un modello geometrico inferiore, riducendo la domanda sulla 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 di tessellazione.

Elenco completo delle funzionalità

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

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

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

    • Hull Shader
    • Domain Shader
  • Direct3D 11 supporta il multithreading (vedere multithreading)

    • Risorsa multithread/shader/creazione di oggetti
    • 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 Compute Shader Overview) - Uno shader che accelera i calcoli dividendo lo spazio dei problemi tra diversi thread software o gruppi di thread e la condivisione dei 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 Geometry Shader Features)

      • 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 centroid degli attributi deve rispettare le regole seguenti:

        • Se vengono coperti tutti i campioni nella primitiva, l'attributo viene valutato al centro dei 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 questa situazione, 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 2x2 pixel), l'attributo viene valutato in uno dei modi seguenti:

          • Se lo stato del rasterizzatore sample-mask è un subset dei campioni nel pixel, il primo campione coperto dallo stato del rasterizzatore della maschera di esempio è il punto di valutazione.
          • In caso contrario, nella condizione di maschera di campione completa, 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

      • Bloccanti 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 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 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 > 4 GB
    • Mantenere gli indici delle risorse a 32 bit, ma le risorse sono maggiori
  • Direct3D 11 supporta i 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 di shader 5 (vedere modello di shader 5)

    • Raddoppia con denorm
    • Istruzione count bits set
    • Trovare l'istruzione first bit set
    • Gestione di trasporto/overflow
    • Istruzioni di inversione dei bit per le reti FFT
    • Intrinseco scambio condizionale
    • Resinfo su buffer
    • Reciproco con precisione ridotta
    • Istruzioni di conversione shader - fp16 a fp32 e viceversa
    • Buffer strutturato, ovvero 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 ancora <= 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