Flutter Engine
The Flutter Engine
GrVkGpu.h
Go to the documentation of this file.
1/*
2 * Copyright 2015 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 GrVkGpu_DEFINED
9#define GrVkGpu_DEFINED
10
21
22class GrDirectContext;
23class GrPipeline;
24class GrVkBuffer;
25class GrVkCommandPool;
26class GrVkFramebuffer;
28class GrVkPipeline;
31class GrVkRenderPass;
33class GrVkTexture;
35
36namespace skgpu {
37class VulkanMemoryAllocator;
38class VulkanMutableTextureState;
39struct VulkanInterface;
40}
41
42class GrVkGpu : public GrGpu {
43public:
44 static std::unique_ptr<GrGpu> Make(const skgpu::VulkanBackendContext&,
45 const GrContextOptions&,
47
48 ~GrVkGpu() override;
49
50 void disconnect(DisconnectType) override;
51 bool disconnected() const { return fDisconnected; }
52
54 fResourceProvider.releaseUnlockedBackendObjects();
55 }
56
59
60 const skgpu::VulkanInterface* vkInterface() const { return fInterface.get(); }
61 const GrVkCaps& vkCaps() const { return *fVkCaps; }
62
63 GrStagingBufferManager* stagingBufferManager() override { return &fStagingBufferManager; }
65
66 bool isDeviceLost() const override { return fDeviceIsLost; }
67
68 skgpu::VulkanMemoryAllocator* memoryAllocator() const { return fMemoryAllocator.get(); }
69
70 VkPhysicalDevice physicalDevice() const { return fPhysicalDevice; }
71 VkDevice device() const { return fDevice; }
72 VkQueue queue() const { return fQueue; }
73 uint32_t queueIndex() const { return fQueueIndex; }
74 GrVkCommandPool* cmdPool() const { return fMainCmdPool; }
76 return fPhysDevProps;
77 }
79 return fPhysDevMemProps;
80 }
81 bool protectedContext() const { return fProtectedContext == skgpu::Protected::kYes; }
82
83 GrVkResourceProvider& resourceProvider() { return fResourceProvider; }
84
85 GrVkPrimaryCommandBuffer* currentCommandBuffer() const { return fMainCmdBuffer; }
86
88
91 skgpu::MutableTextureState* previousState,
92 sk_sp<skgpu::RefCntedCallback> finishedCallback) override;
93
96 skgpu::MutableTextureState* previousState,
97 sk_sp<skgpu::RefCntedCallback> finishedCallback) override;
98
99 void deleteBackendTexture(const GrBackendTexture&) override;
100
101 bool compile(const GrProgramDesc&, const GrProgramInfo&) override;
102
103#if defined(GR_TEST_UTILS)
104 bool isTestingOnlyBackendTexture(const GrBackendTexture&) const override;
105
106 GrBackendRenderTarget createTestingOnlyBackendRenderTarget(SkISize dimensions,
108 int sampleCnt,
109 GrProtected) override;
110 void deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget&) override;
111
112 void resetShaderCacheForTesting() const override {
113 fResourceProvider.resetShaderCacheForTesting();
114 }
115#endif
116
118 SkISize dimensions, int numStencilSamples) override;
119
121 return GrBackendFormats::MakeVk(this->vkCaps().preferredStencilFormat());
122 }
123
125 const GrBackendFormat& format,
126 int numSamples,
127 GrProtected isProtected,
128 GrMemoryless isMemoryless) override;
129
131 VkPipelineStageFlags srcStageMask,
132 VkPipelineStageFlags dstStageMask,
133 bool byRegion,
134 VkBufferMemoryBarrier* barrier) const;
136 VkPipelineStageFlags dstStageMask,
137 bool byRegion,
138 VkBufferMemoryBarrier* barrier) const;
140 VkPipelineStageFlags srcStageMask,
141 VkPipelineStageFlags dstStageMask,
142 bool byRegion,
143 VkImageMemoryBarrier* barrier) const;
144
145 bool loadMSAAFromResolve(GrVkCommandBuffer* commandBuffer,
146 const GrVkRenderPass& renderPass,
148 GrVkImage* src,
149 const SkIRect& srcRect);
150
151 bool onRegenerateMipMapLevels(GrTexture* tex) override;
152
153 void onResolveRenderTarget(GrRenderTarget* target, const SkIRect& resolveRect) override;
154
155 void submitSecondaryCommandBuffer(std::unique_ptr<GrVkSecondaryCommandBuffer>);
156
157 void submit(GrOpsRenderPass*) override;
158
159 [[nodiscard]] std::unique_ptr<GrSemaphore> makeSemaphore(bool isOwned) override;
160 std::unique_ptr<GrSemaphore> wrapBackendSemaphore(const GrBackendSemaphore&,
162 GrWrapOwnership) override;
163 void insertSemaphore(GrSemaphore* semaphore) override;
164 void waitSemaphore(GrSemaphore* semaphore) override;
165
166 // These match the definitions in SkDrawable, from whence they came
167 typedef void* SubmitContext;
168 typedef void (*SubmitProc)(SubmitContext submitContext);
169
170 // Adds an SkDrawable::GpuDrawHandler that we will delete the next time we submit the primary
171 // command buffer to the gpu.
172 void addDrawable(std::unique_ptr<SkDrawable::GpuDrawHandler> drawable);
173
174 void checkFinishProcs() override { fResourceProvider.checkCommandBuffers(); }
175 void finishOutstandingGpuWork() override;
176
177 std::unique_ptr<GrSemaphore> prepareTextureForCrossContextUsage(GrTexture*) override;
178
181
183
184 enum PersistentCacheKeyType : uint32_t {
187 };
188
189 void storeVkPipelineCacheData() override;
190
193 const VkClearValue* colorClear,
194 const GrSurface*,
195 const SkIRect& renderPassBounds,
196 bool forSecondaryCB);
198
199 // Returns true if VkResult indicates success and also checks for device lost or OOM. Every
200 // Vulkan call (and skgpu::VulkanMemoryAllocator call that returns VkResult) made on behalf of
201 // the GrVkGpu should be processed by this function so that we respond to OOMs and lost devices.
203
204private:
205 enum SyncQueue {
206 kForce_SyncQueue,
207 kSkip_SyncQueue
208 };
209
212 const sk_sp<GrVkCaps> caps,
214 uint32_t instanceVersion,
215 uint32_t physicalDeviceVersion,
217
218 void destroyResources();
219
220 GrBackendTexture onCreateBackendTexture(SkISize dimensions,
221 const GrBackendFormat&,
225 std::string_view label) override;
226 GrBackendTexture onCreateCompressedBackendTexture(SkISize dimensions,
227 const GrBackendFormat&,
229 GrProtected) override;
230
231 bool onClearBackendTexture(const GrBackendTexture&,
232 sk_sp<skgpu::RefCntedCallback> finishedCallback,
233 std::array<float, 4> color) override;
234
235 bool onUpdateCompressedBackendTexture(const GrBackendTexture&,
236 sk_sp<skgpu::RefCntedCallback> finishedCallback,
237 const void* data,
238 size_t length) override;
239
240 bool setBackendSurfaceState(GrVkImageInfo info,
242 SkISize dimensions,
243 VkImageLayout newLayout,
244 uint32_t newQueueFamilyIndex,
245 skgpu::MutableTextureState* previousState,
246 sk_sp<skgpu::RefCntedCallback> finishedCallback);
247
248 sk_sp<GrTexture> onCreateTexture(SkISize,
249 const GrBackendFormat&,
251 int renderTargetSampleCnt,
254 int mipLevelCount,
255 uint32_t levelClearMask,
256 std::string_view label) override;
257 sk_sp<GrTexture> onCreateCompressedTexture(SkISize dimensions,
258 const GrBackendFormat&,
262 const void* data,
263 size_t dataSize) override;
264
265 sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&,
268 GrIOType) override;
269 sk_sp<GrTexture> onWrapCompressedBackendTexture(const GrBackendTexture&,
271 GrWrapCacheable) override;
272 sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
273 int sampleCnt,
275 GrWrapCacheable) override;
276 sk_sp<GrRenderTarget> onWrapBackendRenderTarget(const GrBackendRenderTarget&) override;
277
278 sk_sp<GrRenderTarget> onWrapVulkanSecondaryCBAsRenderTarget(const SkImageInfo&,
279 const GrVkDrawableInfo&) override;
280
281 sk_sp<GrGpuBuffer> onCreateBuffer(size_t size, GrGpuBufferType type, GrAccessPattern) override;
282
283 bool onReadPixels(GrSurface*,
284 SkIRect,
285 GrColorType surfaceColorType,
286 GrColorType dstColorType,
287 void* buffer,
288 size_t rowBytes) override;
289
290 bool onWritePixels(GrSurface*,
291 SkIRect,
292 GrColorType surfaceColorType,
293 GrColorType srcColorType,
294 const GrMipLevel[],
295 int mipLevelCount,
296 bool prepForTexSampling) override;
297
298 bool onTransferFromBufferToBuffer(sk_sp<GrGpuBuffer> src,
299 size_t srcOffset,
301 size_t dstOffset,
302 size_t size) override;
303
304 bool onTransferPixelsTo(GrTexture*,
305 SkIRect,
306 GrColorType textureColorType,
307 GrColorType bufferColorType,
309 size_t offset,
310 size_t rowBytes) override;
311
312 bool onTransferPixelsFrom(GrSurface*,
313 SkIRect,
314 GrColorType surfaceColorType,
315 GrColorType bufferColorType,
317 size_t offset) override;
318
319 bool onCopySurface(GrSurface* dst, const SkIRect& dstRect,
320 GrSurface* src, const SkIRect& srcRect,
321 GrSamplerState::Filter) override;
322
323 void addFinishedProc(GrGpuFinishedProc finishedProc,
324 GrGpuFinishedContext finishedContext) override;
325
326 void addFinishedCallback(sk_sp<skgpu::RefCntedCallback> finishedCallback);
327
328 GrOpsRenderPass* onGetOpsRenderPass(GrRenderTarget*,
329 bool useMSAASurface,
330 GrAttachment* stencil,
332 const SkIRect&,
336 GrXferBarrierFlags renderPassXferBarriers) override;
337
338 void prepareSurfacesForBackendAccessAndStateUpdates(
341 const skgpu::MutableTextureState* newState) override;
342
343 bool onSubmitToGpu(GrSyncCpu sync) override;
344
345 void onReportSubmitHistograms() override;
346
347 // Ends and submits the current command buffer to the queue and then creates a new command
348 // buffer and begins it. If sync is set to kForce_SyncQueue, the function will wait for all
349 // work in the queue to finish before returning. If this GrVkGpu object has any semaphores in
350 // fSemaphoreToSignal, we will add those signal semaphores to the submission of this command
351 // buffer. If this GrVkGpu object has any semaphores in fSemaphoresToWaitOn, we will add those
352 // wait semaphores to the submission of this command buffer.
353 bool submitCommandBuffer(SyncQueue sync);
354
355 void copySurfaceAsCopyImage(GrSurface* dst,
356 GrSurface* src,
357 GrVkImage* dstImage,
358 GrVkImage* srcImage,
359 const SkIRect& srcRect,
360 const SkIPoint& dstPoint);
361
362 void copySurfaceAsBlit(GrSurface* dst,
363 GrSurface* src,
364 GrVkImage* dstImage,
365 GrVkImage* srcImage,
366 const SkIRect& srcRect,
367 const SkIRect& dstRect,
369
370 void copySurfaceAsResolve(GrSurface* dst, GrSurface* src, const SkIRect& srcRect,
371 const SkIPoint& dstPoint);
372
373 // helpers for onCreateTexture and writeTexturePixels
374 bool uploadTexDataLinear(GrVkImage* tex,
377 const void* data,
378 size_t rowBytes);
379 bool uploadTexDataOptimal(GrVkImage* tex,
382 const GrMipLevel texels[],
383 int mipLevelCount);
384 bool uploadTexDataCompressed(GrVkImage* tex,
385 SkTextureCompressionType compression,
386 VkFormat vkFormat,
387 SkISize dimensions,
388 skgpu::Mipmapped mipmapped,
389 const void* data,
390 size_t dataSize);
391 void resolveImage(GrSurface* dst, GrVkRenderTarget* src, const SkIRect& srcRect,
392 const SkIPoint& dstPoint);
393
394 bool createVkImageForBackendSurface(VkFormat,
395 SkISize dimensions,
396 int sampleCnt,
402
405 sk_sp<GrVkCaps> fVkCaps;
406 bool fDeviceIsLost = false;
407
408 VkPhysicalDevice fPhysicalDevice;
409 VkDevice fDevice;
410 VkQueue fQueue; // Must be Graphics queue
411 uint32_t fQueueIndex;
412
413 // Created by GrVkGpu
414 GrVkResourceProvider fResourceProvider;
415 GrStagingBufferManager fStagingBufferManager;
416
417 GrVkMSAALoadManager fMSAALoadManager;
418
419 GrVkCommandPool* fMainCmdPool;
420 // just a raw pointer; object's lifespan is managed by fCmdPool
421 GrVkPrimaryCommandBuffer* fMainCmdBuffer;
422
425
427
428 VkPhysicalDeviceProperties fPhysDevProps;
429 VkPhysicalDeviceMemoryProperties fPhysDevMemProps;
430
431 // We need a bool to track whether or not we've already disconnected all the gpu resources from
432 // vulkan context.
433 bool fDisconnected;
434
435 skgpu::Protected fProtectedContext;
436
437 std::unique_ptr<GrVkOpsRenderPass> fCachedOpsRenderPass;
438
439 skgpu::VulkanDeviceLostContext fDeviceLostContext;
440 skgpu::VulkanDeviceLostProc fDeviceLostProc;
441
442 using INHERITED = GrGpu;
443};
444
445#endif
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition: DM.cpp:213
GrWrapCacheable
Definition: GrTypesPriv.h:85
GrIOType
Definition: GrTypesPriv.h:402
GrWrapOwnership
Definition: GrTypesPriv.h:77
GrGpuBufferType
Definition: GrTypesPriv.h:411
GrMemoryless
Definition: GrTypesPriv.h:123
GrTexturable
Definition: GrTypesPriv.h:64
GrSemaphoreWrapType
Definition: GrTypesPriv.h:146
GrColorType
Definition: GrTypesPriv.h:540
GrAccessPattern
Definition: GrTypesPriv.h:424
GrSurfaceOrigin
Definition: GrTypes.h:147
void * GrGpuFinishedContext
Definition: GrTypes.h:178
void(* GrGpuFinishedProc)(GrGpuFinishedContext finishedContext)
Definition: GrTypes.h:179
GrSyncCpu
Definition: GrTypes.h:239
GrXferBarrierType
GrXferBarrierFlags
static SkColorType colorType(AImageDecoder *decoder, const AImageDecoderHeaderInfo *headerInfo)
SkFilterMode
SkTextureCompressionType
GLenum type
Definition: GrGpu.h:62
const GrCaps * caps() const
Definition: GrGpu.h:73
GrGpu(GrDirectContext *direct)
Definition: GrGpu.cpp:41
DisconnectType
Definition: GrGpu.h:80
std::unique_ptr< GrSemaphore > makeSemaphore(bool isOwned) override
Definition: GrVkGpu.cpp:2697
bool setBackendTextureState(const GrBackendTexture &, const skgpu::MutableTextureState &, skgpu::MutableTextureState *previousState, sk_sp< skgpu::RefCntedCallback > finishedCallback) override
Definition: GrVkGpu.cpp:1956
uint32_t queueIndex() const
Definition: GrVkGpu.h:73
const GrVkCaps & vkCaps() const
Definition: GrVkGpu.h:61
void onResolveRenderTarget(GrRenderTarget *target, const SkIRect &resolveRect) override
Definition: GrVkGpu.cpp:806
void insertSemaphore(GrSemaphore *semaphore) override
Definition: GrVkGpu.cpp:2708
bool zeroBuffer(sk_sp< GrGpuBuffer >)
Definition: GrVkGpu.cpp:1249
void * SubmitContext
Definition: GrVkGpu.h:167
void addImageMemoryBarrier(const GrManagedResource *, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, bool byRegion, VkImageMemoryBarrier *barrier) const
Definition: GrVkGpu.cpp:2164
bool loadMSAAFromResolve(GrVkCommandBuffer *commandBuffer, const GrVkRenderPass &renderPass, GrAttachment *dst, GrVkImage *src, const SkIRect &srcRect)
Definition: GrVkGpu.cpp:1500
void addBufferMemoryBarrier(const GrManagedResource *, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, bool byRegion, VkBufferMemoryBarrier *barrier) const
Definition: GrVkGpu.cpp:2127
const skgpu::VulkanInterface * vkInterface() const
Definition: GrVkGpu.h:60
void addDrawable(std::unique_ptr< SkDrawable::GpuDrawHandler > drawable)
Definition: GrVkGpu.cpp:2753
VkDevice device() const
Definition: GrVkGpu.h:71
void deleteBackendTexture(const GrBackendTexture &) override
Definition: GrVkGpu.cpp:2017
void checkFinishProcs() override
Definition: GrVkGpu.h:174
bool beginRenderPass(const GrVkRenderPass *, sk_sp< const GrVkFramebuffer >, const VkClearValue *colorClear, const GrSurface *, const SkIRect &renderPassBounds, bool forSecondaryCB)
Definition: GrVkGpu.cpp:2621
void disconnect(DisconnectType) override
Definition: GrVkGpu.cpp:286
const VkPhysicalDeviceMemoryProperties & physicalDeviceMemoryProperties() const
Definition: GrVkGpu.h:78
sk_sp< GrAttachment > makeStencilAttachment(const GrBackendFormat &, SkISize dimensions, int numStencilSamples) override
Definition: GrVkGpu.cpp:1601
sk_sp< GrThreadSafePipelineBuilder > refPipelineBuilder() override
Definition: GrVkGpu.cpp:302
void endRenderPass(GrRenderTarget *target, GrSurfaceOrigin origin, const SkIRect &bounds)
Definition: GrVkGpu.cpp:2651
GrVkResourceProvider & resourceProvider()
Definition: GrVkGpu.h:83
void waitSemaphore(GrSemaphore *semaphore) override
Definition: GrVkGpu.cpp:2720
GrVkCommandPool * cmdPool() const
Definition: GrVkGpu.h:74
PersistentCacheKeyType
Definition: GrVkGpu.h:184
@ kPipelineCache_PersistentCacheKeyType
Definition: GrVkGpu.h:186
@ kShader_PersistentCacheKeyType
Definition: GrVkGpu.h:185
bool onRegenerateMipMapLevels(GrTexture *tex) override
Definition: GrVkGpu.cpp:1508
GrBackendFormat getPreferredStencilFormat(const GrBackendFormat &) override
Definition: GrVkGpu.h:120
VkQueue queue() const
Definition: GrVkGpu.h:72
GrThreadSafePipelineBuilder * pipelineBuilder() override
Definition: GrVkGpu.cpp:298
bool updateBuffer(sk_sp< GrVkBuffer > buffer, const void *src, VkDeviceSize offset, VkDeviceSize size)
Definition: GrVkGpu.cpp:1229
const VkPhysicalDeviceProperties & physicalDeviceProperties() const
Definition: GrVkGpu.h:75
bool isDeviceLost() const override
Definition: GrVkGpu.h:66
std::unique_ptr< GrSemaphore > wrapBackendSemaphore(const GrBackendSemaphore &, GrSemaphoreWrapType, GrWrapOwnership) override
Definition: GrVkGpu.cpp:2701
std::unique_ptr< GrSemaphore > prepareTextureForCrossContextUsage(GrTexture *) override
Definition: GrVkGpu.cpp:2732
bool compile(const GrProgramDesc &, const GrProgramInfo &) override
Definition: GrVkGpu.cpp:2026
bool disconnected() const
Definition: GrVkGpu.h:51
static std::unique_ptr< GrGpu > Make(const skgpu::VulkanBackendContext &, const GrContextOptions &, GrDirectContext *)
Definition: GrVkGpu.cpp:70
VkPhysicalDevice physicalDevice() const
Definition: GrVkGpu.h:70
void storeVkPipelineCacheData() override
Definition: GrVkGpu.cpp:2757
GrVkPrimaryCommandBuffer * currentCommandBuffer() const
Definition: GrVkGpu.h:85
void finishOutstandingGpuWork() override
Definition: GrVkGpu.cpp:2247
sk_sp< GrAttachment > makeMSAAAttachment(SkISize dimensions, const GrBackendFormat &format, int numSamples, GrProtected isProtected, GrMemoryless isMemoryless) override
Definition: GrVkGpu.cpp:1609
void submit(GrOpsRenderPass *) override
Definition: GrVkGpu.cpp:2690
bool protectedContext() const
Definition: GrVkGpu.h:81
bool checkVkResult(VkResult)
Definition: GrVkGpu.cpp:2659
void submitSecondaryCommandBuffer(std::unique_ptr< GrVkSecondaryCommandBuffer >)
Definition: GrVkGpu.cpp:2683
GrStagingBufferManager * stagingBufferManager() override
Definition: GrVkGpu.h:63
void takeOwnershipOfBuffer(sk_sp< GrGpuBuffer >) override
Definition: GrVkGpu.cpp:2235
void releaseUnlockedBackendObjects() override
Definition: GrVkGpu.h:53
void(* SubmitProc)(SubmitContext submitContext)
Definition: GrVkGpu.h:168
bool setBackendRenderTargetState(const GrBackendRenderTarget &, const skgpu::MutableTextureState &, skgpu::MutableTextureState *previousState, sk_sp< skgpu::RefCntedCallback > finishedCallback) override
Definition: GrVkGpu.cpp:1972
~GrVkGpu() override
Definition: GrVkGpu.cpp:276
void xferBarrier(GrRenderTarget *, GrXferBarrierType) override
Definition: GrVkGpu.cpp:1988
skgpu::VulkanMemoryAllocator * memoryAllocator() const
Definition: GrVkGpu.h:68
T * get() const
Definition: SkRefCnt.h:303
DlColor color
uint32_t uint32_t * format
uint32_t * target
size_t length
SK_API GrBackendFormat MakeVk(VkFormat format, bool willUseDRMFormatModifiers=false)
Optional< SkRect > bounds
Definition: SkRecords.h:189
sk_sp< SkBlender > blender SkRect rect
Definition: SkRecords.h:350
BackendSurfaceAccess
Definition: SkSurface.h:44
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir Path to the cache directory This is different from the persistent_cache_path in embedder which is used for Skia shader cache icu native lib Path to the library file that exports the ICU data vm service The hostname IP address on which the Dart VM Service should be served If not defaults to or::depending on whether ipv6 is specified vm service A custom Dart VM Service port The default is to pick a randomly available open port disable vm Disable the Dart VM Service The Dart VM Service is never available in release mode disable vm service Disable mDNS Dart VM Service publication Bind to the IPv6 localhost address for the Dart VM Service Ignored if vm service host is set endless trace buffer
Definition: switches.h:126
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition: switches.h:259
dst
Definition: cp.py:12
Definition: GpuTools.h:21
Budgeted
Definition: GpuTypes.h:35
Renderable
Definition: GpuTypes.h:69
Mipmapped
Definition: GpuTypes.h:53
void * VulkanDeviceLostContext
Definition: VulkanTypes.h:121
void(* VulkanDeviceLostProc)(VulkanDeviceLostContext faultContext, const std::string &description, const std::vector< VkDeviceFaultAddressInfoEXT > &addressInfos, const std::vector< VkDeviceFaultVendorInfoEXT > &vendorInfos, const std::vector< std::byte > &vendorBinaryData)
Definition: VulkanTypes.h:122
Protected
Definition: GpuTypes.h:61
SeparatedVector2 offset
Definition: SkRect.h:32
Definition: SkSize.h:16
std::shared_ptr< const fml::Mapping > data
Definition: texture_gles.cc:63
VkFlags VkPipelineStageFlags
Definition: vulkan_core.h:2470
VkImageLayout
Definition: vulkan_core.h:1330
uint64_t VkDeviceSize
Definition: vulkan_core.h:96
VkResult
Definition: vulkan_core.h:140
VkFormat
Definition: vulkan_core.h:1458