diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2024-07-07 19:33:28 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-07 19:33:28 -0300 |
| commit | a830eb666b058df38f734c6369eb18cc7212f36c (patch) | |
| tree | 5c23278f5452153405975825f640659cb5f7e5bd /src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs | |
| parent | cfc75d7e78a63fe3bde06b6e4896a42e8dedaf82 (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.cs | 23 |
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; |
