• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)31 static 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)38 GrBackendSemaphore MakeVk(VkSemaphore semaphore) {
39     GrVkBackendSemaphoreData data(semaphore);
40     return GrBackendSemaphorePriv::MakeGrBackendSemaphore(GrBackendApi::kVulkan, data);
41 }
42 
GetVkSemaphore(const GrBackendSemaphore & sem)43 VkSemaphore 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