1 /* 2 * Copyright 2023 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 #include "include/gpu/ganesh/vk/GrVkBackendSemaphore.h" 8 9 #include "include/gpu/GrTypes.h" 10 #include "include/private/base/SkAssert.h" 11 #include "src/gpu/ganesh/GrBackendSemaphorePriv.h" 12 13 class GrVkBackendSemaphoreData final : public GrBackendSemaphoreData { 14 public: GrVkBackendSemaphoreData(VkSemaphore semaphore)15 GrVkBackendSemaphoreData(VkSemaphore semaphore) : fSemaphore(semaphore) {} 16 semaphore() const17 VkSemaphore semaphore() const { return fSemaphore; } 18 19 private: copyTo(AnySemaphoreData & data) const20 void copyTo(AnySemaphoreData& data) const override { 21 data.emplace<GrVkBackendSemaphoreData>(fSemaphore); 22 } 23 24 #if defined(SK_DEBUG) type() const25 GrBackendApi type() const override { return GrBackendApi::kVulkan; } 26 #endif 27 28 VkSemaphore fSemaphore; 29 }; 30 get_and_cast_data(const GrBackendSemaphore & sem)31static const GrVkBackendSemaphoreData* get_and_cast_data(const GrBackendSemaphore& sem) { 32 auto data = GrBackendSemaphorePriv::GetBackendData(sem); 33 SkASSERT(!data || data->type() == GrBackendApi::kVulkan); 34 return static_cast<const GrVkBackendSemaphoreData*>(data); 35 } 36 37 namespace GrBackendSemaphores { MakeVk(VkSemaphore semaphore)38GrBackendSemaphore MakeVk(VkSemaphore semaphore) { 39 GrVkBackendSemaphoreData data(semaphore); 40 return GrBackendSemaphorePriv::MakeGrBackendSemaphore(GrBackendApi::kVulkan, data); 41 } 42 GetVkSemaphore(const GrBackendSemaphore & sem)43VkSemaphore GetVkSemaphore(const GrBackendSemaphore& sem) { 44 SkASSERT(sem.backend() == GrBackendApi::kVulkan); 45 const GrVkBackendSemaphoreData* data = get_and_cast_data(sem); 46 SkASSERT(data); 47 return data->semaphore(); 48 } 49 } // namespace GrBackendSemaphores 50