From cee712105850ac3385cd0091a923438167433f9f Mon Sep 17 00:00:00 2001
From: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
Date: Sat, 8 Apr 2023 01:22:00 +0200
Subject: Move solution and projects to src
---
.../Renderer/Server/MemoryPool/MemoryPoolState.cs | 130 +++++++++++++++++++++
1 file changed, 130 insertions(+)
create mode 100644 src/Ryujinx.Audio/Renderer/Server/MemoryPool/MemoryPoolState.cs
(limited to 'src/Ryujinx.Audio/Renderer/Server/MemoryPool/MemoryPoolState.cs')
diff --git a/src/Ryujinx.Audio/Renderer/Server/MemoryPool/MemoryPoolState.cs b/src/Ryujinx.Audio/Renderer/Server/MemoryPool/MemoryPoolState.cs
new file mode 100644
index 00000000..69466bab
--- /dev/null
+++ b/src/Ryujinx.Audio/Renderer/Server/MemoryPool/MemoryPoolState.cs
@@ -0,0 +1,130 @@
+using System;
+using System.Runtime.InteropServices;
+using CpuAddress = System.UInt64;
+using DspAddress = System.UInt64;
+
+namespace Ryujinx.Audio.Renderer.Server.MemoryPool
+{
+ ///
+ /// Server state for a memory pool.
+ ///
+ [StructLayout(LayoutKind.Sequential, Size = 0x20, Pack = Alignment)]
+ public struct MemoryPoolState
+ {
+ public const int Alignment = 0x10;
+
+ ///
+ /// The location of the .
+ ///
+ public enum LocationType : uint
+ {
+ ///
+ /// located on the CPU side for user use.
+ ///
+ Cpu,
+
+ ///
+ /// located on the DSP side for system use.
+ ///
+ Dsp
+ }
+
+ ///
+ /// The CPU address associated to the .
+ ///
+ public CpuAddress CpuAddress;
+
+ ///
+ /// The DSP address associated to the .
+ ///
+ public DspAddress DspAddress;
+
+ ///
+ /// The size associated to the .
+ ///
+ public ulong Size;
+
+ ///
+ /// The associated to the .
+ ///
+ public LocationType Location;
+
+ ///
+ /// Set to true if the is used.
+ ///
+ [MarshalAs(UnmanagedType.I1)]
+ public bool IsUsed;
+
+ public static unsafe MemoryPoolState* Null => (MemoryPoolState*)IntPtr.Zero.ToPointer();
+
+ ///
+ /// Create a new with the given .
+ ///
+ /// The location type to use.
+ /// A new with the given .
+ public static MemoryPoolState Create(LocationType location)
+ {
+ return new MemoryPoolState
+ {
+ CpuAddress = 0,
+ DspAddress = 0,
+ Size = 0,
+ Location = location
+ };
+ }
+
+ ///
+ /// Set the and size of the .
+ ///
+ /// The .
+ /// The size.
+ public void SetCpuAddress(CpuAddress cpuAddress, ulong size)
+ {
+ CpuAddress = cpuAddress;
+ Size = size;
+ }
+
+ ///
+ /// Check if the given and size is contains in the .
+ ///
+ /// The .
+ /// The size.
+ /// True if the is contained inside the .
+ public bool Contains(CpuAddress targetCpuAddress, ulong size)
+ {
+ if (CpuAddress <= targetCpuAddress && size + targetCpuAddress <= Size + CpuAddress)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ ///
+ /// Translate the given CPU address to a DSP address.
+ ///
+ /// The .
+ /// The size.
+ /// the target DSP address.
+ public DspAddress Translate(CpuAddress targetCpuAddress, ulong size)
+ {
+ if (Contains(targetCpuAddress, size) && IsMapped())
+ {
+ ulong offset = targetCpuAddress - CpuAddress;
+
+ return DspAddress + offset;
+ }
+
+ return 0;
+ }
+
+ ///
+ /// Is the mapped on the DSP?
+ ///
+ /// Returns true if the is mapped on the DSP.
+ public bool IsMapped()
+ {
+ return DspAddress != 0;
+ }
+ }
+}
\ No newline at end of file
--
cgit v1.2.3