blob: da78e0c1f2c609537d3b6a394a6d4f830d41ebaa [file] [log] [blame]
Kevin Lubicke9206d22023-11-20 10:46:02 -05001/*
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
13class GrVkBackendSemaphoreData final : public GrBackendSemaphoreData {
14public:
15 GrVkBackendSemaphoreData(VkSemaphore semaphore) : fSemaphore(semaphore) {}
16
17 VkSemaphore semaphore() const { return fSemaphore; }
18
19private:
20 void copyTo(AnySemaphoreData& data) const override {
21 data.emplace<GrVkBackendSemaphoreData>(fSemaphore);
22 }
23
24#if defined(SK_DEBUG)
25 GrBackendApi type() const override { return GrBackendApi::kVulkan; }
26#endif
27
28 VkSemaphore fSemaphore;
29};
30
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
37namespace GrBackendSemaphores {
38GrBackendSemaphore MakeVk(VkSemaphore semaphore) {
39 GrVkBackendSemaphoreData data(semaphore);
40 return GrBackendSemaphorePriv::MakeGrBackendSemaphore(GrBackendApi::kVulkan, data);
41}
42
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