1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2023 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef skgpu_graphite_BackendSemaphore_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_BackendSemaphore_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/GraphiteTypes.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAnySubclass.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker class BackendSemaphoreData; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker class SK_API BackendSemaphore { 20*c8dee2aaSAndroid Build Coastguard Worker public: 21*c8dee2aaSAndroid Build Coastguard Worker BackendSemaphore(); 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker BackendSemaphore(const BackendSemaphore&); 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker ~BackendSemaphore(); 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker BackendSemaphore& operator=(const BackendSemaphore&); 28*c8dee2aaSAndroid Build Coastguard Worker isValid()29*c8dee2aaSAndroid Build Coastguard Worker bool isValid() const { return fIsValid; } backend()30*c8dee2aaSAndroid Build Coastguard Worker BackendApi backend() const { return fBackend; } 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker private: 33*c8dee2aaSAndroid Build Coastguard Worker friend class BackendSemaphoreData; 34*c8dee2aaSAndroid Build Coastguard Worker friend class BackendSemaphorePriv; 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker // Size determined by looking at the BackendSemaphoreData subclasses, then 37*c8dee2aaSAndroid Build Coastguard Worker // guessing-and-checking. Compiler will complain if this is too small - in that case, just 38*c8dee2aaSAndroid Build Coastguard Worker // increase the number. 39*c8dee2aaSAndroid Build Coastguard Worker inline constexpr static size_t kMaxSubclassSize = 24; 40*c8dee2aaSAndroid Build Coastguard Worker using AnyBackendSemaphoreData = SkAnySubclass<BackendSemaphoreData, kMaxSubclassSize>; 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker template <typename SomeBackendSemaphoreData> BackendSemaphore(BackendApi backend,const SomeBackendSemaphoreData & data)43*c8dee2aaSAndroid Build Coastguard Worker BackendSemaphore(BackendApi backend, const SomeBackendSemaphoreData& data) 44*c8dee2aaSAndroid Build Coastguard Worker : fBackend(backend), fIsValid(true) { 45*c8dee2aaSAndroid Build Coastguard Worker fSemaphoreData.emplace<SomeBackendSemaphoreData>(data); 46*c8dee2aaSAndroid Build Coastguard Worker } 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker BackendApi fBackend; 49*c8dee2aaSAndroid Build Coastguard Worker AnyBackendSemaphoreData fSemaphoreData; 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker bool fIsValid = false; 52*c8dee2aaSAndroid Build Coastguard Worker }; 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_BackendSemaphore_DEFINED 57*c8dee2aaSAndroid Build Coastguard Worker 58