diff options
Diffstat (limited to 'Ryujinx.HLE/Switch.cs')
-rw-r--r-- | Ryujinx.HLE/Switch.cs | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/Ryujinx.HLE/Switch.cs b/Ryujinx.HLE/Switch.cs index 5713bd9e..9defe25d 100644 --- a/Ryujinx.HLE/Switch.cs +++ b/Ryujinx.HLE/Switch.cs @@ -3,6 +3,9 @@ using Ryujinx.Audio; using Ryujinx.Configuration; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu; +using Ryujinx.Graphics.Host1x; +using Ryujinx.Graphics.Nvdec; +using Ryujinx.Graphics.Vic; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS; @@ -11,7 +14,6 @@ using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.Memory; using System; -using System.Threading; namespace Ryujinx.HLE { @@ -23,6 +25,8 @@ namespace Ryujinx.HLE public GpuContext Gpu { get; private set; } + internal Host1xDevice Host1x { get; } + public VirtualFileSystem FileSystem { get; private set; } public Horizon System { get; private set; } @@ -53,6 +57,27 @@ namespace Ryujinx.HLE Gpu = new GpuContext(renderer); + Host1x = new Host1xDevice(Gpu.Synchronization); + var nvdec = new NvdecDevice(Gpu.MemoryManager); + var vic = new VicDevice(Gpu.MemoryManager); + Host1x.RegisterDevice(ClassId.Nvdec, nvdec); + Host1x.RegisterDevice(ClassId.Vic, vic); + + nvdec.FrameDecoded += (FrameDecodedEventArgs e) => + { + // FIXME: + // Figure out what is causing frame ordering issues on H264. + // For now this is needed as workaround. + if (e.CodecId == CodecId.H264) + { + vic.SetSurfaceOverride(e.LumaOffset, e.ChromaOffset, 0); + } + else + { + vic.DisableSurfaceOverride(); + } + }; + FileSystem = fileSystem; System = new Horizon(this, contentManager); @@ -136,13 +161,6 @@ namespace Ryujinx.HLE Gpu.Window.Present(swapBuffersCallback); } - internal void Unload() - { - FileSystem.Unload(); - - Memory.Dispose(); - } - public void DisposeGpu() { Gpu.Dispose(); @@ -158,7 +176,10 @@ namespace Ryujinx.HLE if (disposing) { System.Dispose(); + Host1x.Dispose(); AudioOut.Dispose(); + FileSystem.Unload(); + Memory.Dispose(); } } } |