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 | |
13 | GrBackendSemaphore::~GrBackendSemaphore() { |
14 | if (fIsInitialized && GrBackendApi::kDirect3D == fBackend) { |
15 | delete fD3DFenceInfo; |
16 | fD3DFenceInfo = nullptr; |
17 | fIsInitialized = false; |
18 | } |
19 | } |
20 | |
21 | void 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 | |
30 | bool GrBackendSemaphore::getD3DFenceInfo(GrD3DFenceInfo* outInfo) const { |
31 | if (fIsInitialized && GrBackendApi::kDirect3D == fBackend) { |
32 | *outInfo = *fD3DFenceInfo; |
33 | return true; |
34 | } |
35 | return false; |
36 | } |
37 | |
38 | GrBackendSemaphore::GrBackendSemaphore(const GrBackendSemaphore& that) { |
39 | fIsInitialized = false; |
40 | *this = that; |
41 | } |
42 | |
43 | GrBackendSemaphore& 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 | |