diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2021-06-23 20:51:41 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-24 01:51:41 +0200 |
| commit | a10b2c5ff26886e9ffc6f19e3f0fe9505a503b2f (patch) | |
| tree | 006d013c300fb56c94c5563c2c1409a189f794b2 /Ryujinx.Graphics.Gpu/GpuContext.cs | |
| parent | 12a7a2ead812d46deb9d978b6758731157be1cbc (diff) | |
Initial support for GPU channels (#2372)
* Ground work for separate GPU channels
* Rename TextureManager to TextureCache
* Decouple texture bindings management from the texture cache
* Rename BufferManager to BufferCache
* Decouple buffer bindings management from the buffer cache
* More comments and proper disposal
* PR feedback
* Force host state update on channel switch
* Typo
* PR feedback
* Missing using
Diffstat (limited to 'Ryujinx.Graphics.Gpu/GpuContext.cs')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/GpuContext.cs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Gpu/GpuContext.cs b/Ryujinx.Graphics.Gpu/GpuContext.cs index a9386ce5..2ba832bb 100644 --- a/Ryujinx.Graphics.Gpu/GpuContext.cs +++ b/Ryujinx.Graphics.Gpu/GpuContext.cs @@ -72,6 +72,11 @@ namespace Ryujinx.Graphics.Gpu /// </summary> internal List<Action> SyncActions { get; } + /// <summary> + /// Queue with closed channels for deferred disposal from the render thread. + /// </summary> + internal Queue<GpuChannel> DisposedChannels { get; } + private readonly Lazy<Capabilities> _caps; /// <summary> @@ -111,6 +116,13 @@ namespace Ryujinx.Graphics.Gpu HostInitalized = new ManualResetEvent(false); SyncActions = new List<Action>(); + + DisposedChannels = new Queue<GpuChannel>(); + } + + public GpuChannel CreateChannel() + { + return new GpuChannel(this); } /// <summary> @@ -174,6 +186,18 @@ namespace Ryujinx.Graphics.Gpu } /// <summary> + /// Performs deferred disposal of closed channels. + /// This must only be called from the render thread. + /// </summary> + internal void DisposePendingChannels() + { + while (DisposedChannels.TryDequeue(out GpuChannel channel)) + { + channel.Destroy(); + } + } + + /// <summary> /// Disposes all GPU resources currently cached. /// It's an error to push any GPU commands after disposal. /// Additionally, the GPU commands FIFO must be empty for disposal, @@ -181,9 +205,10 @@ namespace Ryujinx.Graphics.Gpu /// </summary> public void Dispose() { + DisposePendingChannels(); Methods.ShaderCache.Dispose(); - Methods.BufferManager.Dispose(); - Methods.TextureManager.Dispose(); + Methods.BufferCache.Dispose(); + Methods.TextureCache.Dispose(); Renderer.Dispose(); GPFifo.Dispose(); HostInitalized.Dispose(); |
