AuxiliaryBufferHeader.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Ryujinx.Memory;
  2. using System.Runtime.InteropServices;
  3. namespace Ryujinx.Audio.Renderer.Dsp.State
  4. {
  5. [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x80)]
  6. public struct AuxiliaryBufferHeader
  7. {
  8. [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x40)]
  9. public struct AuxiliaryBufferInfo
  10. {
  11. private const uint ReadOffsetPosition = 0x0;
  12. private const uint WriteOffsetPosition = 0x4;
  13. private const uint LostSampleCountPosition = 0x8;
  14. private const uint TotalSampleCountPosition = 0xC;
  15. public uint ReadOffset;
  16. public uint WriteOffset;
  17. public uint LostSampleCount;
  18. public uint TotalSampleCount;
  19. private unsafe fixed uint _unknown[12];
  20. public static uint GetReadOffset(IVirtualMemoryManager manager, ulong bufferAddress)
  21. {
  22. return manager.Read<uint>(bufferAddress + ReadOffsetPosition);
  23. }
  24. public static uint GetWriteOffset(IVirtualMemoryManager manager, ulong bufferAddress)
  25. {
  26. return manager.Read<uint>(bufferAddress + WriteOffsetPosition);
  27. }
  28. public static uint GetLostSampleCount(IVirtualMemoryManager manager, ulong bufferAddress)
  29. {
  30. return manager.Read<uint>(bufferAddress + LostSampleCountPosition);
  31. }
  32. public static uint GetTotalSampleCount(IVirtualMemoryManager manager, ulong bufferAddress)
  33. {
  34. return manager.Read<uint>(bufferAddress + TotalSampleCountPosition);
  35. }
  36. public static void SetReadOffset(IVirtualMemoryManager manager, ulong bufferAddress, uint value)
  37. {
  38. manager.Write(bufferAddress + ReadOffsetPosition, value);
  39. }
  40. public static void SetWriteOffset(IVirtualMemoryManager manager, ulong bufferAddress, uint value)
  41. {
  42. manager.Write(bufferAddress + WriteOffsetPosition, value);
  43. }
  44. public static void SetLostSampleCount(IVirtualMemoryManager manager, ulong bufferAddress, uint value)
  45. {
  46. manager.Write(bufferAddress + LostSampleCountPosition, value);
  47. }
  48. public static void SetTotalSampleCount(IVirtualMemoryManager manager, ulong bufferAddress, uint value)
  49. {
  50. manager.Write(bufferAddress + TotalSampleCountPosition, value);
  51. }
  52. public static void Reset(IVirtualMemoryManager manager, ulong bufferAddress)
  53. {
  54. // NOTE: Lost sample count is never reset, since REV10.
  55. manager.Write(bufferAddress + ReadOffsetPosition, 0UL);
  56. manager.Write(bufferAddress + TotalSampleCountPosition, 0);
  57. }
  58. }
  59. public AuxiliaryBufferInfo CpuBufferInfo;
  60. public AuxiliaryBufferInfo DspBufferInfo;
  61. }
  62. }