レジスタ - vs_3_0
レジスタ - vs_3_0
このバージョンでは、1 つのレジスタが追加して導入された。ここでは、頂点シェーダ バージョン 3_0 が実装する入力レジスタと出力レジスタに関するリファレンス情報を記載する。
入力レジスタ
名前 | レジスタ タイプ | カウント | データ タイプ | ディメンジョン | I/O 許可 | 読み取りポート | 読み取り/命令専用 | 相対アドレス | デフォルト | DCL の要 / 不要 |
---|---|---|---|---|---|---|---|---|---|---|
v# | 入力レジスタ | 16 | 浮動小数点 | 4D ベクトル | 読み取り専用 | 1 | 3 | なし | Partial(0001) | 要 |
r# | テンポラリ レジスタ | 12 (1) | 浮動小数点 | 4D ベクトル | 読み書き可能 | 3 | 3 | なし | なし | 不要 |
c# | 浮動小数点型定数レジスタ | 256 (2) | 浮動小数点 | 4D ベクトル | 定義/読み取り専用 | 1 | 2 | a0 / aL | (0, 0, 0, 0) | 不要 |
i# | 整数型定数レジスタ | 16 | 整数 | 4D ベクトル | 定義/使用専用 | 1 | 1 | なし | (0, 0, 0, 0) | 不要 |
b# | ブール型定数レジスタ | 16 | ブール値 | スカラー | 定義/使用専用 | 1 | 1 | なし | FALSE | 不要 |
a0 | アドレス レジスタ | 1 | 整数 | 4D ベクトル | 書き込み/使用専用 | 1 | 2 | なし | なし | 不要 |
aL | ループ カウンタ レジスタ | 1 | 整数 | スカラー | 使用専用 | 1 | 2 | なし | なし | 不要 |
p0 | プレディケーション | 1 | ブール値 | 4D ベクトル | 書き込み/使用専用 | 1 | 1 | なし | なし | 不要 |
s# | サンプラ レジスタ | 4 | R | 1 | 1 | 1 | いいえ | なし | あり | 要 |
ここで
r は読み取り、w は書き込み、u は使用をそれぞれ表す。
partial(x, y, z, w) - チャンネルのサブセットだけがレジスタ内で更新された場合、残りのチャンネルはデフォルトで指定された値 (x, y, z, w) に設定される。
読み取りポート数は、1 つの命令で読み取ることができる、(各レジスタ タイプごとの) 異なるレジスタの数である。たとえば、定数レジスタの読み取りポートが 2 の場合、それらのポートは 2 以下の一意定数レジスタしか使わないので、そのすべてが有効である。
mad r0, c0, c0, c1 mad r0, c2, t1, c1 mad r0, c3, c3, c3
しかし、次の例は、複数の一意定数レジスタを使っているために無効である。
mad r0, c1, c2, c3
(1) - 12 は、vs_2_x で必要な最小 r# レジスタ カウントである。D3DCAPS9.VS20Caps.NumTemps 能力には、デバイスでサポートされる実際の r# レジスタ カウントが含まれる。「D3DCAPS9」を参照すること。
(2) - 256 は、vs_2_x で必要な最小 c# レジスタ カウントである。MaxVertexShaderConst 能力には、デバイスでサポートされる実際の c# レジスタ カウントが含まれる。「D3DCAPS9」を参照すること。
レジスタのデフォルト値
初期化されないアドレスまたはテンポラリ レジスタの使用は推奨しない。その他のデフォルト値は、上の表に示したとおりである。
出力レジスタ
出力レジスタは、12 個の o# (出力) レジスタにまとめらている。これらのレジスタは、ユーザーによる任意のピクセル シェーダの補間に使える。たとえば、座標、色、フォグなどである。
レジスタ タイプ | カウント | 読み取り / 書き込み | 読み取りポート数 | 1 命令あたりの読み取り数 | ディメンジョン | 相対アドレス | デフォルト | DCL の要 / 不要 | 新規 |
---|---|---|---|---|---|---|---|---|---|
出力レジスタ - on | 12 | W | 不適用 | 不適用 | 4 | aL のみ | なし | 要 | はい |
出力宣言が導入され、それによってセマンティクスが各レジスタに割り当てられる。古い oPos および oPts は、位置または pointsize セマンティクスと共にレジスタを宣言することで置き換えられる。詳細については、以下で説明する。
- 12 個の出力レジスタの 1 つの 4 つすべての成分は、位置レジスタとして宣言しなければならない (たとえば、dcl_position0 v#)。
- 他の 10 個のレジスタも、4 成分のレジスタ (xyzw) である。残りのレジスタは、スカラー pointsize データを保持できる (たとえば、dcl_psize o#)。
出力レジスタを宣言する例については、「dcl_usage」を参照すること。
レジスタのインデックス化の拡張
以前のシェーダ モデルでは、定数レジスタ バンクのみをインデックス化できた。このモデルでは、ループ カウンタ レジスタ (aL) を使って次のレジスタ バンクをインデックス化できる。
- 入力レジスタ (vn)
- 出力レジスタ (on)