/* * 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 GrGpuResource { public: // 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; const char* getResourceType() const override { return "semaphore"; } protected: explicit GrSemaphore(GrGpu* gpu) : INHERITED(gpu) {} private: size_t onGpuMemorySize() const override { return 0; } typedef GrGpuResource INHERITED; }; #endif