Microsoft DirectX 8.0 (C++)

ピクセル シェーダの命令のペア

ピクセル シェーダを実行するプロセッサは、2 つのパラレル パイプラインを持っている。1 つはベクトル処理 (RGB) 用で、もう 1 つはスカラー処理 (アルファ) 用である。これらのパイプラインをパラレルで使用することにより、必要なクロック サイクルの合計数が削減され、プロセッサの利用効率とパフォーマンスが非常に向上する。これは、基本的にはピクセルの塗りつぶし速度に影響する。

出力マスクによって 2 つのパイプラインの割り当て方法に影響を与えることはできるが、明示的にペア設定の構文が使用されない限り、処理順序は不明確になる。次の表は、出力マスクおよび関連付けられたパイプを示している。

出力マスク パイプ
.a 処理はスカラー パイプにある。
.rgb 処理はベクトル パイプにある。
.rgba 処理はスカラー パイプとベクトル パイプの両方にある。これは既にペアと見なされている。

ペアの 2 番目の命令の先頭には + 記号が付けられている。

  mul r0.rgb, t0, v0    // 色成分は乗算。
+ add r0.a,   t0, v0    // ただし、アルファ成分は加算。

内積の命令は特別なケースである。これらはベクトル処理であり、常にベクトル パイプライン内で実行される。このため、スカラー パイプ内で異なる命令を指定しても、次のピクセル シェーダ コード例のようにペアにすることができる。

dp3 r0.rgb, t0, v0
mul r0.a,   t0, v0

ベクトル命令としての内積処理なしに、内積処理をスカラー命令として指定することはできない。