blob: da78e0c1f2c609537d3b6a394a6d4f830d41ebaa [file] [log] [blame]
/*
* 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/ganesh/vk/GrVkBackendSemaphore.h"
#include "include/gpu/GrTypes.h"
#include "include/private/base/SkAssert.h"
#include "src/gpu/ganesh/GrBackendSemaphorePriv.h"
class GrVkBackendSemaphoreData final : public GrBackendSemaphoreData {
public:
GrVkBackendSemaphoreData(VkSemaphore semaphore) : fSemaphore(semaphore) {}
VkSemaphore semaphore() const { return fSemaphore; }
private:
void copyTo(AnySemaphoreData& data) const override {
data.emplace<GrVkBackendSemaphoreData>(fSemaphore);
}
#if defined(SK_DEBUG)
GrBackendApi type() const override { return GrBackendApi::kVulkan; }
#endif
VkSemaphore fSemaphore;
};
static const GrVkBackendSemaphoreData* get_and_cast_data(const GrBackendSemaphore& sem) {
auto data = GrBackendSemaphorePriv::GetBackendData(sem);
SkASSERT(!data || data->type() == GrBackendApi::kVulkan);
return static_cast<const GrVkBackendSemaphoreData*>(data);
}
namespace GrBackendSemaphores {
GrBackendSemaphore MakeVk(VkSemaphore semaphore) {
GrVkBackendSemaphoreData data(semaphore);
return GrBackendSemaphorePriv::MakeGrBackendSemaphore(GrBackendApi::kVulkan, data);
}
VkSemaphore GetVkSemaphore(const GrBackendSemaphore& sem) {
SkASSERT(sem.backend() == GrBackendApi::kVulkan);
const GrVkBackendSemaphoreData* data = get_and_cast_data(sem);
SkASSERT(data);
return data->semaphore();
}
} // namespace GrBackendSemaphores