1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 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_SharedContext_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_SharedContext_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/GraphiteTypes.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/GlobalCache.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/ShaderCodeDictionary.h" 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { 20*c8dee2aaSAndroid Build Coastguard Worker class SingleOwner; 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker class BackendTexture; 26*c8dee2aaSAndroid Build Coastguard Worker class Caps; 27*c8dee2aaSAndroid Build Coastguard Worker class CommandBuffer; 28*c8dee2aaSAndroid Build Coastguard Worker class Context; 29*c8dee2aaSAndroid Build Coastguard Worker class RendererProvider; 30*c8dee2aaSAndroid Build Coastguard Worker class ResourceProvider; 31*c8dee2aaSAndroid Build Coastguard Worker class TextureInfo; 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker class SharedContext : public SkRefCnt { 34*c8dee2aaSAndroid Build Coastguard Worker public: 35*c8dee2aaSAndroid Build Coastguard Worker ~SharedContext() override; 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker /** 38*c8dee2aaSAndroid Build Coastguard Worker * Gets the capabilities of the draw target. 39*c8dee2aaSAndroid Build Coastguard Worker */ caps()40*c8dee2aaSAndroid Build Coastguard Worker const Caps* caps() const { return fCaps.get(); } 41*c8dee2aaSAndroid Build Coastguard Worker backend()42*c8dee2aaSAndroid Build Coastguard Worker BackendApi backend() const { return fBackend; } 43*c8dee2aaSAndroid Build Coastguard Worker Protected isProtected() const; 44*c8dee2aaSAndroid Build Coastguard Worker globalCache()45*c8dee2aaSAndroid Build Coastguard Worker GlobalCache* globalCache() { return &fGlobalCache; } globalCache()46*c8dee2aaSAndroid Build Coastguard Worker const GlobalCache* globalCache() const { return &fGlobalCache; } 47*c8dee2aaSAndroid Build Coastguard Worker rendererProvider()48*c8dee2aaSAndroid Build Coastguard Worker const RendererProvider* rendererProvider() const { return fRendererProvider.get(); } 49*c8dee2aaSAndroid Build Coastguard Worker shaderCodeDictionary()50*c8dee2aaSAndroid Build Coastguard Worker ShaderCodeDictionary* shaderCodeDictionary() { return &fShaderDictionary; } shaderCodeDictionary()51*c8dee2aaSAndroid Build Coastguard Worker const ShaderCodeDictionary* shaderCodeDictionary() const { return &fShaderDictionary; } 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker virtual std::unique_ptr<ResourceProvider> makeResourceProvider(SingleOwner*, 54*c8dee2aaSAndroid Build Coastguard Worker uint32_t recorderID, 55*c8dee2aaSAndroid Build Coastguard Worker size_t resourceBudget, 56*c8dee2aaSAndroid Build Coastguard Worker bool avoidBufferAlloc) = 0; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker // Called by Context::isContextLost(). Returns true if the backend-specific SharedContext has 59*c8dee2aaSAndroid Build Coastguard Worker // gotten into an unrecoverable, lost state. isDeviceLost()60*c8dee2aaSAndroid Build Coastguard Worker virtual bool isDeviceLost() const { return false; } 61*c8dee2aaSAndroid Build Coastguard Worker deviceTick(Context *)62*c8dee2aaSAndroid Build Coastguard Worker virtual void deviceTick(Context*) {} 63*c8dee2aaSAndroid Build Coastguard Worker 64*c8dee2aaSAndroid Build Coastguard Worker protected: 65*c8dee2aaSAndroid Build Coastguard Worker SharedContext(std::unique_ptr<const Caps>, BackendApi); 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Worker private: 68*c8dee2aaSAndroid Build Coastguard Worker friend class Context; // for setRendererProvider() 69*c8dee2aaSAndroid Build Coastguard Worker 70*c8dee2aaSAndroid Build Coastguard Worker // Must be created out-of-band to allow RenderSteps to use a QueueManager. 71*c8dee2aaSAndroid Build Coastguard Worker void setRendererProvider(std::unique_ptr<RendererProvider> rendererProvider); 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<const Caps> fCaps; // Provided by backend subclass 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker BackendApi fBackend; 76*c8dee2aaSAndroid Build Coastguard Worker GlobalCache fGlobalCache; 77*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<RendererProvider> fRendererProvider; 78*c8dee2aaSAndroid Build Coastguard Worker ShaderCodeDictionary fShaderDictionary; 79*c8dee2aaSAndroid Build Coastguard Worker }; 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 82*c8dee2aaSAndroid Build Coastguard Worker 83*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_SharedContext_DEFINED 84