1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2022 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_precompile_PrecompileBasePriv_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_precompile_PrecompileBasePriv_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/PrecompileInternal.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker /** Class that exposes methods to PrecompileBase that are only intended for use internal to Skia. 16*c8dee2aaSAndroid Build Coastguard Worker This class is purely a privileged window into PrecompileBase. It should never have additional 17*c8dee2aaSAndroid Build Coastguard Worker data members or virtual methods. */ 18*c8dee2aaSAndroid Build Coastguard Worker class PrecompileBasePriv { 19*c8dee2aaSAndroid Build Coastguard Worker public: numChildCombinations()20*c8dee2aaSAndroid Build Coastguard Worker int numChildCombinations() const { 21*c8dee2aaSAndroid Build Coastguard Worker return fPrecompileBase->numChildCombinations(); 22*c8dee2aaSAndroid Build Coastguard Worker } 23*c8dee2aaSAndroid Build Coastguard Worker numCombinations()24*c8dee2aaSAndroid Build Coastguard Worker int numCombinations() const { 25*c8dee2aaSAndroid Build Coastguard Worker return fPrecompileBase->numCombinations(); 26*c8dee2aaSAndroid Build Coastguard Worker } 27*c8dee2aaSAndroid Build Coastguard Worker addToKey(const KeyContext & keyContext,PaintParamsKeyBuilder * builder,PipelineDataGatherer * gatherer,int desiredCombination)28*c8dee2aaSAndroid Build Coastguard Worker void addToKey(const KeyContext& keyContext, 29*c8dee2aaSAndroid Build Coastguard Worker PaintParamsKeyBuilder* builder, 30*c8dee2aaSAndroid Build Coastguard Worker PipelineDataGatherer* gatherer, 31*c8dee2aaSAndroid Build Coastguard Worker int desiredCombination) const { 32*c8dee2aaSAndroid Build Coastguard Worker fPrecompileBase->addToKey(keyContext, builder, gatherer, desiredCombination); 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker private: 36*c8dee2aaSAndroid Build Coastguard Worker friend class PrecompileBase; // to construct/copy this type. 37*c8dee2aaSAndroid Build Coastguard Worker PrecompileBasePriv(PrecompileBase * precompileBase)38*c8dee2aaSAndroid Build Coastguard Worker explicit PrecompileBasePriv(PrecompileBase* precompileBase) 39*c8dee2aaSAndroid Build Coastguard Worker : fPrecompileBase(precompileBase) { 40*c8dee2aaSAndroid Build Coastguard Worker } 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker PrecompileBasePriv& operator=(const PrecompileBasePriv&) = delete; 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker // No taking addresses of this type. 45*c8dee2aaSAndroid Build Coastguard Worker const PrecompileBasePriv* operator&() const; 46*c8dee2aaSAndroid Build Coastguard Worker PrecompileBasePriv *operator&(); 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker PrecompileBase* fPrecompileBase; 49*c8dee2aaSAndroid Build Coastguard Worker }; 50*c8dee2aaSAndroid Build Coastguard Worker priv()51*c8dee2aaSAndroid Build Coastguard Workerinline PrecompileBasePriv PrecompileBase::priv() { return PrecompileBasePriv(this); } 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker // NOLINTNEXTLINE(readability-const-return-type) priv()54*c8dee2aaSAndroid Build Coastguard Workerinline const PrecompileBasePriv PrecompileBase::priv() const { 55*c8dee2aaSAndroid Build Coastguard Worker return PrecompileBasePriv(const_cast<PrecompileBase *>(this)); 56*c8dee2aaSAndroid Build Coastguard Worker } 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_precompile_PrecompileBasePriv_DEFINED 61