blob: f5d62432720affe2c10b63e869602bb2849bc7fd [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "lib/escher/renderer/semaphore.h"
#include "lib/escher/impl/vulkan_utils.h"
namespace escher {
Semaphore::Semaphore(vk::Device device) : Semaphore(device, false) {}
Semaphore::Semaphore(vk::Device device, bool exportable) : device_(device) {
vk::SemaphoreCreateInfo info;
#ifdef __Fuchsia__
vk::ExternalSemaphoreHandleTypeFlags flags(
vk::ExternalSemaphoreHandleTypeFlagBits::eFuchsiaFenceKHR);
vk::ExportSemaphoreCreateInfoKHR export_info(flags);
if (exportable) {
info.pNext = &export_info;
}
#else
FXL_DCHECK(!exportable) << "semaphore export not supported on this platform";
#endif
value_ = ESCHER_CHECKED_VK_RESULT(device_.createSemaphore(info));
}
Semaphore::~Semaphore() { device_.destroySemaphore(value_); }
SemaphorePtr Semaphore::New(vk::Device device) {
return fxl::MakeRefCounted<Semaphore>(device);
}
SemaphorePtr Semaphore::NewExportableSem(vk::Device device) {
return fxl::MakeRefCounted<Semaphore>(device, true);
}
} // namespace escher