From 59fdaa744b20f91928ee3fcaf5fabfcb7b409451 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Tue, 31 Dec 2019 19:09:49 -0300 Subject: GPU resource disposal --- Ryujinx.Graphics.Gpu/Image/Texture.cs | 10 +++++++++- Ryujinx.Graphics.Gpu/Image/TextureManager.cs | 14 +++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'Ryujinx.Graphics.Gpu/Image') diff --git a/Ryujinx.Graphics.Gpu/Image/Texture.cs b/Ryujinx.Graphics.Gpu/Image/Texture.cs index 9b5c19f3..076718e5 100644 --- a/Ryujinx.Graphics.Gpu/Image/Texture.cs +++ b/Ryujinx.Graphics.Gpu/Image/Texture.cs @@ -13,7 +13,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// /// Represents a cached GPU texture. /// - class Texture : IRange + class Texture : IRange, IDisposable { private GpuContext _context; @@ -1011,5 +1011,13 @@ namespace Ryujinx.Graphics.Gpu.Image _arrayViewTexture?.Dispose(); _arrayViewTexture = null; } + + /// + /// Performs texture disposal, deleting the texture. + /// + public void Dispose() + { + DisposeTextures(); + } } } \ No newline at end of file diff --git a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs index ecc5dc51..e0a8908a 100644 --- a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs +++ b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs @@ -11,7 +11,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// /// Texture manager. /// - class TextureManager + class TextureManager : IDisposable { private const int OverlapsBufferInitialCapacity = 10; private const int OverlapsBufferMaxCapacity = 10000; @@ -761,5 +761,17 @@ namespace Ryujinx.Graphics.Gpu.Image { _textures.Remove(texture); } + + /// + /// Disposes all textures in the cache. + /// It's an error to use the texture manager after disposal. + /// + public void Dispose() + { + foreach (Texture texture in _textures) + { + texture.Dispose(); + } + } } } \ No newline at end of file -- cgit v1.2.3