| /* |
| * Copyright 2017 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef GrSemaphore_DEFINED |
| #define GrSemaphore_DEFINED |
| |
| #include "include/gpu/GrBackendSemaphore.h" |
| #include "include/gpu/GrGpuResource.h" |
| |
| /** |
| * Represents a semaphore-like GPU synchronization object. This is a slightly odd fit for |
| * GrGpuResource because we don't care about budgeting, recycling, or read/write references for |
| * these. However, making it a GrGpuResource makes it simpler to handle releasing/abandoning these |
| * along with other resources. If more cases like this arise we could consider moving some of the |
| * unused functionality off of GrGpuResource. |
| */ |
| class GrSemaphore { |
| public: |
| virtual ~GrSemaphore() {} |
| |
| // The derived class can return its GrBackendSemaphore. This is used when flushing with signal |
| // semaphores so we can set the client's GrBackendSemaphore object after we've created the |
| // internal semaphore. |
| virtual GrBackendSemaphore backendSemaphore() const = 0; |
| |
| private: |
| friend class GrGpu; // for setIsOwned |
| // This is only used in GrGpu to handle the case where we created a semaphore that was meant to |
| // be borrowed, but we failed to submit it. So we must go back and switch the semaphore to owned |
| // so that it gets deleted. |
| virtual void setIsOwned() = 0; |
| }; |
| |
| #endif |