Microsoft DirectX 8.0 (C++)

m3x2

入力ベクトルと 3 × 2 行列の積を計算する。

m3x2   rDest, vSrc0, mSrc1

レジスタ

rDest
処理の結果を保持するデスティネーション レジスタ。
vSrc0
入力引数を指定するソース レジスタ。
mSrc1
入力引数を指定するソース レジスタ。

処理

    SetDestReg();
    SetSrcReg(0);
    SetSrcReg(1, 2);
    m_TmpReg.x = m_Source[0].x * m_Source[1].x +
                 m_Source[0].y * m_Source[1].y +
                 m_Source[0].z * m_Source[1].z;
    m_TmpReg.y = m_Source[0].x * m_Source[2].x +
                 m_Source[0].y * m_Source[2].y +
                 m_Source[0].z * m_Source[2].z;

    WriteResult();

展開

次の例は m3x2 命令の使い方を示している。

m3x2   r5, v0, c[3]

内容

dp3   r5.x, v0, c[3]
dp3   r5.y, v0, c[4]

したがって、このマクロ命令は、命令カウントから命令スロットを 2 つ消費する。c[3] および c[4] の最後の w 要素はこの計算においては無視されることに注意する。

注意

入力ベクトルは vSrc0 であり、入力の 3 × 2 行列は mSrc1 および同じレジスタ ファイル内の次のレジスタである。2D の結果が生成されて、rDest のほかの要素 (z および w) は変更されないでそのまま残る。

この処理は、一般に、2D トランスフォームに使用される。このマクロ命令は、1 対の内積として実装される。