次の方法で共有


vs_3_0

プログラム可能な頂点シェーダーは、頂点データを処理する一連の命令で構成されます。レジスタは、ALU との間でデータをやり取りします。追加の制御を適用し、命令、結果、または書き出されるデータを変更することができます。

頂点シェーダーのバージョン vs_3_0 では、vs_2_x でサポートされる機能セットが拡張されています。vs_2_X では能力の設定を必要とした各機能が、vs_3_0 では能力を必要とせずに利用できます。

新機能

ここでは、頂点シェーダー バージョン 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 がサポートされている場合、ハードウェアで次のキャップが (最低限) サポートされています。

機能 能力
シェーダー キャップ
  • DynamicFlowControlDepth は 24 です。
  • NumTemps は 32 です
  • StaticFlowControlDepth は 4 です。
  • プレディケーションがサポートされます。
GuardBandLeft、GuardBandTop、GuardBandRight、GuardBandBottom 8K
VertexShaderVersion 3_0
MaxVertexShaderConst 256
MaxVertexShader30InstructionSlots 512
フォグのサポート D3DPRASTERCAPS_FOGVERTEX
VertexTextureFilterCaps
D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 頂点宣言の頂点要素は、同じストリーム オフセットを共有することができます。
頂点フォーマット
  • D3DDECLTYPE_UBYTE4
  • D3DDECLTYPE_UBYTE4N
  • D3DDECLTYPE_SHORT2N
  • D3DDECLTYPE_SHORT4N
  • D3DDECLTYPE_FLOAT16_2
  • D3DDECLTYPE_FLOAT16_4