1 /* 2 * Copyright 2020 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 8 #include "include/gpu/GrBackendSemaphore.h" 9 10 #ifdef SK_DIRECT3D 11 #include "include/gpu/d3d/GrD3DTypes.h" 12 ~GrBackendSemaphore()13GrBackendSemaphore::~GrBackendSemaphore() { 14 if (fIsInitialized && GrBackendApi::kDirect3D == fBackend) { 15 delete fD3DFenceInfo; 16 fD3DFenceInfo = nullptr; 17 fIsInitialized = false; 18 } 19 } 20 assignD3DFenceInfo(const GrD3DFenceInfo & info)21void GrBackendSemaphore::assignD3DFenceInfo(const GrD3DFenceInfo& info) { 22 SkASSERT(GrBackendApi::kDirect3D == fBackend); 23 if (fIsInitialized) { 24 *fD3DFenceInfo = info; 25 } else { 26 fD3DFenceInfo = new GrD3DFenceInfo(info); 27 } 28 } 29 getD3DFenceInfo(GrD3DFenceInfo * outInfo) const30bool GrBackendSemaphore::getD3DFenceInfo(GrD3DFenceInfo* outInfo) const { 31 if (fIsInitialized && GrBackendApi::kDirect3D == fBackend) { 32 *outInfo = *fD3DFenceInfo; 33 return true; 34 } 35 return false; 36 } 37 GrBackendSemaphore(const GrBackendSemaphore & that)38GrBackendSemaphore::GrBackendSemaphore(const GrBackendSemaphore& that) { 39 fIsInitialized = false; 40 *this = that; 41 } 42 operator =(const GrBackendSemaphore & that)43GrBackendSemaphore& GrBackendSemaphore::operator=(const GrBackendSemaphore& that) { 44 SkASSERT(!fIsInitialized || fBackend == that.fBackend); 45 fBackend = that.fBackend; 46 switch (that.fBackend) { 47 #ifdef SK_GL 48 case GrBackendApi::kOpenGL: 49 fGLSync = that.fGLSync; 50 break; 51 #endif 52 #ifdef SK_VULKAN 53 case GrBackendApi::kVulkan: 54 fVkSemaphore = that.fVkSemaphore; 55 break; 56 #endif 57 #ifdef SK_METAL 58 case GrBackendApi::kMetal: 59 fMtlEvent = that.fMtlEvent; 60 fMtlValue = that.fMtlValue; 61 break; 62 #endif 63 case GrBackendApi::kDirect3D: 64 this->assignD3DFenceInfo(*that.fD3DFenceInfo); 65 break; 66 default: 67 SK_ABORT("Unknown GrBackend"); 68 } 69 fIsInitialized = true; 70 return *this; 71 } 72 73 #endif // SK_DIRECT3D 74