Condividi tramite


fase Stream-Output

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

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

diagramma della posizione della fase di output del flusso nella pipeline

I dati trasmessi alla memoria possono essere letti di nuovo nella pipeline in un passaggio di rendering successivo oppure possono essere copiati in una risorsa di gestione temporanea( in modo che possa essere letto 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 triangoli); le primitive incomplete non vengono mai trasmessi. I tipi primitivi con ajacency ignorano i dati di adjacency prima di trasmettere i dati.

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

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

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

  • Se si esegue lo streaming di dati in più buffer, ogni buffer può acquisire 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 di elementi singoli possono essere associati per l'input nelle fasi shader). Inoltre, se i buffer hanno dimensioni diverse, la scrittura si arresta non appena uno dei buffer è pieno.
  • Se si stanno trasmettendo 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.

Contenuto della sezione

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

Pipeline grafica

Fasi della pipeline (Direct3D 10)