iwa/source/fence.cpp
2024-04-06 14:11:26 +02:00

39 lines
807 B
C++

#include "iwa/fence.hpp"
#include "iwa/device.hpp"
namespace iwa
{
Fence::Fence(ObjectPtr<Device> owner, const FenceCreationArgs& args) : super_t(std::move(owner))
{
mHandle = getOwner()->getVkHandle().createFence(vk::FenceCreateInfo{
.flags = args.flags
});
}
Fence::~Fence() noexcept
{
IWA_DELETE_DEVICE_OBJECT(getOwner(), mHandle, destroyFence)
}
bool Fence::isDone() const
{
return getOwner()->getVkHandle().waitForFences(mHandle, VK_TRUE, 0) != vk::Result::eTimeout;
}
mijin::Task<> Fence::c_wait() const
{
while (getOwner()->getVkHandle().waitForFences(mHandle, VK_TRUE, 0) == vk::Result::eTimeout)
{
co_await mijin::c_suspend();
}
co_return;
}
void Fence::reset() const
{
getOwner()->getVkHandle().resetFences(mHandle);
}
} // namespace iwa