/src/skia/include/gpu/GrRecordingContext.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright 2019 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 GrRecordingContext_DEFINED |
9 | | #define GrRecordingContext_DEFINED |
10 | | |
11 | | #include "include/core/SkRefCnt.h" |
12 | | #include "include/private/GrImageContext.h" |
13 | | #include "include/private/SkTArray.h" |
14 | | |
15 | | #if GR_GPU_STATS && GR_TEST_UTILS |
16 | | #include <map> |
17 | | #include <string> |
18 | | #endif |
19 | | |
20 | | class GrAuditTrail; |
21 | | class GrBackendFormat; |
22 | | class GrDrawingManager; |
23 | | class GrOnFlushCallbackObject; |
24 | | class GrMemoryPool; |
25 | | class GrProgramDesc; |
26 | | class GrProgramInfo; |
27 | | class GrProxyProvider; |
28 | | class GrRecordingContextPriv; |
29 | | class GrSubRunAllocator; |
30 | | class GrSurfaceProxy; |
31 | | class GrTextBlobCache; |
32 | | class GrThreadSafeCache; |
33 | | class SkArenaAlloc; |
34 | | class SkJSONWriter; |
35 | | |
36 | | #if GR_TEST_UTILS |
37 | | class SkString; |
38 | | #endif |
39 | | |
40 | | class GrRecordingContext : public GrImageContext { |
41 | | public: |
42 | | ~GrRecordingContext() override; |
43 | | |
44 | 0 | SK_API GrBackendFormat defaultBackendFormat(SkColorType ct, GrRenderable renderable) const { |
45 | 0 | return INHERITED::defaultBackendFormat(ct, renderable); |
46 | 0 | } |
47 | | |
48 | | /** |
49 | | * Reports whether the GrDirectContext associated with this GrRecordingContext is abandoned. |
50 | | * When called on a GrDirectContext it may actively check whether the underlying 3D API |
51 | | * device/context has been disconnected before reporting the status. If so, calling this |
52 | | * method will transition the GrDirectContext to the abandoned state. |
53 | | */ |
54 | 1.03M | bool abandoned() override { return INHERITED::abandoned(); } |
55 | | |
56 | | /* |
57 | | * Can a SkSurface be created with the given color type. To check whether MSAA is supported |
58 | | * use maxSurfaceSampleCountForColorType(). |
59 | | */ |
60 | 11.0k | SK_API bool colorTypeSupportedAsSurface(SkColorType colorType) const { |
61 | 11.0k | if (kR16G16_unorm_SkColorType == colorType || |
62 | 11.0k | kA16_unorm_SkColorType == colorType || |
63 | 11.0k | kA16_float_SkColorType == colorType || |
64 | 11.0k | kR16G16_float_SkColorType == colorType || |
65 | 11.0k | kR16G16B16A16_unorm_SkColorType == colorType || |
66 | 11.0k | kGray_8_SkColorType == colorType) { |
67 | 0 | return false; |
68 | 0 | } |
69 | | |
70 | 11.0k | return this->maxSurfaceSampleCountForColorType(colorType) > 0; |
71 | 11.0k | } |
72 | | |
73 | | /** |
74 | | * Gets the maximum supported texture size. |
75 | | */ |
76 | | SK_API int maxTextureSize() const; |
77 | | |
78 | | /** |
79 | | * Gets the maximum supported render target size. |
80 | | */ |
81 | | SK_API int maxRenderTargetSize() const; |
82 | | |
83 | | /** |
84 | | * Can a SkImage be created with the given color type. |
85 | | */ |
86 | | SK_API bool colorTypeSupportedAsImage(SkColorType) const; |
87 | | |
88 | | /** |
89 | | * Gets the maximum supported sample count for a color type. 1 is returned if only non-MSAA |
90 | | * rendering is supported for the color type. 0 is returned if rendering to this color type |
91 | | * is not supported at all. |
92 | | */ |
93 | | SK_API int maxSurfaceSampleCountForColorType(SkColorType) const; |
94 | | |
95 | | // Provides access to functions that aren't part of the public API. |
96 | | GrRecordingContextPriv priv(); |
97 | | const GrRecordingContextPriv priv() const; // NOLINT(readability-const-return-type) |
98 | | |
99 | | // The collection of specialized memory arenas for different types of data recorded by a |
100 | | // GrRecordingContext. Arenas does not maintain ownership of the pools it groups together. |
101 | | class Arenas { |
102 | | public: |
103 | | Arenas(SkArenaAlloc*, GrSubRunAllocator*); |
104 | | |
105 | | // For storing pipelines and other complex data as-needed by ops |
106 | 0 | SkArenaAlloc* recordTimeAllocator() { return fRecordTimeAllocator; } |
107 | | |
108 | | // For storing GrTextBlob SubRuns |
109 | 0 | GrSubRunAllocator* recordTimeSubRunAllocator() { return fRecordTimeSubRunAllocator; } |
110 | | |
111 | | private: |
112 | | SkArenaAlloc* fRecordTimeAllocator; |
113 | | GrSubRunAllocator* fRecordTimeSubRunAllocator; |
114 | | }; |
115 | | |
116 | | protected: |
117 | | friend class GrRecordingContextPriv; // for hidden functions |
118 | | friend class SkDeferredDisplayList; // for OwnedArenas |
119 | | friend class SkDeferredDisplayListPriv; // for ProgramData |
120 | | |
121 | | // Like Arenas, but preserves ownership of the underlying pools. |
122 | | class OwnedArenas { |
123 | | public: |
124 | | OwnedArenas(bool ddlRecording); |
125 | | ~OwnedArenas(); |
126 | | |
127 | | Arenas get(); |
128 | | |
129 | | OwnedArenas& operator=(OwnedArenas&&); |
130 | | |
131 | | private: |
132 | | bool fDDLRecording; |
133 | | std::unique_ptr<SkArenaAlloc> fRecordTimeAllocator; |
134 | | std::unique_ptr<GrSubRunAllocator> fRecordTimeSubRunAllocator; |
135 | | }; |
136 | | |
137 | | GrRecordingContext(sk_sp<GrContextThreadSafeProxy>, bool ddlRecording); |
138 | | |
139 | | bool init() override; |
140 | | |
141 | | void abandonContext() override; |
142 | | |
143 | | GrDrawingManager* drawingManager(); |
144 | | |
145 | | // There is no going back from this method. It should only be called to control the timing |
146 | | // during abandon or destruction of the context. |
147 | | void destroyDrawingManager(); |
148 | | |
149 | 0 | Arenas arenas() { return fArenas.get(); } |
150 | | // This entry point should only be used for DDL creation where we want the ops' lifetime to |
151 | | // match that of the DDL. |
152 | | OwnedArenas&& detachArenas(); |
153 | | |
154 | 198k | GrProxyProvider* proxyProvider() { return fProxyProvider.get(); } |
155 | 0 | const GrProxyProvider* proxyProvider() const { return fProxyProvider.get(); } |
156 | | |
157 | | struct ProgramData { |
158 | | ProgramData(std::unique_ptr<const GrProgramDesc>, const GrProgramInfo*); |
159 | | ProgramData(ProgramData&&); // for SkTArray |
160 | | ProgramData(const ProgramData&) = delete; |
161 | | ~ProgramData(); |
162 | | |
163 | 0 | const GrProgramDesc& desc() const { return *fDesc; } |
164 | 0 | const GrProgramInfo& info() const { return *fInfo; } |
165 | | |
166 | | private: |
167 | | // TODO: store the GrProgramDescs in the 'fRecordTimeData' arena |
168 | | std::unique_ptr<const GrProgramDesc> fDesc; |
169 | | // The program infos should be stored in 'fRecordTimeData' so do not need to be ref |
170 | | // counted or deleted in the destructor. |
171 | | const GrProgramInfo* fInfo = nullptr; |
172 | | }; |
173 | | |
174 | | // This entry point gives the recording context a chance to cache the provided |
175 | | // programInfo. The DDL context takes this opportunity to store programInfos as a sidecar |
176 | | // to the DDL. |
177 | 0 | virtual void recordProgramInfo(const GrProgramInfo*) {} |
178 | | // This asks the recording context to return any programInfos it may have collected |
179 | | // via the 'recordProgramInfo' call. It is up to the caller to ensure that the lifetime |
180 | | // of the programInfos matches the intended use. For example, in DDL-record mode it |
181 | | // is known that all the programInfos will have been allocated in an arena with the |
182 | | // same lifetime at the DDL itself. |
183 | 0 | virtual void detachProgramData(SkTArray<ProgramData>*) {} |
184 | | |
185 | | GrTextBlobCache* getTextBlobCache(); |
186 | | const GrTextBlobCache* getTextBlobCache() const; |
187 | | |
188 | | GrThreadSafeCache* threadSafeCache(); |
189 | | const GrThreadSafeCache* threadSafeCache() const; |
190 | | |
191 | | /** |
192 | | * Registers an object for flush-related callbacks. (See GrOnFlushCallbackObject.) |
193 | | * |
194 | | * NOTE: the drawing manager tracks this object as a raw pointer; it is up to the caller to |
195 | | * ensure its lifetime is tied to that of the context. |
196 | | */ |
197 | | void addOnFlushCallbackObject(GrOnFlushCallbackObject*); |
198 | | |
199 | 0 | GrRecordingContext* asRecordingContext() override { return this; } |
200 | | |
201 | | class Stats { |
202 | | public: |
203 | 1.32k | Stats() = default; |
204 | | |
205 | | #if GR_GPU_STATS |
206 | 0 | void reset() { *this = {}; } |
207 | | |
208 | 0 | int numPathMasksGenerated() const { return fNumPathMasksGenerated; } |
209 | 7.52k | void incNumPathMasksGenerated() { fNumPathMasksGenerated++; } |
210 | | |
211 | 0 | int numPathMaskCacheHits() const { return fNumPathMaskCacheHits; } |
212 | 29 | void incNumPathMasksCacheHits() { fNumPathMaskCacheHits++; } |
213 | | |
214 | | #if GR_TEST_UTILS |
215 | | void dump(SkString* out) const; |
216 | | void dumpKeyValuePairs(SkTArray<SkString>* keys, SkTArray<double>* values) const; |
217 | | #endif |
218 | | |
219 | | private: |
220 | | int fNumPathMasksGenerated{0}; |
221 | | int fNumPathMaskCacheHits{0}; |
222 | | |
223 | | #else // GR_GPU_STATS |
224 | | void incNumPathMasksGenerated() {} |
225 | | void incNumPathMasksCacheHits() {} |
226 | | |
227 | | #if GR_TEST_UTILS |
228 | | void dump(SkString*) const {} |
229 | | void dumpKeyValuePairs(SkTArray<SkString>* keys, SkTArray<double>* values) const {} |
230 | | #endif |
231 | | #endif // GR_GPU_STATS |
232 | | } fStats; |
233 | | |
234 | | #if GR_GPU_STATS && GR_TEST_UTILS |
235 | | struct DMSAAStats { |
236 | | void dumpKeyValuePairs(SkTArray<SkString>* keys, SkTArray<double>* values) const; |
237 | | void dump() const; |
238 | | void merge(const DMSAAStats&); |
239 | | int fNumRenderPasses = 0; |
240 | | int fNumMultisampleRenderPasses = 0; |
241 | | std::map<std::string, int> fTriggerCounts; |
242 | | }; |
243 | | |
244 | | DMSAAStats fDMSAAStats; |
245 | | #endif |
246 | | |
247 | 0 | Stats* stats() { return &fStats; } |
248 | 0 | const Stats* stats() const { return &fStats; } |
249 | | void dumpJSON(SkJSONWriter*) const; |
250 | | |
251 | | protected: |
252 | | // Delete last in case other objects call it during destruction. |
253 | | std::unique_ptr<GrAuditTrail> fAuditTrail; |
254 | | |
255 | | private: |
256 | | OwnedArenas fArenas; |
257 | | |
258 | | std::unique_ptr<GrDrawingManager> fDrawingManager; |
259 | | std::unique_ptr<GrProxyProvider> fProxyProvider; |
260 | | |
261 | | #if GR_TEST_UTILS |
262 | | int fSuppressWarningMessages = 0; |
263 | | #endif |
264 | | |
265 | | using INHERITED = GrImageContext; |
266 | | }; |
267 | | |
268 | | /** |
269 | | * Safely cast a possibly-null base context to direct context. |
270 | | */ |
271 | 906k | static inline GrDirectContext* GrAsDirectContext(GrContext_Base* base) { |
272 | 886k | return base ? base->asDirectContext() : nullptr; |
273 | 906k | } Unexecuted instantiation: BackendSurfaceFactory.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: BackendTextureImageFactory.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FlushFinishTracker.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrContextFactory.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTest.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: ManagedBackendTexture.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: ProxyUtils.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: TestContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: TestOps.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: YUVUtils.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GLTestContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: MockTestContext.cpp:GrAsDirectContext(GrContext_Base*) SkCanvas.cpp:GrAsDirectContext(GrContext_Base*) Line | Count | Source | 271 | 808k | static inline GrDirectContext* GrAsDirectContext(GrContext_Base* base) { | 272 | 789k | return base ? base->asDirectContext() : nullptr; | 273 | 808k | } |
Unexecuted instantiation: SkImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkRuntimeEffect.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkSpecialImage.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkSpecialSurface.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkTextBlob.cpp:GrAsDirectContext(GrContext_Base*) SkImage.cpp:GrAsDirectContext(GrContext_Base*) Line | Count | Source | 271 | 97.1k | static inline GrDirectContext* GrAsDirectContext(GrContext_Base* base) { | 272 | 97.1k | return base ? base->asDirectContext() : nullptr; | 273 | 97.1k | } |
Unexecuted instantiation: SkImage_Lazy.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_Raster.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkSurface.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkSurface_Raster.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkComposeShader.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkPictureImageGenerator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrContext_Base.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDirectContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDrawingManager.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGpu.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGpuResource.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrImageContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrOpFlushState.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrProxyProvider.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrRecordingContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrRecordingContextPriv.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrRenderTargetProxy.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrRenderTaskCluster.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrResourceAllocator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrResourceCache.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrResourceProvider.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrRingBuffer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrStagingBufferManager.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrSurface.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrSurfaceProxy.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTexture.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTextureProxy.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTextureResolveRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrThreadSafeCache.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTransferFromRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrWaitRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrWritePixelsRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SurfaceContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SurfaceFillContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTextBlobCache.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: BaseDevice.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkGr.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_Gpu.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_GpuBase.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_GpuYUVA.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkSurface_Gpu.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrAuditTrail.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrOpsTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: AAConvexPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: AAHairLinePathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: AALinearizingConvexPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DefaultPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrAtlasTextOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDashOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDrawAtlasOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDrawVerticesOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrFillRectOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrLatticeOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrMeshDrawOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrOvalOpFactory.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrQuadPerEdgeAA.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrRegionOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrShadowRRectOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrSimpleMeshDrawOpHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrSimpleMeshDrawOpHelperWithStencil.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrStrokeRectOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTextureOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SmallPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SoftwarePathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: TriangulatingPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: Device.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: Device_drawTexture.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathRendererChain.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SurfaceDrawContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SurfaceFillContext_v1.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGLGpu.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGLGpuProgramCache.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGLRenderTarget.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGLTextureRenderTarget.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGLProgramBuilder.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkBlurMF.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkDeferredDisplayList.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkGlyphRunPainter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkGpuBlurUtils.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkPictureShader.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkTableColorFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkPerlinNoiseShader.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkAlphaThresholdImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkArithmeticImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkBlendImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkBlurImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkDisplacementMapImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkLightingImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkMatrixConvolutionImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkMorphologyImageFilter.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrBackendTextureImageGenerator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrBufferAllocPool.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrClientMappedBufferManager.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrContextThreadSafeProxy.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrCopyRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDDLTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDirectContextPriv.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDrawOpAtlas.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrMeshDrawTarget.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrProcessorUnitTest.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrSWMaskHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrMatrixConvolutionEffect.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGradientShader.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTextBlob.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrBlurUtils.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: AtlasPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DashLinePathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrClearOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDrawAtlasPathOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDrawableOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrFillRRectOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: TessellationPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrAtlasRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: ClipStack.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: StencilMaskHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDynamicAtlas.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrOnFlushResourceProvider.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathInnerTriangulateOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathStencilCoverOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathTessellateOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: StrokeTessellateOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrPathCurveTessellator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrPathWedgeTessellator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrStrokeFixedCountTessellator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrStrokeHardwareTessellator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FuzzDDLThreading.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkDeferredDisplayListRecorder.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDDLContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FuzzSkParagraph.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTextureRenderTargetProxy.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrAtlasManager.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGLOpsRenderPass.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkSurfaceCharacterization.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FuzzCanvas.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DebugCanvas.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DrawCommand.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FuzzCreateDDL.cpp:GrAsDirectContext(GrContext_Base*) |
274 | | |
275 | | #endif |