Procházet zdrojové kódy

Work around issue apparently caused by 5909 (#5926)

gdkchan před 2 roky
rodič
revize
1329c47ea4

+ 1 - 5
src/Ryujinx.Graphics.Gpu/Image/Texture.cs

@@ -1443,11 +1443,7 @@ namespace Ryujinx.Graphics.Gpu.Image
             if (_modifiedStale || Group.HasCopyDependencies || Group.HasFlushBuffer)
             {
                 _modifiedStale = false;
-
-                if (bound || ModifiedSinceLastFlush || Group.HasCopyDependencies || Group.HasFlushBuffer)
-                {
-                    Group.SignalModifying(this, bound);
-                }
+                Group.SignalModifying(this, bound, bound || ModifiedSinceLastFlush || Group.HasCopyDependencies || Group.HasFlushBuffer);
             }
 
             _physicalMemory.TextureCache.Lift(this);

+ 3 - 2
src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs

@@ -709,7 +709,8 @@ namespace Ryujinx.Graphics.Gpu.Image
         /// </summary>
         /// <param name="texture">The texture that has been modified</param>
         /// <param name="bound">True if this texture is being bound, false if unbound</param>
-        public void SignalModifying(Texture texture, bool bound)
+        /// <param name="setModified">Indicates if the modified flag should be set</param>
+        public void SignalModifying(Texture texture, bool bound, bool setModified)
         {
             ModifiedSequence = _context.GetModifiedSequence();
 
@@ -721,7 +722,7 @@ namespace Ryujinx.Graphics.Gpu.Image
                 {
                     TextureGroupHandle group = _handles[baseHandle + i];
 
-                    group.SignalModifying(bound, _context);
+                    group.SignalModifying(bound, _context, setModified);
                 }
             });
         }

+ 10 - 2
src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs

@@ -304,9 +304,17 @@ namespace Ryujinx.Graphics.Gpu.Image
         /// </summary>
         /// <param name="bound">True if this handle is being bound, false if unbound</param>
         /// <param name="context">The GPU context to register a sync action on</param>
-        public void SignalModifying(bool bound, GpuContext context)
+        /// <param name="setModified">Indicates if the modified flag should be set</param>
+        public void SignalModifying(bool bound, GpuContext context, bool setModified)
         {
-            SignalModified(context);
+            if (setModified)
+            {
+                SignalModified(context);
+            }
+            else
+            {
+                RegisterSync(context);
+            }
 
             if (!bound && _syncActionRegistered && NextSyncCopies())
             {