Condividi tramite


fase Stream-Output

Lo scopo della fase di output del flusso è l'output continuo (o flusso) dei dati dei vertici dalla fase geometry-shader (o dalla fase del vertex shader se la fase geometry-shader è inattiva) in uno o più buffer in memoria (vedere Introduzione alla fase Stream-Output).

La fase di output del flusso (SO) si trova nella pipeline subito dopo la fase geometry-shader e subito prima della fase di rasterizzazione, come illustrato nel diagramma seguente.

diagramma della posizione della fase di output di flusso nella pipeline

I dati trasmessi alla memoria possono essere letti di nuovo nella pipeline in un passaggio di rendering successivo o possono essere copiati in una risorsa di staging (in modo che possano essere letti dalla CPU). La quantità di dati trasmessi può variare; l'API ID3D11DeviceContext::D rawAuto è progettata per gestire i dati senza la necessità di eseguire query (GPU) sulla quantità di dati scritti.

Quando un triangolo o una striscia di linee è associato alla fase dell'assembler di input, ogni strip viene convertito in un elenco prima che vengano trasmessi. I vertici vengono sempre scritti come primitive complete (ad esempio, 3 vertici alla volta per i triangoli); le primitive incomplete non vengono mai estratte. I tipi primitivi con adiacenza eliminano i dati di adiacenza prima dello streaming dei dati.

Esistono due modi per inserire i dati di output del flusso nella pipeline:

  • I dati di output di flusso possono essere inseriti nuovamente nella fase input-assembler.
  • I dati di output di flusso possono essere letti da shader programmabili usando funzioni di caricamento ( ad esempio Load).

Per usare un buffer come risorsa di output di flusso, creare il buffer con il flag D3D11_BIND_STREAM_OUTPUT. La fase di output del flusso supporta fino a 4 buffer contemporaneamente.

  • Se si esegue lo streaming di dati in più buffer, ogni buffer può acquisire solo un singolo elemento (fino a 4 componenti) di dati per vertice, con uno stride di dati impliciti uguale alla larghezza dell'elemento in ogni buffer (compatibile con il modo in cui i buffer a singolo elemento possono essere associati per l'input in fasi shader). Inoltre, se i buffer hanno dimensioni diverse, la scrittura si interrompe non appena uno dei buffer è pieno.
  • Se si esegue lo streaming di dati in un singolo buffer, il buffer può acquisire fino a 64 componenti scalari di dati per vertice (256 byte o meno) o il vertex stride può essere fino a 2048 byte.

In questa sezione

Argomento Descrizione
Introduzione alla fase di Stream-Output
Questa sezione descrive come usare uno shader geometry con la fase di output del flusso.

pipeline grafica

fasi della pipeline (Direct3D 10)