blob: 60231044895fde37fc8eed2a794b36ed3c61339e [file] [log] [blame]
Greg Daniel6be35232017-03-01 17:01:09 -05001/*
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
Brian Salomon1e576e72018-08-30 10:20:38 -040011#include "GrBackendSemaphore.h"
Brian Salomon62db8d52018-08-30 10:37:47 -040012#include "GrGpuResource.h"
Greg Daniel6be35232017-03-01 17:01:09 -050013
Brian Salomon62db8d52018-08-30 10:37:47 -040014/**
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 : public GrGpuResource {
Brian Salomon1e576e72018-08-30 10:20:38 -040022public:
23 // The derived class can return its GrBackendSemaphore. This is used when flushing with signal
24 // semaphores so we can set the client's GrBackendSemaphore object after we've created the
Greg Daniela5cb7812017-06-16 09:45:32 -040025 // internal semaphore.
Brian Salomon1e576e72018-08-30 10:20:38 -040026 virtual GrBackendSemaphore backendSemaphore() const = 0;
Greg Daniela5cb7812017-06-16 09:45:32 -040027
Brian Salomon62db8d52018-08-30 10:37:47 -040028 const char* getResourceType() const override { return "semaphore"; }
Greg Daniel6be35232017-03-01 17:01:09 -050029
Brian Salomon62db8d52018-08-30 10:37:47 -040030protected:
31 explicit GrSemaphore(GrGpu* gpu) : INHERITED(gpu) {}
32
33private:
34 size_t onGpuMemorySize() const override { return 0; }
35
36 typedef GrGpuResource INHERITED;
Greg Daniel6be35232017-03-01 17:01:09 -050037};
38
39#endif