Condividi tramite


Fase dell'output dei flussi

La fase Stream Output (SO) genera costantemente dati dei vertici (o flussi) dalla fase attiva precedente a uno o più buffer in memoria. I dati trasmessi alla memoria possono essere fatti ricircolare nella pipeline come dati di input o readback dalla CPU.

Scopo e usi

diagramma della posizione della fase di output del flusso nella pipeline

La fase di output di flusso trasmette i dati primitivi dalla pipeline alla memoria fino al rasterizzatore. I dati della fase precedente possono essere trasmessi alla memoria e/o passati al rasterizzatore. I dati trasmessi alla memoria possono essere fatti ricircolare nella pipeline come dati di input o readback dalla CPU.

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 gestione temporanea (in modo che possano essere letti dalla CPU). La quantità di dati trasmessi può variare; Direct3D è progettato per gestire i dati senza la necessità di eseguire query (GPU) sulla quantità di dati scritti.>

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

  • I dati di output di flusso possono essere reintrodotti nella fase Input Assembler (IA).
  • I dati di output di flusso possono essere letti da shader programmabili tramite funzioni di Caricamento.

Input

Dati dei vertici di una fase precedente dello shader.

Output

La fase Stream Output (SO) restituisce continuamente (o flussi) i dati dei vertici della precedente fase attiva, ad esempio la fase Geometry Shader (GS), in uno o più buffer in memoria. Se la fase Geometry Shader (GS) è inattiva, la fase Stream Output (SO) emette continuamente i dati dei vertici dalla fase Domain Shader (DS) ai buffer in memoria (o se DS è anche inattivo, dalla fase Vertex Shader (VS).

Quando un triangolo o una striscia di linee è associata alla fase Input Assembler (IA), ciascuna striscia viene convertita in un elenco prima che vengano tutte riprodotte in streaming. 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 di inviare i dati in streaming.

La fase di output del flusso supporta fino a 4 buffer contemporaneamente.

  • Se si esegue lo streaming di dati in più buffer, ciascun 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.

Pipeline grafica