1/*
2 * Copyright 2017 Google Inc.
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#ifndef GrSemaphore_DEFINED
9#define GrSemaphore_DEFINED
10
11#include "include/gpu/GrBackendSemaphore.h"
12#include "src/gpu/GrGpuResource.h"
13
14/**
15 * Represents a semaphore-like GPU synchronization object. This is a slightly odd fit for
16 * GrGpuResource because we don't care about budgeting, recycling, or read/write references for
17 * these. However, making it a GrGpuResource makes it simpler to handle releasing/abandoning these
18 * along with other resources. If more cases like this arise we could consider moving some of the
19 * unused functionality off of GrGpuResource.
20 */
21class GrSemaphore {
22public:
23 virtual ~GrSemaphore() {}
24
25 // The derived class can return its GrBackendSemaphore. This is used when flushing with signal
26 // semaphores so we can set the client's GrBackendSemaphore object after we've created the
27 // internal semaphore.
28 virtual GrBackendSemaphore backendSemaphore() const = 0;
29
30private:
31 friend class GrGpu; // for setIsOwned
32 // This is only used in GrGpu to handle the case where we created a semaphore that was meant to
33 // be borrowed, but we failed to submit it. So we must go back and switch the semaphore to owned
34 // so that it gets deleted.
35 virtual void setIsOwned() = 0;
36};
37
38#endif
39