Condividi tramite


Procedura: Indicizzare più flussi di output

Nel modello shader 5 un shader geometry può supportare fino a 4 flussi separati. Ciò significa che un singolo shader può restituire tra uno e quattro flussi di output, a seconda del numero di flussi dichiarati.

Per indicizzare più flussi di output

  1. Definire un flusso di dati usando un tipo di modello di flusso.

        inout PointStream<OutVertex1> myStream1, 
    
  2. Definire un secondo flusso di dati usando un tipo di modello di flusso.

        inout PointStream<OutVertex2> myStream2 )
    
  3. Eseguire l'output dei dati in flussi (o entrambi) usando le funzioni intrinseche dell'oggetto di output di flusso, ad esempio Append o RestartStrip.

    void MyGS( 
        InVertex verts[2], 
        inout PointStream<OutVertex1> myStream1, 
        inout PointStream<OutVertex2> myStream2 )
    {
        OutVertex1 myVert1 = TransformVertex1( verts[0] );
        OutVertex2 myVert2 = TransformVertex2( verts[1] );
        myStream1.Append( myVert1 );
        myStream2.Append( myVert2 );
    }
    

Quando si usa un singolo flusso di output, è possibile generare strip triangoli, strip di linee o elenchi di punti. Quando si archiviano i triangoli e le strisce di riga nel buffer di uscita del flusso, vengono espanse rispettivamente in triangolo e elenchi di righe. È anche possibile rasterizzare un flusso e non inviarlo a un buffer di memoria.

Quando si usano più flussi di output, tutti i flussi devono contenere punti e fino a un flusso di output può essere inviato al rasterizer. Più comunemente, un'applicazione non rasterizzerà alcun flusso.

Dopo aver trasmesso i dati a un buffer, è possibile usare tali dati per eseguire il rendering di qualsiasi tipo primitivo, non solo il tipo primitivo usato per riempire il buffer.

L'output totale del geometry shader è limitato a 1024 scalari. Quando esistono più flussi, il numero di scalari viene calcolato dal tipo di flusso più grande moltiplicato per il numero massimo di vertici.

Differenze tra il modello shader 4 e il modello shader 5:
Modello shader 4:

  • Il numero massimo di scalari per l'output del flusso è 64.
  • La maschera di registrazione per componente deve corrispondere all'intervallo di indici.
Modello shader 5:
  • Il numero massimo di scalari per l'output del flusso è 128.
  • La maschera di registrazione per componente non deve corrispondere all'intervallo di indici.
  • L'indicizzazione dinamica degli output deve essere legale in tutti i flussi.
  • Le modalità di interpolazione non devono corrispondere ai flussi.

Funzionalità geometry shader