Share via


方法: 複数の出力ストリームのインデックスを作成する

シェーダー モデル 5 では、ジオメトリ シェーダーは最大 4 つの個別ストリームをサポートできます。 つまり、宣言されたストリームの数に応じて、1 つのシェーダーで 1 つの出力ストリームと 4 つの出力ストリームの間で出力できます。

複数の出力ストリームのインデックスを作成するには

  1. ストリーム テンプレートの種類を使用してデータ ストリームを定義します。

        inout PointStream<OutVertex1> myStream1, 
    
  2. ストリーム テンプレートの種類を使用して、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 );
    }
    

1 つの出力ストリームを使用する場合は、三角形のストリップ、ライン ストリップ、またはポイント リストを出力できます。 三角形と線のストリップをストリーム 出力バッファーに格納すると、それぞれ三角形と線の一覧に展開されます。 また、1 つのストリームをラスター化して、メモリ バッファーに送信しないようにすることもできます。

複数の出力ストリームを使用する場合、すべてのストリームにポイントが含まれている必要があり、最大 1 つの出力ストリームをラスタライザーに送信できます。 より一般的には、アプリケーションはストリームをラスター化しません。

データをバッファーにストリーミングした後、そのデータを使用して、バッファーの塗りつぶしに使用したプリミティブ型だけでなく、任意のプリミティブ型をレンダリングできます。

ジオメトリ シェーダーの合計出力は 1024 スカラーに制限されています。 複数のストリームが存在する場合、スカラーの数は、最大のストリーム の種類に最大頂点数を乗算して計算されます。

シェーダー モデル 4 とシェーダー モデル 5 の違い:
シェーダー モデル 4:

  • ストリーム出力のスカラーの最大数は 64 です。
  • コンポーネントごとのレジスタ マスクは、インデックス範囲全体で一致する必要があります。
シェーダー モデル 5:
  • ストリーム出力のスカラーの最大数は 128 です。
  • コンポーネントごとのレジスタ マスクは、インデックス範囲全体で一致する必要はありません。
  • 出力の動的インデックス作成は、すべてのストリームで有効である必要があります。
  • 補間モードは、ストリームに一致する必要はありません。

ジオメトリ シェーダーの機能