共用方式為


如何:編制多個輸出數據流的索引

在著色器模型 5 中,幾何著色器最多可以支援 4 個不同的數據流。 這表示單一著色器可以根據所宣告的數據流數目,在一到四個輸出數據流之間輸出。

索引多個輸出數據流

  1. 使用數據流範本類型定義數據流。

        inout PointStream<OutVertex1> myStream1, 
    
  2. 使用數據流範本類型定義第二個數據流。

        inout PointStream<OutVertex2> myStream2 )
    
  3. 使用流輸出物件的內建函式(例如使用 Append 或 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 );
    }
    

使用單一輸出流時,您可以發出三角形帶、直線帶或點清單。 當您將三角帶和線帶儲存在數據流輸出緩衝區中時,它們將分別展開為三角形和線條清單。 您也可以將一個數據流點陣化,而不是將它傳送至記憶體緩衝區。

使用多個輸出數據流時,所有數據流都必須包含點,且最多可以傳送一個輸出數據流給光柵化器。 更常見的是,應用程式不會點陣化任何數據流。

將數據串流至緩衝區之後,您可以使用該數據來轉譯任何基本類型,而不只是用來填滿緩衝區的基本類型。

幾何著色器的總輸出限制為1024個純量。 當有多個數據流存在時,會從最大的數據流類型計算純量數目乘以頂點計數上限。

著色器模型 4 和著色器模型 5 之間的差異:
著色器模型 4:

  • 數據流輸出的純量數目上限為 64。
  • 每個元件暫存器遮罩必須在整個索引範圍內一致。
著色器模型 5:
  • 數據流輸出的純量數目上限為 128。
  • 每個元件的暫存器遮罩不需要在索引範圍之間一致。
  • 輸出的動態索引在所有數據流中都必須合法。
  • 插補模式不需要比對數據流。

幾何著色器功能