From 156a32b4d016db5a26373192a9012c40fc7a9450 Mon Sep 17 00:00:00 2001
From: Ac_K <Acoustik666@gmail.com>
Date: Wed, 24 Apr 2019 16:22:06 +0200
Subject: [PATCH] Fix GetAudioRendererWorkBufferSize for REV5 (#677)

* Fix GetAudioRendererWorkBufferSize for REV5

This should be close #669.
Based of my own RE.

* Fix nit

Co-Authored-By: AcK77 <Acoustik666@gmail.com>

* Fix RE mistake

* Fix nit 2
---
 .../HOS/Services/Aud/IAudioRendererManager.cs | 23 +++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/Ryujinx.HLE/HOS/Services/Aud/IAudioRendererManager.cs b/Ryujinx.HLE/HOS/Services/Aud/IAudioRendererManager.cs
index fb1409f4..18e9184c 100644
--- a/Ryujinx.HLE/HOS/Services/Aud/IAudioRendererManager.cs
+++ b/Ryujinx.HLE/HOS/Services/Aud/IAudioRendererManager.cs
@@ -16,7 +16,7 @@ namespace Ryujinx.HLE.HOS.Services.Aud
                                       ('V' << 16) |
                                       ('0' << 24);
 
-        private const int Rev = 4;
+        private const int Rev = 5;
 
         public const int RevMagic = Rev0Magic + (Rev << 24);
 
@@ -58,8 +58,9 @@ namespace Ryujinx.HLE.HOS.Services.Aud
 
             if (revision <= Rev)
             {
-                bool isSplitterSupported = revision >= 3;
-
+                bool isSplitterSupported                  = revision >= 3;
+                bool isVariadicCommandBufferSizeSupported = revision >= 5;
+                
                 long size;
 
                 size  = IntUtils.AlignUp(Params.Unknown8 * 4, 64);
@@ -99,7 +100,21 @@ namespace Ryujinx.HLE.HOS.Services.Aud
                                (Params.PerformanceManagerCount + 1) + 0x13F) & ~0x3FL;
                 }
 
-                size = (size + 0x1907D) & ~0xFFFL;
+                if (isVariadicCommandBufferSizeSupported)
+                {
+                    size += Params.EffectCount * 0x840 + 
+                            Params.MixCount * 0x5A38 +
+                            Params.SinkCount * 0x148 +
+                            Params.SplitterDestinationDataCount * 0x540 +
+                            Params.VoiceCount * (Params.SplitterCount * 0x68 + 0x2E0) +
+                            ((Params.VoiceCount + Params.MixCount + Params.EffectCount + Params.SinkCount + 0x65) << 6) + 0x3F8 + 0x7E;
+                }
+                else
+                {
+                    size += 0x1807E;
+                }
+
+                size = size & ~0xFFFL;
 
                 context.ResponseData.Write(size);