Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Transpose()

static unsafe Matrix4x4 System.Numerics.Matrix4x4.Transpose ( Matrix4x4 matrix)
inlinestatic

Definition at line 1276 of file Matrix4x4.cs.

1277 {
1279 {
1280 }
1281 if (Sse.IsSupported)
1282 {
1283 Vector128<float> left = Sse.LoadVector128(&matrix.M11);
1284 Vector128<float> right = Sse.LoadVector128(&matrix.M21);
1285 Vector128<float> left2 = Sse.LoadVector128(&matrix.M31);
1286 Vector128<float> right2 = Sse.LoadVector128(&matrix.M41);
1287 Vector128<float> vector = Sse.UnpackLow(left, right);
1288 Vector128<float> vector2 = Sse.UnpackLow(left2, right2);
1289 Vector128<float> vector3 = Sse.UnpackHigh(left, right);
1290 Vector128<float> vector4 = Sse.UnpackHigh(left2, right2);
1291 Sse.Store(&matrix.M11, Sse.MoveLowToHigh(vector, vector2));
1292 Sse.Store(&matrix.M21, Sse.MoveHighToLow(vector2, vector));
1293 Sse.Store(&matrix.M31, Sse.MoveLowToHigh(vector3, vector4));
1294 Sse.Store(&matrix.M41, Sse.MoveHighToLow(vector4, vector3));
1295 return matrix;
1296 }
1297 System.Runtime.CompilerServices.Unsafe.SkipInit(out Matrix4x4 result);
1298 result.M11 = matrix.M11;
1299 result.M12 = matrix.M21;
1300 result.M13 = matrix.M31;
1301 result.M14 = matrix.M41;
1302 result.M21 = matrix.M12;
1303 result.M22 = matrix.M22;
1304 result.M23 = matrix.M32;
1305 result.M24 = matrix.M42;
1306 result.M31 = matrix.M13;
1307 result.M32 = matrix.M23;
1308 result.M33 = matrix.M33;
1309 result.M34 = matrix.M43;
1310 result.M41 = matrix.M14;
1311 result.M42 = matrix.M24;
1312 result.M43 = matrix.M34;
1313 result.M44 = matrix.M44;
1314 return result;
1315 }
static Vector128< float > MoveHighToLow(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:307
static unsafe void Store(float *address, Vector128< float > source)
Definition Sse.cs:417
static Vector128< float > UnpackHigh(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:452
static new bool IsSupported
Definition Sse.cs:30
static unsafe Vector128< float > LoadVector128(float *address)
Definition Sse.cs:257
static Vector128< float > UnpackLow(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:457
static Vector128< float > MoveLowToHigh(Vector128< float > left, Vector128< float > right)
Definition Sse.cs:312
Matrix4x4(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44)
Definition Matrix4x4.cs:93

References System.Runtime.Intrinsics.Arm.AdvSimd.Arm64.IsSupported, System.Runtime.Intrinsics.X86.Sse.IsSupported, System.Runtime.Intrinsics.X86.Sse.LoadVector128(), System.Numerics.Matrix4x4.M11, System.Numerics.Matrix4x4.M12, System.Numerics.Matrix4x4.M13, System.Numerics.Matrix4x4.M14, System.Numerics.Matrix4x4.M21, System.Numerics.Matrix4x4.M22, System.Numerics.Matrix4x4.M23, System.Numerics.Matrix4x4.M24, System.Numerics.Matrix4x4.M31, System.Numerics.Matrix4x4.M32, System.Numerics.Matrix4x4.M33, System.Numerics.Matrix4x4.M34, System.Numerics.Matrix4x4.M41, System.Numerics.Matrix4x4.M42, System.Numerics.Matrix4x4.M43, System.Numerics.Matrix4x4.M44, System.Runtime.Intrinsics.X86.Sse.MoveHighToLow(), System.Runtime.Intrinsics.X86.Sse.MoveLowToHigh(), System.Runtime.Intrinsics.X86.Sse.Store(), System.Runtime.Intrinsics.X86.Sse.UnpackHigh(), and System.Runtime.Intrinsics.X86.Sse.UnpackLow().