|
|
@@ -102,9 +102,9 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|
|
public bool AlwaysFlushOnOverlap { get; private set; }
|
|
|
|
|
|
/// <summary>
|
|
|
- /// Indicates that the texture was fully unmapped since the modified flag was set, and flushes should be ignored until it is modified again.
|
|
|
+ /// Indicates that the texture was modified since the last time it was flushed.
|
|
|
/// </summary>
|
|
|
- public bool FlushStale { get; private set; }
|
|
|
+ public bool ModifiedSinceLastFlush { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// Increments when the host texture is swapped, or when the texture is removed from all pools.
|
|
|
@@ -1417,7 +1417,6 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|
|
/// </summary>
|
|
|
public void SignalModified()
|
|
|
{
|
|
|
- FlushStale = false;
|
|
|
_scaledSetScore = Math.Max(0, _scaledSetScore - 1);
|
|
|
|
|
|
if (_modifiedStale || Group.HasCopyDependencies)
|
|
|
@@ -1438,14 +1437,17 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|
|
{
|
|
|
if (bound)
|
|
|
{
|
|
|
- FlushStale = false;
|
|
|
_scaledSetScore = Math.Max(0, _scaledSetScore - 1);
|
|
|
}
|
|
|
|
|
|
if (_modifiedStale || Group.HasCopyDependencies || Group.HasFlushBuffer)
|
|
|
{
|
|
|
_modifiedStale = false;
|
|
|
- Group.SignalModifying(this, bound);
|
|
|
+
|
|
|
+ if (bound || ModifiedSinceLastFlush || Group.HasCopyDependencies || Group.HasFlushBuffer)
|
|
|
+ {
|
|
|
+ Group.SignalModifying(this, bound);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
_physicalMemory.TextureCache.Lift(this);
|
|
|
@@ -1703,12 +1705,6 @@ namespace Ryujinx.Graphics.Gpu.Image
|
|
|
/// <param name="unmapRange">The range of memory being unmapped</param>
|
|
|
public void Unmapped(MultiRange unmapRange)
|
|
|
{
|
|
|
- if (unmapRange.Contains(Range))
|
|
|
- {
|
|
|
- // If this is a full unmap, prevent flushes until the texture is mapped again.
|
|
|
- FlushStale = true;
|
|
|
- }
|
|
|
-
|
|
|
ChangedMapping = true;
|
|
|
|
|
|
if (Group.Storage == this)
|