mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2025-03-21 08:20:18 +00:00
This rework the delay effect processing by representing calculation with the appropriate matrix and by unrolling some loop in the code. This allows better optimization by the JIT while making it more readeable. Also fix a bug in the Surround code path found while looking back at my notes.
86 lines
2.1 KiB
C#
86 lines
2.1 KiB
C#
using System;
|
|
|
|
namespace Ryujinx.Audio.Renderer.Utils.Math
|
|
{
|
|
public record struct Matrix2x2
|
|
{
|
|
public float M11;
|
|
public float M12;
|
|
public float M21;
|
|
public float M22;
|
|
|
|
public Matrix2x2(float m11, float m12,
|
|
float m21, float m22)
|
|
{
|
|
M11 = m11;
|
|
M12 = m12;
|
|
|
|
M21 = m21;
|
|
M22 = m22;
|
|
}
|
|
|
|
public static Matrix2x2 operator +(Matrix2x2 value1, Matrix2x2 value2)
|
|
{
|
|
Matrix2x2 m;
|
|
|
|
m.M11 = value1.M11 + value2.M11;
|
|
m.M12 = value1.M12 + value2.M12;
|
|
m.M21 = value1.M21 + value2.M21;
|
|
m.M22 = value1.M22 + value2.M22;
|
|
|
|
return m;
|
|
}
|
|
|
|
public static Matrix2x2 operator -(Matrix2x2 value1, float value2)
|
|
{
|
|
Matrix2x2 m;
|
|
|
|
m.M11 = value1.M11 - value2;
|
|
m.M12 = value1.M12 - value2;
|
|
m.M21 = value1.M21 - value2;
|
|
m.M22 = value1.M22 - value2;
|
|
|
|
return m;
|
|
}
|
|
|
|
public static Matrix2x2 operator *(Matrix2x2 value1, float value2)
|
|
{
|
|
Matrix2x2 m;
|
|
|
|
m.M11 = value1.M11 * value2;
|
|
m.M12 = value1.M12 * value2;
|
|
m.M21 = value1.M21 * value2;
|
|
m.M22 = value1.M22 * value2;
|
|
|
|
return m;
|
|
}
|
|
|
|
public static unsafe Matrix2x2 operator *(Matrix2x2 value1, Matrix2x2 value2)
|
|
{
|
|
Matrix2x2 m;
|
|
|
|
// First row
|
|
m.M11 = value1.M11 * value2.M11 + value1.M12 * value2.M21;
|
|
m.M12 = value1.M11 * value2.M12 + value1.M12 * value2.M22;
|
|
|
|
// Second row
|
|
m.M21 = value1.M21 * value2.M11 + value1.M22 * value2.M21;
|
|
m.M22 = value1.M21 * value2.M12 + value1.M22 * value2.M22;
|
|
|
|
return m;
|
|
}
|
|
|
|
public override readonly int GetHashCode()
|
|
{
|
|
HashCode hash = default;
|
|
|
|
hash.Add(M11);
|
|
hash.Add(M12);
|
|
|
|
hash.Add(M21);
|
|
hash.Add(M22);
|
|
|
|
return hash.ToHashCode();
|
|
}
|
|
}
|
|
}
|