| /* |
| * Copyright 2023 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "include/gpu/graphite/BackendSemaphore.h" |
| |
| namespace skgpu::graphite { |
| |
| BackendSemaphore::BackendSemaphore() = default; |
| |
| BackendSemaphore::~BackendSemaphore() = default; |
| |
| BackendSemaphore::BackendSemaphore(const BackendSemaphore& that) { |
| *this = that; |
| } |
| |
| BackendSemaphore& BackendSemaphore::operator=(const BackendSemaphore& that) { |
| if (!that.isValid()) { |
| fIsValid = false; |
| return *this; |
| } |
| SkASSERT(!this->isValid() || this->backend() == that.backend()); |
| fIsValid = true; |
| fBackend = that.fBackend; |
| |
| switch (that.backend()) { |
| #ifdef SK_DAWN |
| case BackendApi::kDawn: |
| SK_ABORT("Unsupported Backend"); |
| #endif |
| #ifdef SK_METAL |
| case BackendApi::kMetal: |
| fMtlEvent = that.fMtlEvent; |
| fMtlValue = that.fMtlValue; |
| break; |
| #endif |
| #ifdef SK_VULKAN |
| case BackendApi::kVulkan: |
| fVkSemaphore = that.fVkSemaphore; |
| break; |
| #endif |
| default: |
| SK_ABORT("Unsupported Backend"); |
| } |
| return *this; |
| } |
| |
| #ifdef SK_METAL |
| BackendSemaphore::BackendSemaphore(CFTypeRef mtlEvent, uint64_t value) |
| : fMtlEvent(mtlEvent) |
| , fMtlValue(value) {} |
| |
| CFTypeRef BackendSemaphore::getMtlEvent() const { |
| if (this->isValid() && this->backend() == BackendApi::kMetal) { |
| return fMtlEvent; |
| } |
| return nullptr; |
| } |
| |
| uint64_t BackendSemaphore::getMtlValue() const { |
| if (this->isValid() && this->backend() == BackendApi::kMetal) { |
| return fMtlValue; |
| } |
| return 0; |
| } |
| #endif // SK_METAL |
| |
| #ifdef SK_VULKAN |
| BackendSemaphore::BackendSemaphore(VkSemaphore semaphore) |
| : fVkSemaphore(semaphore) |
| , fIsValid(true) |
| , fBackend(BackendApi::kVulkan) {} |
| |
| VkSemaphore BackendSemaphore::getVkSemaphore() const { |
| if (this->isValid() && this->backend() == BackendApi::kVulkan) { |
| return fVkSemaphore; |
| } |
| return VK_NULL_HANDLE; |
| } |
| #endif |
| |
| } // End of namespace skgpu::graphite |