Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
ResourceProvider.h
Go to the documentation of this file.
1/*
2 * Copyright 2021 Google LLC
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 skgpu_graphite_ResourceProvider_DEFINED
9#define skgpu_graphite_ResourceProvider_DEFINED
10
11#include "include/core/SkSize.h"
13#include "src/core/SkLRUCache.h"
14#include "src/gpu/ResourceKey.h"
18
19struct AHardwareBuffer;
22
23namespace skgpu {
24class SingleOwner;
25}
26
27namespace SkSL {
28 class Compiler;
29}
30
31namespace skgpu::graphite {
32
33class BackendTexture;
34class Buffer;
35class Caps;
36class ComputePipeline;
37class ComputePipelineDesc;
38class GlobalCache;
39class GraphicsPipeline;
40class GraphicsPipelineDesc;
41class GraphiteResourceKey;
42class ResourceCache;
43class RuntimeEffectDictionary;
44class ShaderCodeDictionary;
45class Sampler;
46class SharedContext;
47class Texture;
48class TextureInfo;
49
51public:
52 virtual ~ResourceProvider();
53
54 // The runtime effect dictionary provides a link between SkCodeSnippetIds referenced in the
55 // paint key and the current SkRuntimeEffect that provides the SkSL for that id.
58 const RenderPassDesc&);
59
61
64
66 const TextureInfo&);
67
69 const TextureInfo&);
70
74 std::string_view label);
75
77
80
81 ProxyCache* proxyCache() { return fResourceCache->proxyCache(); }
82
83 size_t getResourceCacheLimit() const { return fResourceCache->getMaxBudget(); }
85 return fResourceCache->currentBudgetedBytes();
86 }
87
88 void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const {
89 fResourceCache->dumpMemoryStatistics(traceMemoryDump);
90 }
91
92 void freeGpuResources();
93 void purgeResourcesNotUsedSince(StdSteadyClock::time_point purgeTime);
94
95#if defined(GRAPHITE_TEST_UTILS)
96 ResourceCache* resourceCache() { return fResourceCache.get(); }
97 const SharedContext* sharedContext() { return fSharedContext; }
98#endif
99
100#ifdef SK_BUILD_FOR_ANDROID
101 virtual BackendTexture createBackendTexture(AHardwareBuffer*,
102 bool isRenderable,
103 bool isProtectedContent,
104 SkISize dimensions,
105 bool fromAndroidWindow) const;
106#endif
107
108protected:
109 ResourceProvider(SharedContext* sharedContext,
110 SingleOwner* singleOwner,
111 uint32_t recorderID,
112 size_t resourceBudget);
113
115 // Each ResourceProvider owns one local cache; for some resources it also refers out to the
116 // global cache of the SharedContext, which is assumed to outlive the ResourceProvider.
118
119private:
122 const RenderPassDesc&) = 0;
125 virtual sk_sp<Buffer> createBuffer(size_t size,
128 std::string_view label) = 0;
130
131 sk_sp<Texture> findOrCreateTextureWithKey(SkISize dimensions,
132 const TextureInfo& info,
135
137#ifdef SK_BUILD_FOR_ANDROID
139 bool isRenderable,
140 bool isProtectedContent,
141 SkISize dimensions,
142 bool fromAndroidWindow) const;
143#endif
144 virtual void onDeleteBackendTexture(const BackendTexture&) = 0;
145};
146
147} // namespace skgpu::graphite
148
149#endif // skgpu_graphite_ResourceProvider_DEFINED
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213
struct AHardwareBuffer AHardwareBuffer
sk_sp< GraphicsPipeline > findOrCreateGraphicsPipeline(const RuntimeEffectDictionary *, const GraphicsPipelineDesc &, const RenderPassDesc &)
sk_sp< Texture > findOrCreateDiscardableMSAAAttachment(SkISize dimensions, const TextureInfo &)
sk_sp< ComputePipeline > findOrCreateComputePipeline(const ComputePipelineDesc &)
virtual sk_sp< Sampler > createSampler(const SamplerDesc &)=0
void purgeResourcesNotUsedSince(StdSteadyClock::time_point purgeTime)
virtual BackendTexture onCreateBackendTexture(SkISize dimensions, const TextureInfo &)=0
virtual sk_sp< Texture > createWrappedTexture(const BackendTexture &)=0
sk_sp< Sampler > findOrCreateCompatibleSampler(const SamplerDesc &)
BackendTexture createBackendTexture(SkISize dimensions, const TextureInfo &)
sk_sp< Texture > findOrCreateDepthStencilAttachment(SkISize dimensions, const TextureInfo &)
virtual sk_sp< Buffer > createBuffer(size_t size, BufferType type, AccessPattern, std::string_view label)=0
void deleteBackendTexture(const BackendTexture &)
virtual sk_sp< GraphicsPipeline > createGraphicsPipeline(const RuntimeEffectDictionary *, const GraphicsPipelineDesc &, const RenderPassDesc &)=0
virtual void onDeleteBackendTexture(const BackendTexture &)=0
sk_sp< Texture > findOrCreateScratchTexture(SkISize, const TextureInfo &, skgpu::Budgeted)
virtual sk_sp< Texture > createTexture(SkISize, const TextureInfo &, skgpu::Budgeted)=0
sk_sp< Buffer > findOrCreateBuffer(size_t size, BufferType type, AccessPattern, std::string_view label)
sk_sp< ResourceCache > fResourceCache
size_t getResourceCacheCurrentBudgetedBytes() const
void dumpMemoryStatistics(SkTraceMemoryDump *traceMemoryDump) const
virtual sk_sp< ComputePipeline > createComputePipeline(const ComputePipelineDesc &)=0
std::function< ProfileSample(void)> Sampler
Sampler is run during SamplingProfiler::SampleRepeatedly. Each platform should implement its version ...
Budgeted
Definition GpuTypes.h:35