vs_3_0
プログラム可能な頂点シェーダーは、頂点データを処理する一連の命令で構成されます。レジスタは、ALU との間でデータをやり取りします。追加の制御を適用し、命令、結果、または書き出されるデータを変更することができます。
頂点シェーダーのバージョン vs_3_0 では、vs_2_x でサポートされる機能セットが拡張されています。vs_2_X では能力の設定を必要とした各機能が、vs_3_0 では能力を必要とせずに利用できます。
- 「命令 - vs_3_0」には、利用できる命令の一覧が記載されています。
- 「レジスタ - vs_3_0」では、頂点シェーダー ALU が使用する各種のレジスタの一覧を示します。
- 「頂点シェーダー レジスタの修飾子」は、命令の動作方法を変更するために使用します。
- 「頂点シェーダー ソース レジスタの修飾子」は、命令の実行前にソース レジスタのデータを変更します。
- 「ソース レジスタのスィズル」を使用すると、読み取り、コピー、または書き込みを行うレジスタ要素をより詳細に制御することができます。
- 「デスティネーション レジスタのマスキング」では、デスティネーション レジスタのどの要素に書き込むかを指定します。
新機能
ここでは、頂点シェーダー バージョン vs_3_0 の新機能の一覧を示します。
レジスターのインデックス
以前のシェーダー モデルでは、定数レジスター バンクにのみインデックスを付けることができました。このモデルでは、ループ カウンター レジスター (aL) を使って、次のレジスター バンクにインデックスを付けることができます。
- 入力レジスター (v#)
- 出力レジスター (o#)
頂点テクスチャー
このシェーダー モデルでは、texldl を使った頂点シェーダーのテクスチャー ルックアップがサポートされています。頂点エンジンには (ピクセル エンジンのディスプレースメント マップ サンプラおよびテクスチャー サンプラとは別の) 4 つのテクスチャー サンプラ ステージがあり、それらのステージで設定されるテクスチャーのサンプリングに使用できます。「vs_3_0 の頂点テクスチャー (DirectX HLSL)」を参照してください。
頂点ストリームの頻度
この機能を利用すると、入力レジスターのサブセットを、頂点ごとに 1 回とは異なる割合で初期化できます。「インデックスなしのジオメトリの描画」を参照してください。
シェーダーの出力
vs_2_0 と同様に、シェーダーの出力は静的フロー制御によって変化することがあります。動的な分岐には注意してください。分岐によってシェーダーの出力が頂点ごとに変化する場合があります。これにより、異なるハードウェアでは予想外の結果が生じます。
動的フロー制御
すべての動的フロー制御命令がサポートされています。使用できるネストの深さの最大値は 24 です (詳細については「フロー制御のネスト制限」を参照してください)。
テンポラリー レジスタ
合計 32 個のテンポラリ レジスター (r#) がサポートされています。
静的フロー制御
loop - vs/rep - vs のネストの最大深度は 4 です。call - vs/callnz bool - vs/callnz pred - vs のネストの最大深度は 4 です。if bool - vs の場合、使用できるネストの深さの最大値は 24 です (詳細については「フロー制御のネスト制限を参照してください)。
プレディケーション
命令のプレディケーションがサポートされます。プレディケーション レジスタを設定するには setp_comp - vs を使います。
命令カウント
各頂点シェーダでは 512 個から、D3DCAPS9 の MaxVertexShader30InstructionSlots で指定された数までのスロットを使用できます。loop/rep がサポートされているために、実行される命令の数ははるかに多くなる場合があります。ただし、この数の上限は D3DCAPS9 の MaxVShaderInstructionsExecuted で設定されます。この値は、少なくとも 0xFFFF にする必要があります。
デバイスの機能
頂点シェーダー 3_0 がサポートされている場合、ハードウェアで次のキャップが (最低限) サポートされています。
機能 | 能力 |
---|---|
シェーダー キャップ |
|
GuardBandLeft、GuardBandTop、GuardBandRight、GuardBandBottom | 8K |
VertexShaderVersion | 3_0 |
MaxVertexShaderConst | 256 |
MaxVertexShader30InstructionSlots | 512 |
フォグのサポート | D3DPRASTERCAPS_FOGVERTEX |
VertexTextureFilterCaps |
|
D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET | 頂点宣言の頂点要素は、同じストリーム オフセットを共有することができます。 |
頂点フォーマット |
|