GrSemaphore.h revision 5131678123839cec0e974069b6d3f047c8a82049
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 "SkRefCnt.h"
12
13class GrBackendSemaphore;
14class GrGpu;
15
16class GrSemaphore : public SkRefCnt {
17private:
18    // This function should only be used in the case of exporting and importing a GrSemaphore object
19    // from one GrContext to another. When exporting, the GrSemaphore should be set to a null GrGpu,
20    // and when importing it should be set to the GrGpu of the current context. Once exported, a
21    // GrSemaphore should not be used with its old context.
22    void resetGpu(const GrGpu* gpu) { fGpu = gpu; }
23
24    // The derived class will init the GrBackendSemaphore. This is used when flushing with signal
25    // semaphores so we can set the clients GrBackendSemaphore object after we've created the
26    // internal semaphore.
27    virtual void setBackendSemaphore(GrBackendSemaphore*) const = 0;
28
29protected:
30    explicit GrSemaphore(const GrGpu* gpu) : fGpu(gpu) {}
31
32    friend class GrGpu; // setBackendSemaphore
33    friend class GrRenderTargetContext; // setBackendSemaphore
34    friend class GrResourceProvider; // resetGpu
35
36    const GrGpu* fGpu;
37};
38
39#endif
40