m3x2 – vs

Multipliziert einen 3-Komponenten-Vektor mit einer 3x2-Matrix.

Syntax

m3x2 dst, src0, src1

 

where

  • dst ist das Zielregister. Ergebnis ist ein Vektor mit zwei Komponenten.
  • src0 ist ein Quellregister, das einen Vektor mit drei Komponenten darstellt.
  • src1 ist ein Quellregister, das eine 3x2-Matrix darstellt, die dem ersten von 2 aufeinanderfolgenden Registern entspricht.

Bemerkungen

Vertex-Shaderversionen 1_1 2_0 2_x 2_sw 3_0 3_sw
m3x2 x x x x x x

 

Die xy-Maske ist für das Zielregister erforderlich. Negate- und Swizzle-Modifizierer sind für src0, aber nicht für src1 zulässig.

Die folgenden Formeln zeigen, wie die Anweisung funktioniert:

dest.x = (src0.x * src1.x) + (src0.x * src1.y) + (src0.x * src1.z);
dest.y = (src0.x * src2.x) + (src0.y * src2.y) + (src0.z * src2.z);

Der Eingabevektor befindet sich im Register src0. Die Eingabematrix 3x2 befindet sich im Register src1 und das nächst höhere Register in derselben Registerdatei, wie in der folgenden Erweiterung gezeigt. Es wird ein 2D-Ergebnis erzeugt, sodass die anderen Elemente des Zielregisters (dest.z und dest.w) nicht betroffen sind.

Dieser Vorgang wird häufig für 2D-Transformationen verwendet. Diese Anweisung wird wie hier gezeigt als Paar von Punktprodukten implementiert.

m3x2   r0.xy, r1, c0   which will be expanded to:

dp3   r0.x, r1, c0
dp3   r0.y, r1, c1

Swizzle- und negate-Modifizierer sind für das src1-Register ungültig. Das dest- und src0-Register oder eines der src1+i-Register kann nicht identisch sein.

Anweisungen zum Vertex-Shader