Ensure that all resources that will be used are properly updated and removed from the pool to avoid invalid re-use
This commit is contained in:
parent
b7c54a13d4
commit
f7f017e428
1 changed files with 17 additions and 6 deletions
|
@ -168,14 +168,10 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
||||||
{
|
{
|
||||||
if (_cache.TryGetValue(key, out CacheBucket bucket))
|
if (_cache.TryGetValue(key, out CacheBucket bucket))
|
||||||
{
|
{
|
||||||
|
AcquireResource(bucket);
|
||||||
|
|
||||||
value = bucket.Value;
|
value = bucket.Value;
|
||||||
|
|
||||||
RemoveFromSortedCache(bucket.CacheNode);
|
|
||||||
|
|
||||||
bucket.UpdateCacheNode(_sortedCache.AddLast(bucket.CacheNode.Value));
|
|
||||||
|
|
||||||
RemoveFromResourcePool(bucket);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,6 +185,8 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
||||||
if (_cache.TryGetValue(key, out CacheBucket bucket) && bucket.PoolKey.Equals(poolKey))
|
if (_cache.TryGetValue(key, out CacheBucket bucket) && bucket.PoolKey.Equals(poolKey))
|
||||||
{
|
{
|
||||||
//Value on key is already compatible, we don't need to do anything.
|
//Value on key is already compatible, we don't need to do anything.
|
||||||
|
AcquireResource(bucket);
|
||||||
|
|
||||||
value = bucket.Value;
|
value = bucket.Value;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -218,6 +216,8 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
||||||
{
|
{
|
||||||
if (_cache.TryGetValue(key, out CacheBucket bucket))
|
if (_cache.TryGetValue(key, out CacheBucket bucket))
|
||||||
{
|
{
|
||||||
|
AcquireResource(bucket);
|
||||||
|
|
||||||
size = bucket.Size;
|
size = bucket.Size;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -232,6 +232,8 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
||||||
{
|
{
|
||||||
if (_cache.TryGetValue(key, out CacheBucket bucket))
|
if (_cache.TryGetValue(key, out CacheBucket bucket))
|
||||||
{
|
{
|
||||||
|
AcquireResource(bucket);
|
||||||
|
|
||||||
size = bucket.Size;
|
size = bucket.Size;
|
||||||
value = bucket.Value;
|
value = bucket.Value;
|
||||||
|
|
||||||
|
@ -244,6 +246,15 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void AcquireResource(CacheBucket bucket)
|
||||||
|
{
|
||||||
|
RemoveFromSortedCache(bucket.CacheNode);
|
||||||
|
|
||||||
|
bucket.UpdateCacheNode(_sortedCache.AddLast(bucket.CacheNode.Value));
|
||||||
|
|
||||||
|
RemoveFromResourcePool(bucket);
|
||||||
|
}
|
||||||
|
|
||||||
private void ClearCacheIfNeeded()
|
private void ClearCacheIfNeeded()
|
||||||
{
|
{
|
||||||
long timestamp = PerformanceCounter.ElapsedMilliseconds;
|
long timestamp = PerformanceCounter.ElapsedMilliseconds;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue