#include "iwa/fence.hpp" #include "iwa/device.hpp" namespace iwa { Fence::Fence(ObjectPtr 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