blob: ccbff368bfb95a715b526c1ef2f5b5bf22a292f5 [file] [log] [blame]
/*
* 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