39 lines
807 B
C++
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
|