| /* | |
| * 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 |