Microsoft DirectX 8.0 (C++)

m4x4

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

m4x4   rDest, vSrc0, mSrc1

レジスタ

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

処理

   SetDestReg();
    SetSrcReg(0);
    SetSrcReg(1, 4);
    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_Source[0].w * m_Source[1].w;
    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 +
                 m_Source[0].w * m_Source[2].w;
    m_TmpReg.z = m_Source[0].x * m_Source[3].x +
                 m_Source[0].y * m_Source[3].y +
                 m_Source[0].z * m_Source[3].z +
                 m_Source[0].w * m_Source[3].w;
    m_TmpReg.w = m_Source[0].x * m_Source[4].x +
                 m_Source[0].y * m_Source[4].y +
                 m_Source[0].z * m_Source[4].z +
                 m_Source[0].w * m_Source[4].w;

    WriteResult();

展開

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

m4x4   r5, v[0], c[3]

内容

dp4   r5.x, v[0], c[3]
dp4   r5.y, v[0], c[4]
dp4   r5.z, v[0], c[5]
dp4   r5.w, v[0], c[6]

したがって、このマクロは、命令カウントから 4 つの命令スロットを使用する。

注意

入力ベクトルは vSrc0 であり、入力の 4 × 4 行列は mSrc1 および同じレジスタ ファイル内でこれに続く 3 つのレジスタである。

この処理は、一般に、射影行列による位置座標のトランスフォームに使われる。このマクロ命令は、一連の内積として実装される。