ps_1_Xの修飾子
命令修飾子は、宛先レジスタに書き込まれる前の命令の結果に影響します。 たとえば、結果を 2 の係数で乗算または除算したり、0 から 1 の間で結果をクランプしたりするには、それらを使用します。 命令修飾子は、命令の実行後、出力先レジスタに結果を書き込む前に適用されます。
修飾子の一覧を次に示します。
修飾子 | 説明 | 構文 | バージョン 1_1 | バージョン 1_2 | バージョン 1_3 | バージョン 1_4 |
---|---|---|---|---|---|---|
_x2 | 2 を掛ける | instruction_x2 | X | X | X | X |
_x4 | 4 を乗算する | instruction_x4 | X | X | X | X |
_x8 | 8 を乗算する | instruction_x8 | X | |||
_d2 | 2 で除算 | instruction_d2 | X | X | X | X |
_d4 | 4 で除算 | instruction_d4 | X | |||
_d8 | 8 で除算 | instruction_d8 | X | |||
_土 | 飽和 (0 および 1 からのクランプ) | instruction_sat | X | X | X | X |
- 乗算修飾子は、読み取られた後、レジスタ データに 2 の累乗を乗算します。 これは左シフトと同じです。
- 除算修飾子は、読み取り後にレジスタ データを 2 の累乗で除算します。 これはシフト右と同じです。
- 飽和修飾子は、レジスタ値の範囲を 0 から 1 にクランプします。
命令修飾子は、算術命令で使用できます。 テクスチャ アドレス命令では使用できません。
乗算修飾子
次の使用例は、コピー先レジスタ (dest) をソース オペランド (src0 と src1) の 2 色の合計で読み込み、結果に 2 を乗算します。
add_x2 dest, src0, src1
この例では、2 つの命令修飾子を結合します。 最初に、ソース オペランド (src0 と src1) に 2 つの色が追加されます。 その後、結果に 2 を乗算し、コンポーネントごとに 0.0 から 1.0 の間でクランプします。 結果は宛先レジスタに保存されます。
add_x2_sat dest, src0, src1
除算修飾子
次の使用例は、コピー先レジスタ (dest) をソース オペランド (src0 と src1) の 2 色の合計で読み込み、結果を 2 で除算します。
add_d2 dest, src0, src1
飽和修飾子
算術命令の場合、飽和修飾子は、この命令の結果をコンポーネントごとに 0.0 から 1.0 の範囲にクランプします。 次の例は、この命令修飾子を使用する方法を示しています。
dp3_sat r0, t0_bx2, v0_bx2 ; t0 is bump, v0 is light direction
この操作は、乗算または除算命令修飾子の後に発生します。 _satは、ドット製品の結果をクランプするために最もよく使用されます。 ただし、フレーム バッファーが常に 0 ~ 1 の範囲にあるマルチパス メソッドと、各ステージで彩度が定義されている DirectX 6 および 7.0 マルチテクスチャ構文の一貫したエミュレーションも可能になります。
次の使用例は、ソース オペランド (src0 と src1) の 2 つの色の合計を含む宛先レジスタ (dest) を読み込み、結果をコンポーネントごとに 0.0 ~ 1.0 の範囲に固定します。
add_sat dest, src0, src1
この例では、2 つの命令修飾子を結合します。 最初に、ソース オペランド (src0 と src1) に 2 つの色が追加されます。 結果は 2 で乗算され、コンポーネントごとに 0.0 から 1.0 の間でクランプされます。 結果は宛先レジスタに保存されます。
add_x2_sat dest, src0, src1
関連トピック