MatrixHelper.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Ryujinx.Audio.Renderer.Utils.Math;
  2. using System.Numerics;
  3. using System.Runtime.CompilerServices;
  4. namespace Ryujinx.Audio.Renderer.Dsp
  5. {
  6. static class MatrixHelper
  7. {
  8. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  9. public static Vector6 Transform(ref Vector6 value1, ref Matrix6x6 value2)
  10. {
  11. return new Vector6
  12. {
  13. X = value2.M11 * value1.X + value2.M12 * value1.Y + value2.M13 * value1.Z + value2.M14 * value1.W + value2.M15 * value1.V + value2.M16 * value1.U,
  14. Y = value2.M21 * value1.X + value2.M22 * value1.Y + value2.M23 * value1.Z + value2.M24 * value1.W + value2.M25 * value1.V + value2.M26 * value1.U,
  15. Z = value2.M31 * value1.X + value2.M32 * value1.Y + value2.M33 * value1.Z + value2.M34 * value1.W + value2.M35 * value1.V + value2.M36 * value1.U,
  16. W = value2.M41 * value1.X + value2.M42 * value1.Y + value2.M43 * value1.Z + value2.M44 * value1.W + value2.M45 * value1.V + value2.M46 * value1.U,
  17. V = value2.M51 * value1.X + value2.M52 * value1.Y + value2.M53 * value1.Z + value2.M54 * value1.W + value2.M55 * value1.V + value2.M56 * value1.U,
  18. U = value2.M61 * value1.X + value2.M62 * value1.Y + value2.M63 * value1.Z + value2.M64 * value1.W + value2.M65 * value1.V + value2.M66 * value1.U,
  19. };
  20. }
  21. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  22. public static Vector4 Transform(ref Vector4 value1, ref Matrix4x4 value2)
  23. {
  24. return new Vector4
  25. {
  26. X = value2.M11 * value1.X + value2.M12 * value1.Y + value2.M13 * value1.Z + value2.M14 * value1.W,
  27. Y = value2.M21 * value1.X + value2.M22 * value1.Y + value2.M23 * value1.Z + value2.M24 * value1.W,
  28. Z = value2.M31 * value1.X + value2.M32 * value1.Y + value2.M33 * value1.Z + value2.M34 * value1.W,
  29. W = value2.M41 * value1.X + value2.M42 * value1.Y + value2.M43 * value1.Z + value2.M44 * value1.W
  30. };
  31. }
  32. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  33. public static Vector2 Transform(ref Vector2 value1, ref Matrix2x2 value2)
  34. {
  35. return new Vector2
  36. {
  37. X = value2.M11 * value1.X + value2.M12 * value1.Y,
  38. Y = value2.M21 * value1.X + value2.M22 * value1.Y,
  39. };
  40. }
  41. }
  42. }