Disallow concurrent fence waits on Adreno (#7001)

* Disallow concurrent fence waits on Adreno

* Ensure locks are released if exceptions are thrown
This commit is contained in:
gdkchan
2024-07-07 19:33:28 -03:00
committed by GitHub
parent cfc75d7e78
commit a830eb666b
5 changed files with 108 additions and 22 deletions

View File

@@ -196,18 +196,23 @@ namespace Ryujinx.Graphics.Vulkan
bool signaled = true;
if (hasTimeout)
try
{
signaled = FenceHelper.AllSignaled(api, device, fences[..fenceCount], timeout);
if (hasTimeout)
{
signaled = FenceHelper.AllSignaled(api, device, fences[..fenceCount], timeout);
}
else
{
FenceHelper.WaitAllIndefinitely(api, device, fences[..fenceCount]);
}
}
else
finally
{
FenceHelper.WaitAllIndefinitely(api, device, fences[..fenceCount]);
}
for (int i = 0; i < fenceCount; i++)
{
fenceHolders[i].Put();
for (int i = 0; i < fenceCount; i++)
{
fenceHolders[i].PutLock();
}
}
return signaled;