From a830eb666b058df38f734c6369eb18cc7212f36c Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sun, 7 Jul 2024 19:33:28 -0300 Subject: Disallow concurrent fence waits on Adreno (#7001) * Disallow concurrent fence waits on Adreno * Ensure locks are released if exceptions are thrown --- src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs') diff --git a/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs b/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs index 806b872b..b4252471 100644 --- a/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs @@ -196,18 +196,23 @@ namespace Ryujinx.Graphics.Vulkan bool signaled = true; - if (hasTimeout) + try { - signaled = FenceHelper.AllSignaled(api, device, fences[..fenceCount], timeout); - } - else - { - FenceHelper.WaitAllIndefinitely(api, device, fences[..fenceCount]); + if (hasTimeout) + { + signaled = FenceHelper.AllSignaled(api, device, fences[..fenceCount], timeout); + } + else + { + FenceHelper.WaitAllIndefinitely(api, device, fences[..fenceCount]); + } } - - for (int i = 0; i < fenceCount; i++) + finally { - fenceHolders[i].Put(); + for (int i = 0; i < fenceCount; i++) + { + fenceHolders[i].PutLock(); + } } return signaled; -- cgit v1.2.3