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