Microsoft DirectX 8.0 (C++)

命令修飾子

Direct3DX ピクセル シェーダ アセンブラは、シフト/スケーリング修正子フラグ、および生成される出力結果に影響する彩度修正子フラグをサポートしている。命令修飾子は、次の順序で命令処理と結び付く。

  1. 補数を実行する。
  2. バイアスを適用する。
  3. 結果にスケーリングを適用する。
  4. クランプを実行する。

シフト/スケーリング修飾子を使うと、結果の大きさをある範囲内で変更できる。

名前 修飾子
_x2 2 で乗算した結果
_x4 4 で乗算した結果
_d2 2 で除算した結果

さらに、色およびアルファ ブレンディング命令と、テクスチャ アドレッシング命令の両方で使用するために、彩度修飾子 (_sat) が用意されている。

色およびアルファ ブレンディング命令の場合、彩度修飾子は、この命令の結果を各成分について 0.0 〜 1.0 の範囲にクランプする。次の例は、この修飾子の使い方を示している。

dp3_sat r0, t0_bx2, v0_bx2    ; t0 はバンブ、v0 はライト方向

この処理は、スケーリング命令修飾子の後で実行される。これは、通常、内積の結果をクランプするために使用される。ただし、フレーム バッファが常に 0 〜 1 の範囲にあるマルチパス メソッドと、彩度が各ステージで行われるように定義されている Microsoft® DirectX 6.0 および 7.0 のマルチテクスチャ構文で、一貫性のあるエミュレーションを実行できる。

テクスチャ アドレッシング命令の場合、彩度修飾子を処理に追加し、終了時の処理の結果を 0.0 〜 1.0 の色の範囲にクランプするように指定できる。これは、一般的に、ライティング処理で使用する必要がある。次の例は、この修飾子の使い方を示している。

ps.1.0                       ; DirectX8 バージョン
tex t0                       ; テクスチャ カラーを読み込む
dp3_sat t1, t0_bx2, v0_bx2   ; テクスチャ座標とクランプで内積を計算

次の add 命令は、ソース オペランド (s0 と s1) の 2 つの色を加えたものをデスティネーション レジスタ (d) にロードし、結果に 2 を掛けている。

add_x2   d, s0, s1

次の add 命令は、ソース オペランド (s0 と s1) の 2 つの色を加えたものをデスティネーション レジスタ (d) にロードし、結果を各成分について 0.0 〜 1.0 の範囲にクランプしている。

add_sat   d, s0, s1

次の add 命令は、ソース オペランド (s0 と s1) の 2 つの色を加えたものをデスティネーション レジスタ (d) にロードし、結果を 2 倍してから、各成分について結果を 0.0 〜 1.0 の範囲にクランプしている。

add_2x_sat   d, s0, s1