次の方法で共有


命令 - ps_2_x

命令 - ps_2_x

ここでは、ピクセル シェーダ バージョン 2_x 命令のリファレンス情報を記述する。

次の表に示すように、ピクセル シェーダ命令にはいくつかの種類がある。右側の列の意味は次のとおりである。

  • 命令スロット - 各命令が使う命令スロットの数。
  • セットアップ - ピクセル シェーダには、バージョン命令を 1 つ指定する必要がある。 また、その命令は最初の命令でなければならない。
  • 算術 - これらの命令は、シェーダ内での算術演算を行う。
  • マクロ演算子 - これらの命令は、算術命令を結合して高レベルの機能を実現する。マクロ演算子の使用はオプションである。基本となる実装に最適化の機会を与えるので、マクロ演算子、特に行列乗算命令 (m3x2、m3x3、m3x4、m4x3、m4x4) の使用を推奨する。
  • テクスチャ - これらの命令は、テクスチャ データをロードおよびサンプリングするためと、テクスチャ座標を修飾するために使う。
  • フロー制御 - これらの命令は命令の実行に対して静的および動的なフロー制御を提供する。
  • 新規 - これらの命令はこのバージョンの新機能である。

命令セット

名前 説明 命令スロット セットアップ 算術 マクロ演算子 テクスチャ フロー制御 新規
abs 絶対値 1 x
add 2 つのベクトルの加算 1 x
break loop...endloop または rep...endrep ブロックを終了する 1 x x
break_comp 比較の条件に基づいて、loop...endloop または rep...endrep ブロックを終了する 3 x x
break pred プレディケーションに基づいて、loop...endloop または rep...endrep ブロックを終了する 3 x x
call サブルーチンを呼び出す 2 x x
callnz ブール型レジスタがゼロでない場合にサブルーチンを呼び出す 3 x x
callnz pred プレディケーションがゼロでない場合にサブルーチンを呼び出す 3 x x
cmp 入力を 0 と比較する 1 x
crs 外積 2 x
dcl 頂点要素のタイプを入力頂点レジスタにマッピングする 0 x
dcl_textureType サンプラのテクスチャのディメンジョンを宣言する 0 x
def 定数の定義 0 x
dp2add 2D の内積および加算 1 x
dp3 3D の内積 1 x
dp4 4D の内積 1 x
dsx x 方向の変化割合 2 x x
dsy y 方向の変化割合 2 x x
else else ブロックの開始 1 x x
endif if...else ブロックの終了 1 x x
endrep repeat ブロックの終了 2 x x
exp 完全精度の 2x 1 x x
frc 小数部 1 x
if if ブロックの開始 3 x x
if comp 比較に基づいて、if ブロックを開始する 3 x x
if pred プレディケーションに基づいて、if ブロックを開始する 3 x x
label ラベルを付ける 0 x x
log 完全精度の log2(x) 1 x
lrp 線形補間 2 x
m3x2 3x2 行列乗算 2 x
m3x3 3x3 行列乗算 3 x
m3x4 3x4 行列乗算 4 x
m4x3 4x3 行列乗算 3 x
m4x4 4x4 行列乗算 4 x
mad 積和 1 x
max 最大値 1 x
min 最小値 1 x
mov 移動 1 x
mul 乗算 1 x
nop 空命令 (何の演算も実行しない) 1 x
nrm 正規化 3 x
pow 2x 3 x
ps バージョン 0 x
rcp 逆数 1 x
rep 繰り返す 3 x x
ret サブルーチンの終了 1 x x
rsq 逆数平方根 1 x
setp プレディケーション レジスタを設定する 1 x x
sincos 正弦と余弦 8 x
sub 減算 1 x
texkill ピクセル レンダリングを終了させる 2(tex) x
texld テクスチャのサンプリング 1 + 3CUBE x
texldb w 成分の詳細レベル (LOD) のバイアスを使ったテクスチャ サンプリング 6(tex) x
texldd ユーザー指定のグラデーションを使ったテクスチャ サンプリング 3 x x
texldp w 成分による射影除算を使ったテクスチャ サンプリング 3 + 1CUBE x

ここで

  • tex - 1 テクスチャ命令スロットである。ただし、D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT が設定されている場合、この命令は、命令 (非テクスチャ) カウントでカウントされる。
  • 1 + 3CUBE は、テクスチャがキューブ マップの場合に 1 + 3 であることを意味する。
  • 3 + 1CUBE は、テクスチャがキューブ マップの場合に 3 + 1 であることを意味する。

命令カウントとネストの深さ

シェーダには、最大命令カウントと、静的および動的なフロー制御命令のネストの深さに関する制限がある。

全命令カウント

総命令スロット数 :最大 512 個

実行される命令の最大数は、D3DCAPS9 の MaxPShaderInstructionsExecuted 能力に指定されている数である。

  • ps_2_0 をサポートするハードウェアでは、少なくとも 96 (フロー制御能力をサポートしている場合は 96 以上) でなければならない。

この数には、#define D3DINFINITEINSTRUCTIONS を設定できる。これは、実行される命令の実際の数が無制限であることを示す。

実行される命令の総数は、デバイス ドライバ D3DRS_MAXPIXELSHADERINST に制限されなければならない。このレンダリング ステートで有効な値は、2 の累乗の数である。それ以外の整数を設定すると、次の最も近い 2 の累乗の数と見なされる。このレンダリング ステートにはデフォルトで、D3DINFINITEINSTRUCTIONS が設定される。

動的フロー制御のネストの深さ

D3DCAPS9.D3DPSHADERCAPS2_0.DynamicFlowControlDepth は、動的フロー制御命令 ifbreak、および break_comp のネストの深さを表す。この値は、if_comp ブロックのネストの深さと等しい。この能力の値の範囲は 0 ~ 24 である。この能力が 0 の場合、デバイスは動的フロー制御命令をサポートしない。

静的フロー制御のネストの深さ

D3DCAPS9.D3DPSHADERCAPS2_0.StaticFlowControlDepth は、静的フロー制御命令loop/rep および call/callnz のネストの深さを表す。この能力の値の範囲は、1 ~ 4 である。loop/rep は同じネストの深さに対してカウントし、call/callnz は同じネストの深さに対してカウントする。この能力が 0 の場合、デバイスは静的フロー制御命令をサポートしない。