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 13 class GrBackendSemaphore; 14 class GrGpu; 15 16 class GrSemaphore : public SkRefCnt { 17 private: 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. resetGpu(const GrGpu * gpu)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 29 protected: GrSemaphore(const GrGpu * gpu)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