aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThog <me@thog.eu>2020-04-25 12:08:50 +0200
committerGitHub <noreply@github.com>2020-04-25 12:08:50 +0200
commit75ec30c962bcfa4251f29a29c659b959170018ce (patch)
treebe1a42b18a6cad8990e1d0cd6dcc2dbbdada4e95
parentfba8651213001b79604c0429ed5ebe5845f08d61 (diff)
SurfaceFlinger: fix SetPreallocatedBuffer correctness (#1153)
Nintendo sets the buffer count in SetPreallocatedBuffer too. This fix triple buffering on all games and finally fix SSBU flickering.
-rw-r--r--Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueProducer.cs13
2 files changed, 14 insertions, 1 deletions
diff --git a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs b/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs
index 8a5f5831..88b4025d 100644
--- a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs
+++ b/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs
@@ -43,7 +43,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
IsAbandoned = false;
OverrideMaxBufferCount = 0;
DequeueBufferCannotBlock = false;
- UseAsyncBuffer = false;
+ UseAsyncBuffer = true;
DefaultWidth = 1;
DefaultHeight = 1;
DefaultMaxBufferCount = 2;
diff --git a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueProducer.cs b/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueProducer.cs
index 29154356..333bffd1 100644
--- a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueProducer.cs
+++ b/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueProducer.cs
@@ -604,6 +604,19 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
Core.Slots[slot].GraphicBuffer.Object.Buffer.Usage &= (int)Core.ConsumerUsageBits;
}
+ int bufferCount = 0;
+
+ for (int i = 0; i < Core.Slots.Length; i++)
+ {
+ if (!Core.Slots[i].GraphicBuffer.IsNull)
+ {
+ bufferCount++;
+ }
+ }
+
+ Core.OverrideMaxBufferCount = bufferCount;
+ Core.UseAsyncBuffer = false;
+
bool cleared = false;
if (!graphicBuffer.IsNull)