m4x4 – ps
Multipliziert einen 4-Komponenten-Vektor mit einer 4x4-Matrix.
Syntax
m4x4 dst, src0, src1 |
---|
where
- dst ist das Zielregister. Ergebnis ist ein Vektor mit vier Komponenten.
- src0 ist ein Quellregister, das einen Vektor mit vier Komponenten darstellt.
- src1 ist ein Quellregister, das eine 4x4-Matrix darstellt, die dem ersten von 4 aufeinanderfolgenden Registern entspricht.
Bemerkungen
Pixel-Shaderversionen | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
m4x4 | x | x | x | x | x |
Die xyzw-Maske (Standardmaske) ist für das Zielregister erforderlich. Negate- und Swizzle-Modifizierer sind für src0 zulässig, aber nicht für src1.
Swizzle- und negate-Modifizierer sind für das src0-Register ungültig. Die Register "dst" und "src0" können nicht identisch sein.
Der folgende Codeausschnitt zeigt die ausgeführten Vorgänge.
dest.x = (src0.x*src1.x) + (src0.y*src1.y) + (src0.z*src1.z) + (src0.w*src1.w);
dest.y = (src0.x*src2.x) + (src0.y*src2.y) + (src0.z*src2.z) + (src0.w*src2.w);
dest.z = (src0.x*src3.x) + (src0.y*src3.y) + (src0.z*src3.z) + (src0.w*src3.w);
dest.w = (src0.x*src4.x) + (src0.y*src4.y) + (src0.z*src4.z) + (src0.w*src4.w);
Der Eingabevektor befindet sich im Register src0. Die Eingabe 4x4-Matrix befindet sich im Register src1 und die nächsten drei höheren Register, wie in der folgenden Erweiterung gezeigt.
Dieser Vorgang wird häufig zum Transformieren einer Position durch eine Projektionsmatrix verwendet. Diese Anweisung wird wie hier gezeigt als Eine Reihe von Punktprodukten implementiert.
m4x4 r0.xyzw, r1, c0 will be expanded to:
dp4 r0.x, r1, c0
dp4 r0.y, r1, c1
dp4 r0.z, r1, c2
dp4 r0.w, r1, c3
Zugehörige Themen