Force copy when auto-deleting a texture with dependencies (#2687)
When a texture is deleted by falling to the bottom of the AutoDeleteCache, its data is flushed to preserve any GPU writes that occurred. This ensures that the data appears in any textures recreated in the future, but didn't account for a texture that already existed with a copy dependency. This change forces copy dependencies to complete if a texture falls out from from the AutoDeleteCache. (not removed via overlap, as that would be wasted effort) Fixes broken lighting caused by pausing in SMO's Metro Kingdom. May fix some other issues.
This commit is contained in:
parent
fd7567a6b5
commit
b6e093b0fc
3 changed files with 37 additions and 4 deletions
|
@ -41,14 +41,14 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|||
{
|
||||
Texture oldestTexture = _textures.First.Value;
|
||||
|
||||
oldestTexture.SynchronizeMemory();
|
||||
|
||||
if (oldestTexture.IsModified && !oldestTexture.CheckModified(true))
|
||||
if (oldestTexture.IsModified && !oldestTexture.CheckModified(false))
|
||||
{
|
||||
// The texture must be flushed if it falls out of the auto delete cache.
|
||||
// Flushes out of the auto delete cache do not trigger write tracking,
|
||||
// as it is expected that other overlapping textures exist that have more up-to-date contents.
|
||||
oldestTexture.Flush(false);
|
||||
|
||||
oldestTexture.Group.SynchronizeDependents(oldestTexture);
|
||||
oldestTexture.Flush(false);
|
||||
}
|
||||
|
||||
_textures.RemoveFirst();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue