/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/SkColorType.h" |
12 | | #include "include/core/SkRefCnt.h" |
13 | | #include "include/core/SkString.h" // IWYU pragma: keep |
14 | | #include "include/core/SkTypes.h" |
15 | | #include "include/private/base/SkTArray.h" |
16 | | #include "include/private/gpu/ganesh/GrContext_Base.h" |
17 | | #include "include/private/gpu/ganesh/GrImageContext.h" |
18 | | |
19 | | #include <map> |
20 | | #include <memory> |
21 | | #include <string> |
22 | | |
23 | | class GrAuditTrail; |
24 | | class GrContextThreadSafeProxy; |
25 | | class GrDirectContext; |
26 | | class GrDrawingManager; |
27 | | class GrOnFlushCallbackObject; |
28 | | class GrProgramDesc; |
29 | | class GrProgramInfo; |
30 | | class GrProxyProvider; |
31 | | class GrRecordingContextPriv; |
32 | | class GrThreadSafeCache; |
33 | | class SkArenaAlloc; |
34 | | class SkCapabilities; |
35 | | class SkJSONWriter; |
36 | | |
37 | | namespace sktext::gpu { |
38 | | class SubRunAllocator; |
39 | | class TextBlobRedrawCoordinator; |
40 | | } |
41 | | |
42 | | class GrRecordingContext : public GrImageContext { |
43 | | public: |
44 | | ~GrRecordingContext() override; |
45 | | |
46 | | /** |
47 | | * Reports whether the GrDirectContext associated with this GrRecordingContext is abandoned. |
48 | | * When called on a GrDirectContext it may actively check whether the underlying 3D API |
49 | | * device/context has been disconnected before reporting the status. If so, calling this |
50 | | * method will transition the GrDirectContext to the abandoned state. |
51 | | */ |
52 | 1.21M | bool abandoned() override { return GrImageContext::abandoned(); } |
53 | | |
54 | | /* |
55 | | * Can a SkSurface be created with the given color type. To check whether MSAA is supported |
56 | | * use maxSurfaceSampleCountForColorType(). |
57 | | */ |
58 | 32.9k | SK_API bool colorTypeSupportedAsSurface(SkColorType colorType) const { |
59 | 32.9k | if (kR16G16_unorm_SkColorType == colorType || |
60 | 32.9k | kA16_unorm_SkColorType == colorType || |
61 | 32.9k | kA16_float_SkColorType == colorType || |
62 | 32.9k | kR16G16_float_SkColorType == colorType || |
63 | 32.9k | kR16G16B16A16_unorm_SkColorType == colorType || |
64 | 32.9k | kGray_8_SkColorType == colorType) { |
65 | 0 | return false; |
66 | 0 | } |
67 | | |
68 | 32.9k | return this->maxSurfaceSampleCountForColorType(colorType) > 0; |
69 | 32.9k | } |
70 | | |
71 | | /** |
72 | | * Gets the maximum supported texture size. |
73 | | */ |
74 | | SK_API int maxTextureSize() const; |
75 | | |
76 | | /** |
77 | | * Gets the maximum supported render target size. |
78 | | */ |
79 | | SK_API int maxRenderTargetSize() const; |
80 | | |
81 | | /** |
82 | | * Can a SkImage be created with the given color type. |
83 | | */ |
84 | | SK_API bool colorTypeSupportedAsImage(SkColorType) const; |
85 | | |
86 | | /** |
87 | | * Does this context support protected content? |
88 | | */ |
89 | | SK_API bool supportsProtectedContent() const; |
90 | | |
91 | | /** |
92 | | * Gets the maximum supported sample count for a color type. 1 is returned if only non-MSAA |
93 | | * rendering is supported for the color type. 0 is returned if rendering to this color type |
94 | | * is not supported at all. |
95 | | */ |
96 | 32.9k | SK_API int maxSurfaceSampleCountForColorType(SkColorType colorType) const { |
97 | 32.9k | return GrImageContext::maxSurfaceSampleCountForColorType(colorType); |
98 | 32.9k | } |
99 | | |
100 | | SK_API sk_sp<const SkCapabilities> skCapabilities() const; |
101 | | |
102 | | // Provides access to functions that aren't part of the public API. |
103 | | GrRecordingContextPriv priv(); |
104 | | const GrRecordingContextPriv priv() const; // NOLINT(readability-const-return-type) |
105 | | |
106 | | // The collection of specialized memory arenas for different types of data recorded by a |
107 | | // GrRecordingContext. Arenas does not maintain ownership of the pools it groups together. |
108 | | class Arenas { |
109 | | public: |
110 | | Arenas(SkArenaAlloc*, sktext::gpu::SubRunAllocator*); |
111 | | |
112 | | // For storing pipelines and other complex data as-needed by ops |
113 | 0 | SkArenaAlloc* recordTimeAllocator() { return fRecordTimeAllocator; } |
114 | | |
115 | | // For storing GrTextBlob SubRuns |
116 | 0 | sktext::gpu::SubRunAllocator* recordTimeSubRunAllocator() { |
117 | 0 | return fRecordTimeSubRunAllocator; |
118 | 0 | } |
119 | | |
120 | | private: |
121 | | SkArenaAlloc* fRecordTimeAllocator; |
122 | | sktext::gpu::SubRunAllocator* fRecordTimeSubRunAllocator; |
123 | | }; |
124 | | |
125 | | protected: |
126 | | friend class GrRecordingContextPriv; // for hidden functions |
127 | | friend class GrDeferredDisplayList; // for OwnedArenas |
128 | | friend class GrDeferredDisplayListPriv; // for ProgramData |
129 | | |
130 | | // Like Arenas, but preserves ownership of the underlying pools. |
131 | | class OwnedArenas { |
132 | | public: |
133 | | OwnedArenas(bool ddlRecording); |
134 | | ~OwnedArenas(); |
135 | | |
136 | | Arenas get(); |
137 | | |
138 | | OwnedArenas& operator=(OwnedArenas&&); |
139 | | |
140 | | private: |
141 | | bool fDDLRecording; |
142 | | std::unique_ptr<SkArenaAlloc> fRecordTimeAllocator; |
143 | | std::unique_ptr<sktext::gpu::SubRunAllocator> fRecordTimeSubRunAllocator; |
144 | | }; |
145 | | |
146 | | GrRecordingContext(sk_sp<GrContextThreadSafeProxy>, bool ddlRecording); |
147 | | |
148 | | bool init() override; |
149 | | |
150 | | void abandonContext() override; |
151 | | |
152 | | GrDrawingManager* drawingManager(); |
153 | | |
154 | | // There is no going back from this method. It should only be called to control the timing |
155 | | // during abandon or destruction of the context. |
156 | | void destroyDrawingManager(); |
157 | | |
158 | 0 | Arenas arenas() { return fArenas.get(); } |
159 | | // This entry point should only be used for DDL creation where we want the ops' lifetime to |
160 | | // match that of the DDL. |
161 | | OwnedArenas&& detachArenas(); |
162 | | |
163 | 211k | GrProxyProvider* proxyProvider() { return fProxyProvider.get(); } |
164 | 0 | const GrProxyProvider* proxyProvider() const { return fProxyProvider.get(); } |
165 | | |
166 | | struct ProgramData { |
167 | | ProgramData(std::unique_ptr<const GrProgramDesc>, const GrProgramInfo*); |
168 | | ProgramData(ProgramData&&); // for SkTArray |
169 | | ProgramData(const ProgramData&) = delete; |
170 | | ~ProgramData(); |
171 | | |
172 | 0 | const GrProgramDesc& desc() const { return *fDesc; } |
173 | 0 | const GrProgramInfo& info() const { return *fInfo; } |
174 | | |
175 | | private: |
176 | | // TODO: store the GrProgramDescs in the 'fRecordTimeData' arena |
177 | | std::unique_ptr<const GrProgramDesc> fDesc; |
178 | | // The program infos should be stored in 'fRecordTimeData' so do not need to be ref |
179 | | // counted or deleted in the destructor. |
180 | | const GrProgramInfo* fInfo = nullptr; |
181 | | }; |
182 | | |
183 | | // This entry point gives the recording context a chance to cache the provided |
184 | | // programInfo. The DDL context takes this opportunity to store programInfos as a sidecar |
185 | | // to the DDL. |
186 | 0 | virtual void recordProgramInfo(const GrProgramInfo*) {} |
187 | | // This asks the recording context to return any programInfos it may have collected |
188 | | // via the 'recordProgramInfo' call. It is up to the caller to ensure that the lifetime |
189 | | // of the programInfos matches the intended use. For example, in DDL-record mode it |
190 | | // is known that all the programInfos will have been allocated in an arena with the |
191 | | // same lifetime at the DDL itself. |
192 | 0 | virtual void detachProgramData(skia_private::TArray<ProgramData>*) {} |
193 | | |
194 | | sktext::gpu::TextBlobRedrawCoordinator* getTextBlobRedrawCoordinator(); |
195 | | const sktext::gpu::TextBlobRedrawCoordinator* getTextBlobRedrawCoordinator() const; |
196 | | |
197 | | GrThreadSafeCache* threadSafeCache(); |
198 | | const GrThreadSafeCache* threadSafeCache() const; |
199 | | |
200 | | /** |
201 | | * Registers an object for flush-related callbacks. (See GrOnFlushCallbackObject.) |
202 | | * |
203 | | * NOTE: the drawing manager tracks this object as a raw pointer; it is up to the caller to |
204 | | * ensure its lifetime is tied to that of the context. |
205 | | */ |
206 | | void addOnFlushCallbackObject(GrOnFlushCallbackObject*); |
207 | | |
208 | 0 | GrRecordingContext* asRecordingContext() override { return this; } |
209 | | |
210 | | class Stats { |
211 | | public: |
212 | 2.58k | Stats() = default; |
213 | | |
214 | | #if GR_GPU_STATS |
215 | 0 | void reset() { *this = {}; } |
216 | | |
217 | 0 | int numPathMasksGenerated() const { return fNumPathMasksGenerated; } |
218 | 5.67k | void incNumPathMasksGenerated() { fNumPathMasksGenerated++; } |
219 | | |
220 | 0 | int numPathMaskCacheHits() const { return fNumPathMaskCacheHits; } |
221 | 0 | void incNumPathMasksCacheHits() { fNumPathMaskCacheHits++; } |
222 | | |
223 | | #if defined(GR_TEST_UTILS) |
224 | | void dump(SkString* out) const; |
225 | | void dumpKeyValuePairs(skia_private::TArray<SkString>* keys, |
226 | | skia_private::TArray<double>* values) const; |
227 | | #endif |
228 | | |
229 | | private: |
230 | | int fNumPathMasksGenerated{0}; |
231 | | int fNumPathMaskCacheHits{0}; |
232 | | |
233 | | #else // GR_GPU_STATS |
234 | | void incNumPathMasksGenerated() {} |
235 | | void incNumPathMasksCacheHits() {} |
236 | | |
237 | | #if defined(GR_TEST_UTILS) |
238 | | void dump(SkString*) const {} |
239 | | void dumpKeyValuePairs(skia_private::TArray<SkString>* keys, |
240 | | skia_private::TArray<double>* values) const {} |
241 | | #endif |
242 | | #endif // GR_GPU_STATS |
243 | | } fStats; |
244 | | |
245 | | #if GR_GPU_STATS && defined(GR_TEST_UTILS) |
246 | | struct DMSAAStats { |
247 | | void dumpKeyValuePairs(skia_private::TArray<SkString>* keys, |
248 | | skia_private::TArray<double>* values) const; |
249 | | void dump() const; |
250 | | void merge(const DMSAAStats&); |
251 | | int fNumRenderPasses = 0; |
252 | | int fNumMultisampleRenderPasses = 0; |
253 | | std::map<std::string, int> fTriggerCounts; |
254 | | }; |
255 | | |
256 | | DMSAAStats fDMSAAStats; |
257 | | #endif |
258 | | |
259 | 0 | Stats* stats() { return &fStats; } |
260 | 0 | const Stats* stats() const { return &fStats; } |
261 | | void dumpJSON(SkJSONWriter*) const; |
262 | | |
263 | | protected: |
264 | | // Delete last in case other objects call it during destruction. |
265 | | std::unique_ptr<GrAuditTrail> fAuditTrail; |
266 | | |
267 | | private: |
268 | | OwnedArenas fArenas; |
269 | | |
270 | | std::unique_ptr<GrDrawingManager> fDrawingManager; |
271 | | std::unique_ptr<GrProxyProvider> fProxyProvider; |
272 | | |
273 | | #if defined(GR_TEST_UTILS) |
274 | | int fSuppressWarningMessages = 0; |
275 | | #endif |
276 | | }; |
277 | | |
278 | | /** |
279 | | * Safely cast a possibly-null base context to direct context. |
280 | | */ |
281 | 125k | static inline GrDirectContext* GrAsDirectContext(GrContext_Base* base) { |
282 | 125k | return base ? base->asDirectContext() : nullptr; |
283 | 125k | } 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: ProtectedUtils.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: MockTestContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: VkTestContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: VkTestHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: VkYcbcrSamplerHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: AtlasTextOpTools.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrAtlasTools.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DDLPromiseImageHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DDLTileHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GpuToolUtils.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: MSKPPlayer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DebugCanvas.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DrawCommand.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDeferredDisplayList.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDeferredDisplayListRecorder.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDirectContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDirectContextPriv.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDrawOpAtlas.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: 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: 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: GrTextureRenderTargetProxy.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: PathRendererChain.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkGr.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SurfaceContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SurfaceDrawContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SurfaceFillContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrImageUtils.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrTextureGenerator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_Ganesh.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_GaneshBase.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_GaneshFactories.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_GaneshYUVA.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_LazyTexture.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkImage_RasterPinnable.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkSpecialImage_Ganesh.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: AtlasPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: AtlasRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: AtlasTextOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: ClearOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DashLinePathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DashOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DefaultPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DrawAtlasOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DrawAtlasPathOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DrawMeshOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: DrawableOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FillRRectOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FillRectOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrMeshDrawOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrOvalOpFactory.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrSimpleMeshDrawOpHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrSimpleMeshDrawOpHelperWithStencil.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: LatticeOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: OpsTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathStencilCoverOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: QuadPerEdgeAA.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: RegionOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: ShadowRRectOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SmallPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SoftwarePathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: StrokeRectOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: TessellationPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: TextureOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: TriangulatingPathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SkSurface_Ganesh.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathTessellator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkDirectContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkGpu.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkMSAALoadManager.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkOpsRenderPass.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkPipelineStateCache.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkPipelineStateDataManager.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkRenderTarget.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkResourceProvider.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkTextureRenderTarget.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkUtil.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: SubRunContainer.cpp:GrAsDirectContext(GrContext_Base*) Device.cpp:GrAsDirectContext(GrContext_Base*) Line | Count | Source | 281 | 452 | static inline GrDirectContext* GrAsDirectContext(GrContext_Base* base) { | 282 | 452 | return base ? base->asDirectContext() : nullptr; | 283 | 452 | } |
Unexecuted instantiation: Device_drawTexture.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrBackendTextureImageGenerator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrBlurUtils.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrBufferAllocPool.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrBufferTransferRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrBufferUpdateRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrClientMappedBufferManager.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrCopyRenderTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDDLContext.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDDLTask.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrDynamicAtlas.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrFragmentProcessors.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrMeshDrawTarget.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrOnFlushResourceProvider.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrProcessorUnitTest.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrSWMaskHelper.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathRenderer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrGradientShader.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathInnerTriangulateOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: PathTessellateOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: StrokeTessellateOp.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: StrokeTessellator.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkBuffer.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkCommandPool.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrVkPipelineStateBuilder.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: ClipStack.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: StencilMaskHelper.cpp:GrAsDirectContext(GrContext_Base*) FuzzCanvas.cpp:GrAsDirectContext(GrContext_Base*) Line | Count | Source | 281 | 125k | static inline GrDirectContext* GrAsDirectContext(GrContext_Base* base) { | 282 | 125k | return base ? base->asDirectContext() : nullptr; | 283 | 125k | } |
Unexecuted instantiation: FuzzPrecompile.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: GrRenderTargetProxy.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FuzzCreateDDL.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FuzzSkParagraph.cpp:GrAsDirectContext(GrContext_Base*) Unexecuted instantiation: FuzzDDLThreading.cpp:GrAsDirectContext(GrContext_Base*) |
284 | | |
285 | | #endif |