Condividi tramite


Pipeline e shader con Direct3D 12

La pipeline programmabile Direct3D 12 aumenta significativamente le prestazioni di rendering rispetto alle interfacce di programmazione grafica di generazione precedenti.

Pipeline grafica Direct3D 12

Il diagramma seguente illustra la pipeline grafica e lo stato di Direct3D 12.

diagramma che illustra la pipeline e lo stato direct3d 12

Una pipeline grafica è il flusso sequenziale di input e output dei dati durante il rendering dei fotogrammi da parte della GPU. Dato lo stato e gli input della pipeline, la GPU esegue una serie di operazioni per creare le immagini risultanti. Una pipeline grafica contiene shader, che eseguono effetti di rendering programmabili e calcoli e operazioni di funzione fissa.

Quando si fa riferimento al diagramma dello stato della pipeline, tenere presente quanto segue:

  • Le tabelle e gli heap del descrittore possono essere disposti in modo arbitrario: è possibile fare riferimento a SRV, CBV e UAV in qualsiasi ordine.
  • Alcune operazioni della pipeline sono configurabili. Ad esempio, la fusione di output funziona in genere su base di lettura-modifica-scrittura con le visualizzazioni di destinazione di rendering e stencil profondità. Tuttavia, è possibile configurare la pipeline in modo che una di queste viste sia di sola lettura o di sola scrittura.
  • Gli esempi statici non fanno parte degli argomenti radice perché sono statici.

Oggetti di stato della pipeline

Direct3D 12 introduce l'oggetto stato della pipeline (PSO). Anziché archiviare e rappresentare lo stato della pipeline in un numero elevato di oggetti di alto livello, gli stati dei componenti della pipeline, ad esempio l'assembler di input, il rasterizzatore, il pixel shader e la fusione di output vengono archiviati in un pso. Un PSO è un oggetto stato della pipeline unificato non modificabile dopo la creazione. Il PSO attualmente selezionato può essere modificato rapidamente e dinamicamente e l'hardware e i driver possono convertire direttamente un PSO in istruzioni e stato hardware nativo, pronto per l'elaborazione grafica. Per applicare un PSO, l'hardware copia una quantità minima di stato pre-calcolato direttamente nei registri hardware. In questo modo viene rimosso il sovraccarico causato dal driver grafico che ricompila continuamente lo stato hardware in base a tutte le impostazioni di rendering e pipeline attualmente applicabili. Il risultato è notevolmente ridotto il sovraccarico delle chiamate di disegno, prestazioni migliorate e più chiamate di disegno per fotogramma.

L'oggetto PSO attualmente applicato definisce e connette tutti gli shader usati nella pipeline di rendering. microsoft High Level Shader Language (HLSL) viene precompilato in oggetti shader, che vengono quindi usati in fase di esecuzione come input per gli oggetti di stato della pipeline. Per altre informazioni sulle funzioni PSO all'interno della pipeline grafica, vedere Gestione dello stato della pipeline grafica in Direct3D 12.

Pipeline di calcolo Direct3D 12

Il diagramma seguente illustra la pipeline di calcolo e lo stato di Direct3D 12.

Diagramma che mostra la pipeline di calcolo Direct3D 12.

In questa pipeline non sono presenti unità di funzione fisse, ma gli heap del descrittore, gli heap sampler e gli esempi statici sono ancora disponibili nel calcolo.

invio di lavoro in Direct3D 12