diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Gpu/Image/Texture.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Gpu/Image/Texture.cs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Ryujinx.Graphics.Gpu/Image/Texture.cs b/src/Ryujinx.Graphics.Gpu/Image/Texture.cs index 3b257988..6c9de8d6 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/Texture.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/Texture.cs @@ -144,6 +144,11 @@ namespace Ryujinx.Graphics.Gpu.Image /// </summary> public ShortTextureCacheEntry ShortCacheEntry { get; set; } + /// <summary> + /// Whether this texture has ever been referenced by a pool. + /// </summary> + public bool HadPoolOwner { get; private set; } + /// Physical memory ranges where the texture data is located. /// </summary> public MultiRange Range { get; private set; } @@ -1506,10 +1511,13 @@ namespace Ryujinx.Graphics.Gpu.Image /// <param name="gpuVa">GPU VA of the pool reference</param> public void IncrementReferenceCount(TexturePool pool, int id, ulong gpuVa) { + HadPoolOwner = true; + lock (_poolOwners) { _poolOwners.Add(new TexturePoolOwner { Pool = pool, ID = id, GpuAddress = gpuVa }); } + _referenceCount++; if (ShortCacheEntry != null) @@ -1594,7 +1602,7 @@ namespace Ryujinx.Graphics.Gpu.Image _poolOwners.Clear(); } - if (ShortCacheEntry != null && _context.IsGpuThread()) + if (ShortCacheEntry != null && !ShortCacheEntry.IsAutoDelete && _context.IsGpuThread()) { // If this is called from another thread (unmapped), the short cache will // have to remove this texture on a future tick. |