| // 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 "src/ui/lib/escher/renderer/semaphore.h" |
| |
| #include "src/ui/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::eTempZirconEventFUCHSIA); |
| 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 |