/* * Copyright 2020 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/GrBackendSemaphore.h" #ifdef SK_DIRECT3D #include "include/gpu/d3d/GrD3DTypes.h" GrBackendSemaphore::~GrBackendSemaphore() { if (fIsInitialized && GrBackendApi::kDirect3D == fBackend) { delete fD3DFenceInfo; fD3DFenceInfo = nullptr; fIsInitialized = false; } } void GrBackendSemaphore::assignD3DFenceInfo(const GrD3DFenceInfo& info) { SkASSERT(GrBackendApi::kDirect3D == fBackend); if (fIsInitialized) { *fD3DFenceInfo = info; } else { fD3DFenceInfo = new GrD3DFenceInfo(info); } } bool GrBackendSemaphore::getD3DFenceInfo(GrD3DFenceInfo* outInfo) const { if (fIsInitialized && GrBackendApi::kDirect3D == fBackend) { *outInfo = *fD3DFenceInfo; return true; } return false; } GrBackendSemaphore::GrBackendSemaphore(const GrBackendSemaphore& that) { fIsInitialized = false; *this = that; } GrBackendSemaphore& GrBackendSemaphore::operator=(const GrBackendSemaphore& that) { SkASSERT(!fIsInitialized || fBackend == that.fBackend); fBackend = that.fBackend; switch (that.fBackend) { #ifdef SK_GL case GrBackendApi::kOpenGL: fGLSync = that.fGLSync; break; #endif #ifdef SK_VULKAN case GrBackendApi::kVulkan: fVkSemaphore = that.fVkSemaphore; break; #endif #ifdef SK_METAL case GrBackendApi::kMetal: fMtlEvent = that.fMtlEvent; fMtlValue = that.fMtlValue; break; #endif case GrBackendApi::kDirect3D: this->assignD3DFenceInfo(*that.fD3DFenceInfo); break; default: SK_ABORT("Unknown GrBackend"); } fIsInitialized = true; return *this; } #endif // SK_DIRECT3D