0
0
Fork 0

Change vsync signal to happen at 60hz, regardless of swap interval (#3642)

* Change vsync signal to happen at 60hz, regardless of swap interval

* Update Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs

Co-authored-by: gdkchan <gab.dark.100@gmail.com>

* Fix softlock when toggling vsync

Co-authored-by: gdkchan <gab.dark.100@gmail.com>
This commit is contained in:
riperiperi 2022-09-01 21:57:50 +01:00 committed by GitHub
parent 67cbdc3a6a
commit 38275f9056
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -35,6 +35,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
private long _1msTicks; private long _1msTicks;
private int _swapInterval; private int _swapInterval;
private int _swapIntervalDelay;
private readonly object Lock = new object(); private readonly object Lock = new object();
@ -91,7 +92,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
} }
else else
{ {
_ticksPerFrame = Stopwatch.Frequency / (TargetFps / _swapInterval); _ticksPerFrame = Stopwatch.Frequency / TargetFps;
} }
} }
@ -322,7 +323,13 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
if (_ticks >= _ticksPerFrame) if (_ticks >= _ticksPerFrame)
{ {
Compose(); if (_swapIntervalDelay-- == 0)
{
Compose();
// When a frame is presented, delay the next one by its swap interval value.
_swapIntervalDelay = Math.Max(0, _swapInterval - 1);
}
_device.System?.SignalVsync(); _device.System?.SignalVsync();