Lock GbpQueueBuffer till Vsync is signalled (#367)

* Initial Framerate limit implementation

* use seperate event for limiter

* check for vsync signal after queue up framebuffer

* removed ingame toggle

* fix nits
This commit is contained in:
emmauss 2018-09-10 02:38:56 +03:00 committed by Thomas Guillemard
parent fc77b089a6
commit db1a759c59
5 changed files with 25 additions and 1 deletions

View file

@ -199,6 +199,11 @@ namespace Ryujinx.HLE.HOS.Services.Android
SendFrameBuffer(Context, Slot);
if (Context.Device.EnableDeviceVsync)
{
Context.Device.VsyncEvent.WaitOne();
}
return MakeReplyParcel(Context, 1280, 720, 0, 0, 0);
}

View file

@ -7,6 +7,7 @@ using Ryujinx.HLE.Input;
using Ryujinx.HLE.Logging;
using Ryujinx.HLE.Memory;
using System;
using System.Threading;
namespace Ryujinx.HLE
{
@ -28,6 +29,12 @@ namespace Ryujinx.HLE
public Hid Hid { get; private set; }
public bool EnableDeviceVsync { get; set; } = true;
public AutoResetEvent VsyncEvent { get; private set; }
public event EventHandler Finish;
public Switch(IGalRenderer Renderer, IAalOutput AudioOut)
{
if (Renderer == null)
@ -55,6 +62,8 @@ namespace Ryujinx.HLE
Statistics = new PerformanceStatistics();
Hid = new Hid(this, System.HidSharedMem.PA);
VsyncEvent = new AutoResetEvent(true);
}
public void LoadCart(string ExeFsDir, string RomFsFile = null)
@ -109,6 +118,8 @@ namespace Ryujinx.HLE
if (Disposing)
{
System.Dispose();
VsyncEvent.Dispose();
}
}
}

View file

@ -33,6 +33,8 @@ namespace Ryujinx
Device.System.State.DockedMode = Convert.ToBoolean(Parser.Value("Docked_Mode"));
Device.EnableDeviceVsync = Convert.ToBoolean(Parser.Value("Enable_Vsync"));
string[] FilteredLogClasses = Parser.Value("Logging_Filtered_Classes").Split(',', StringSplitOptions.RemoveEmptyEntries);
//When the classes are specified on the list, we only

View file

@ -25,6 +25,9 @@ Logging_Filtered_Classes =
#Enable or Disable Docked Mode
Docked_Mode = false
#Enable Game Vsync
Enable_Vsync = true
#Controller Device Index
GamePad_Index = 0

View file

@ -258,13 +258,16 @@ namespace Ryujinx
double HostFps = Device.Statistics.GetSystemFrameRate();
double GameFps = Device.Statistics.GetGameFrameRate();
NewTitle = $"Ryujinx | Host FPS: {HostFps:0.0} | Game FPS: {GameFps:0.0}";
NewTitle = $"Ryujinx | Host FPS: {HostFps:0.0} | Game FPS: {GameFps:0.0} | Game Vsync: " +
(Device.EnableDeviceVsync ? "On" : "Off");
TitleEvent = true;
SwapBuffers();
Device.System.SignalVsync();
Device.VsyncEvent.Set();
}
protected override void OnUnload(EventArgs e)