aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2024-07-07 19:33:28 -0300
committerGitHub <noreply@github.com>2024-07-07 19:33:28 -0300
commita830eb666b058df38f734c6369eb18cc7212f36c (patch)
tree5c23278f5452153405975825f640659cb5f7e5bd /src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs
parentcfc75d7e78a63fe3bde06b6e4896a42e8dedaf82 (diff)
Disallow concurrent fence waits on Adreno (#7001)
* Disallow concurrent fence waits on Adreno * Ensure locks are released if exceptions are thrown
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs23
1 files changed, 14 insertions, 9 deletions
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;