aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/GpuContext.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-06-23 20:51:41 -0300
committerGitHub <noreply@github.com>2021-06-24 01:51:41 +0200
commita10b2c5ff26886e9ffc6f19e3f0fe9505a503b2f (patch)
tree006d013c300fb56c94c5563c2c1409a189f794b2 /Ryujinx.Graphics.Gpu/GpuContext.cs
parent12a7a2ead812d46deb9d978b6758731157be1cbc (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.cs29
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();