Microsoft DirectX 8.0 (Visual Basic) |
ピクセル シェーダを実行するプロセッサは、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
ベクトル命令としての内積処理なしに、内積処理をスカラー命令として指定することはできない。