31 lines
1.0 KiB
C#
31 lines
1.0 KiB
C#
|
using Silk.NET.Vulkan;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace Ryujinx.Graphics.Vulkan
|
|||
|
{
|
|||
|
static class FenceHelper
|
|||
|
{
|
|||
|
private const ulong DefaultTimeout = 100000000; // 100ms
|
|||
|
|
|||
|
public static bool AnySignaled(Vk api, Device device, ReadOnlySpan<Fence> fences, ulong timeout = 0)
|
|||
|
{
|
|||
|
return api.WaitForFences(device, (uint)fences.Length, fences, false, timeout) == Result.Success;
|
|||
|
}
|
|||
|
|
|||
|
public static bool AllSignaled(Vk api, Device device, ReadOnlySpan<Fence> fences, ulong timeout = 0)
|
|||
|
{
|
|||
|
return api.WaitForFences(device, (uint)fences.Length, fences, true, timeout) == Result.Success;
|
|||
|
}
|
|||
|
|
|||
|
public static void WaitAllIndefinitely(Vk api, Device device, ReadOnlySpan<Fence> fences)
|
|||
|
{
|
|||
|
Result result;
|
|||
|
while ((result = api.WaitForFences(device, (uint)fences.Length, fences, true, DefaultTimeout)) == Result.Timeout)
|
|||
|
{
|
|||
|
// Keep waiting while the fence is not signaled.
|
|||
|
}
|
|||
|
result.ThrowOnError();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|