Przeglądaj źródła

Vulkan: Fix barrier batching past limit (#6339)

If more than 16 barriers were queued at one time, the _queuedBarrierCount would no longer match the number of remaining barriers, because when breaking out of the loop consuming them it deleted all barriers, not just the 16 that were consumed.

Should fix freezes that started occurring with #6240. Fixes issue #6338.
riperiperi 2 lat temu
rodzic
commit
4f63782bac
1 zmienionych plików z 5 dodań i 2 usunięć
  1. 5 2
      src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs

+ 5 - 2
src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs

@@ -95,6 +95,7 @@ namespace Ryujinx.Graphics.Vulkan
                     List<BarrierWithStageFlags<T>> list) where T : unmanaged
                     List<BarrierWithStageFlags<T>> list) where T : unmanaged
                 {
                 {
                     int firstMatch = -1;
                     int firstMatch = -1;
+                    int end = list.Count;
 
 
                     for (int i = 0; i < list.Count; i++)
                     for (int i = 0; i < list.Count; i++)
                     {
                     {
@@ -111,6 +112,7 @@ namespace Ryujinx.Graphics.Vulkan
 
 
                             if (count >= target.Length)
                             if (count >= target.Length)
                             {
                             {
+                                end = i + 1;
                                 break;
                                 break;
                             }
                             }
                         }
                         }
@@ -128,6 +130,7 @@ namespace Ryujinx.Graphics.Vulkan
 
 
                                 if (count >= target.Length)
                                 if (count >= target.Length)
                                 {
                                 {
+                                    end = i + 1;
                                     break;
                                     break;
                                 }
                                 }
                             }
                             }
@@ -146,13 +149,13 @@ namespace Ryujinx.Graphics.Vulkan
                         }
                         }
                     }
                     }
 
 
-                    if (firstMatch == 0)
+                    if (firstMatch == 0 && end == list.Count)
                     {
                     {
                         list.Clear();
                         list.Clear();
                     }
                     }
                     else if (firstMatch != -1)
                     else if (firstMatch != -1)
                     {
                     {
-                        int deleteCount = list.Count - firstMatch;
+                        int deleteCount = end - firstMatch;
 
 
                         list.RemoveRange(firstMatch, deleteCount);
                         list.RemoveRange(firstMatch, deleteCount);
                     }
                     }