From 4f63782baccb530dcf9c5da1a32c6f257e61bc28 Mon Sep 17 00:00:00 2001 From: riperiperi Date: Thu, 22 Feb 2024 02:41:08 +0000 Subject: [PATCH] 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. --- src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs b/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs index 3b44c98c13..aa158f0367 100644 --- a/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs +++ b/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs @@ -95,6 +95,7 @@ namespace Ryujinx.Graphics.Vulkan List> list) where T : unmanaged { int firstMatch = -1; + int end = list.Count; for (int i = 0; i < list.Count; i++) { @@ -111,6 +112,7 @@ namespace Ryujinx.Graphics.Vulkan if (count >= target.Length) { + end = i + 1; break; } } @@ -128,6 +130,7 @@ namespace Ryujinx.Graphics.Vulkan if (count >= target.Length) { + end = i + 1; break; } } @@ -146,13 +149,13 @@ namespace Ryujinx.Graphics.Vulkan } } - if (firstMatch == 0) + if (firstMatch == 0 && end == list.Count) { list.Clear(); } else if (firstMatch != -1) { - int deleteCount = list.Count - firstMatch; + int deleteCount = end - firstMatch; list.RemoveRange(firstMatch, deleteCount); }