From 48adca40f54415671f63ae501d4e470ad6005c40 Mon Sep 17 00:00:00 2001 From: Martin Bai Date: Thu, 25 Dec 2025 13:47:27 +0000 Subject: [PATCH 1/2] Add max retries to BufferedQuery regardless of the presence of wakeSignal, fixed freezing at character selection screen of Super Mario Party Jamboree --- .../Queries/BufferedQuery.cs | 25 ++++--------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs b/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs index 4763007f4..f9074d06f 100644 --- a/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs +++ b/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs @@ -145,28 +145,13 @@ namespace Ryujinx.Graphics.Vulkan.Queries { long data = _defaultValue; - if (wakeSignal == null) + int iterations = 0; + while (WaitingForValue(data) && iterations++ < MaxQueryRetries) { - while (WaitingForValue(data)) + data = Marshal.ReadInt64(_bufferMap); + if (wakeSignal != null && WaitingForValue(data)) { - data = Marshal.ReadInt64(_bufferMap); - } - } - else - { - int iterations = 0; - while (WaitingForValue(data) && iterations++ < MaxQueryRetries) - { - data = Marshal.ReadInt64(_bufferMap); - if (WaitingForValue(data)) - { - wakeSignal.WaitOne(1); - } - } - - if (iterations >= MaxQueryRetries) - { - Logger.Error?.Print(LogClass.Gpu, $"Error: Query result {_type} timed out. Took more than {MaxQueryRetries} tries."); + wakeSignal.WaitOne(0); } } From c29c68ec42adc8316d3ebff1ce1b584db7d038f9 Mon Sep 17 00:00:00 2001 From: Martin Bai Date: Thu, 25 Dec 2025 14:08:34 +0000 Subject: [PATCH 2/2] Add error log output when max retried reached --- src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs b/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs index f9074d06f..ff3e372f3 100644 --- a/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs +++ b/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs @@ -155,6 +155,11 @@ namespace Ryujinx.Graphics.Vulkan.Queries } } + if (iterations >= MaxQueryRetries) + { + Logger.Error?.Print(LogClass.Gpu, $"Error: Query result {_type} timed out. Took more than {MaxQueryRetries} tries."); + } + return data; }