diff options
author | gdkchan <gab.dark.100@gmail.com> | 2022-09-09 22:16:24 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-10 01:16:24 +0000 |
commit | 81f1a4dc3161882b0385c9d4752fbba84b9eca96 (patch) | |
tree | ac0f24b578077e152cf58a4ce8c3a9f5e2a38c3b /Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs | |
parent | c64524a240671cb3f8609e3454576e69e5948a60 (diff) |
Allocate work buffer for audio renderer instead of using guest supplied memory (#3276)1.1.257
* Allocate work buffer for audio renderer instead of using guest supplied memory
* Typo
* Use GC.AllocateArray to allocate pinned array
Diffstat (limited to 'Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs')
-rw-r--r-- | Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs b/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs index 3fbdc58d..4de0ad16 100644 --- a/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs +++ b/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs @@ -305,13 +305,34 @@ namespace Ryujinx.Audio.Renderer.Server /// <param name="workBufferSize">The guest work buffer size.</param> /// <param name="processHandle">The process handle of the application.</param> /// <returns>A <see cref="ResultCode"/> reporting an error or a success.</returns> - public ResultCode OpenAudioRenderer(out AudioRenderSystem renderer, IVirtualMemoryManager memoryManager, ref AudioRendererConfiguration parameter, ulong appletResourceUserId, ulong workBufferAddress, ulong workBufferSize, uint processHandle, float volume) + public ResultCode OpenAudioRenderer( + out AudioRenderSystem renderer, + IVirtualMemoryManager memoryManager, + ref AudioRendererConfiguration parameter, + ulong appletResourceUserId, + ulong workBufferAddress, + ulong workBufferSize, + uint processHandle, + float volume) { int sessionId = AcquireSessionId(); AudioRenderSystem audioRenderer = new AudioRenderSystem(this, _sessionsSystemEvent[sessionId]); - ResultCode result = audioRenderer.Initialize(ref parameter, processHandle, workBufferAddress, workBufferSize, sessionId, appletResourceUserId, memoryManager); + // TODO: Eventually, we should try to use the guest supplied work buffer instead of allocating + // our own. However, it was causing problems on some applications that would unmap the memory + // before the audio renderer was fully disposed. + Memory<byte> workBufferMemory = GC.AllocateArray<byte>((int)workBufferSize, pinned: true); + + ResultCode result = audioRenderer.Initialize( + ref parameter, + processHandle, + workBufferMemory, + workBufferAddress, + workBufferSize, + sessionId, + appletResourceUserId, + memoryManager); if (result == ResultCode.Success) { |