| Flutter Impeller |

capabilities_vk.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_CAPABILITIES_VK_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_CAPABILITIES_VK_H_
7
8 #include <cstdint>
9 #include <map>
10 #include <optional>
11 #include <set>
12 #include <string>
13 #include <vector>
14
15 #include "impeller/base/backend_cast.h"
16 #include "impeller/core/texture_descriptor.h"
17 #include "impeller/renderer/backend/vulkan/vk.h"
18 #include "impeller/renderer/backend/vulkan/workarounds_vk.h"
19 #include "impeller/renderer/capabilities.h"
20
21 namespace impeller {
22
23 class ContextVK;
24
25 //------------------------------------------------------------------------------
26 /// @brief A device extension available on all platforms. Without the
27 /// presence of these extensions, context creation will fail.
28 ///
29 enum class RequiredCommonDeviceExtensionVK : uint32_t {
30 //----------------------------------------------------------------------------
31 /// For displaying content in the window system.
32 ///
33 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_swapchain.html
34 ///
35 kKHRSwapchain,
36
37 kLast,
38 };
39
40 //------------------------------------------------------------------------------
41 /// @brief A device extension available on all Android platforms. Without
42 /// the presence of these extensions on Android, context creation
43 /// will fail.
44 ///
45 /// Platform agnostic code can still check if these Android
46 /// extensions are present.
47 ///
48 enum class RequiredAndroidDeviceExtensionVK : uint32_t {
49 //----------------------------------------------------------------------------
50 /// For importing hardware buffers used in external texture composition.
51 ///
52 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_ANDROID_external_memory_android_hardware_buffer.html
53 ///
54 kANDROIDExternalMemoryAndroidHardwareBuffer,
55
56 //----------------------------------------------------------------------------
57 /// Dependency of kANDROIDExternalMemoryAndroidHardwareBuffer.
58 ///
59 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_sampler_ycbcr_conversion.html
60 ///
61 kKHRSamplerYcbcrConversion,
62
63 //----------------------------------------------------------------------------
64 /// Dependency of kANDROIDExternalMemoryAndroidHardwareBuffer.
65 ///
66 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_external_memory.html
67 ///
68 kKHRExternalMemory,
69
70 //----------------------------------------------------------------------------
71 /// Dependency of kANDROIDExternalMemoryAndroidHardwareBuffer.
72 ///
73 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_queue_family_foreign.html
74 ///
75 kEXTQueueFamilyForeign,
76
77 //----------------------------------------------------------------------------
78 /// Dependency of kANDROIDExternalMemoryAndroidHardwareBuffer.
79 ///
80 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_dedicated_allocation.html
81 ///
82 kKHRDedicatedAllocation,
83
84 kLast,
85 };
86
87 //------------------------------------------------------------------------------
88 /// @brief A device extension available on some Android platforms.
89 ///
90 /// Platform agnostic code can still check if these Android
91 /// extensions are present.
92 ///
93 enum class OptionalAndroidDeviceExtensionVK : uint32_t {
94 //----------------------------------------------------------------------------
95 /// For exporting file descriptors from fences to interact with platform APIs.
96 ///
97 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_external_fence_fd.html
98 ///
99 kKHRExternalFenceFd,
100
101 //----------------------------------------------------------------------------
102 /// Dependency of kKHRExternalFenceFd.
103 ///
104 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_external_fence.html
105 ///
106 kKHRExternalFence,
107
108 //----------------------------------------------------------------------------
109 /// For importing sync file descriptors as semaphores so the GPU can wait for
110 /// semaphore to be signaled.
111 ///
112 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_external_semaphore_fd.html
113 kKHRExternalSemaphoreFd,
114
115 //----------------------------------------------------------------------------
116 /// Dependency of kKHRExternalSemaphoreFd
117 ///
118 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_external_semaphore.html
119 kKHRExternalSemaphore,
120
121 kLast,
122 };
123
124 //------------------------------------------------------------------------------
125 /// @brief A device extension enabled if available. Subsystems cannot
126 /// assume availability and must check if these extensions are
127 /// available.
128 ///
129 /// @see `CapabilitiesVK::HasExtension`.
130 ///
131 enum class OptionalDeviceExtensionVK : uint32_t {
132 //----------------------------------------------------------------------------
133 /// To instrument and profile PSO creation.
134 ///
135 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_pipeline_creation_feedback.html
136 ///
137 kEXTPipelineCreationFeedback,
138
139 //----------------------------------------------------------------------------
140 /// To enable context creation on MoltenVK. A non-conformant Vulkan
141 /// implementation.
142 ///
143 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_portability_subset.html
144 ///
145 kVKKHRPortabilitySubset,
146
147 //----------------------------------------------------------------------------
148 /// For fixed-rate compression of images.
149 ///
150 /// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_image_compression_control.html
151 ///
152 kEXTImageCompressionControl,
153
154 kLast,
155 };
156
157 //------------------------------------------------------------------------------
158 /// @brief A pixel format and usage that is sufficient to check if images
159 /// of that format and usage are suitable for use with fixed-rate
160 /// compression.
161 ///
162 struct FRCFormatDescriptor {
163 vk::Format format = vk::Format::eUndefined;
164 vk::ImageType type = {};
165 vk::ImageTiling tiling = {};
166 vk::ImageUsageFlags usage = {};
167 vk::ImageCreateFlags flags = {};
168
169 explicit FRCFormatDescriptor(const vk::ImageCreateInfo& image_info)
170 : format(image_info.format),
171 type(image_info.imageType),
172 tiling(image_info.tiling),
173 usage(image_info.usage),
174 flags(image_info.flags) {}
175 };
176
177 //------------------------------------------------------------------------------
178 /// @brief The Vulkan layers and extensions wrangler.
179 ///
180 class CapabilitiesVK final : public Capabilities,
181 public BackendCast<CapabilitiesVK, Capabilities> {
182 public:
183 explicit CapabilitiesVK(bool enable_validations,
184 bool fatal_missing_validations = false,
185 bool use_embedder_extensions = false,
186 std::vector<std::string> instance_extensions = {},
187 std::vector<std::string> device_extensions = {});
188
189 ~CapabilitiesVK();
190
191 bool IsValid() const;
192
193 bool AreValidationsEnabled() const;
194
195 bool HasExtension(RequiredCommonDeviceExtensionVK ext) const;
196
197 bool HasExtension(RequiredAndroidDeviceExtensionVK ext) const;
198
199 bool HasExtension(OptionalDeviceExtensionVK ext) const;
200
201 bool HasExtension(OptionalAndroidDeviceExtensionVK ext) const;
202
203 std::optional<std::vector<std::string>> GetEnabledLayers() const;
204
205 std::optional<std::vector<std::string>> GetEnabledInstanceExtensions() const;
206
207 std::optional<std::vector<std::string>> GetEnabledDeviceExtensions(
208 const vk::PhysicalDevice& physical_device) const;
209
210 using PhysicalDeviceFeatures =
211 vk::StructureChain<vk::PhysicalDeviceFeatures2,
212 vk::PhysicalDeviceSamplerYcbcrConversionFeaturesKHR,
213 vk::PhysicalDevice16BitStorageFeatures,
214 vk::PhysicalDeviceImageCompressionControlFeaturesEXT>;
215
216 std::optional<PhysicalDeviceFeatures> GetEnabledDeviceFeatures(
217 const vk::PhysicalDevice& physical_device) const;
218
219 [[nodiscard]] bool SetPhysicalDevice(
220 const vk::PhysicalDevice& physical_device,
221 const PhysicalDeviceFeatures& enabled_features);
222
223 const vk::PhysicalDeviceProperties& GetPhysicalDeviceProperties() const;
224
225 void SetOffscreenFormat(PixelFormat pixel_format) const;
226
227 // |Capabilities|
228 bool SupportsOffscreenMSAA() const override;
229
230 // |Capabilities|
231 bool SupportsImplicitResolvingMSAA() const override;
232
233 // |Capabilities|
234 bool SupportsSSBO() const override;
235
236 // |Capabilities|
237 bool SupportsTextureToTextureBlits() const override;
238
239 // |Capabilities|
240 bool SupportsFramebufferFetch() const override;
241
242 // |Capabilities|
243 bool SupportsCompute() const override;
244
245 // |Capabilities|
246 bool SupportsComputeSubgroups() const override;
247
248 // |Capabilities|
249 bool SupportsReadFromResolve() const override;
250
251 // |Capabilities|
252 bool SupportsDecalSamplerAddressMode() const override;
253
254 // |Capabilities|
255 bool SupportsDeviceTransientTextures() const override;
256
257 // |Capabilities|
258 bool SupportsTriangleFan() const override;
259
260 // |Capabilities|
261 bool SupportsPrimitiveRestart() const override;
262
263 // |Capabilities|
264 bool SupportsExtendedRangeFormats() const override;
265
266 // |Capabilities|
267 PixelFormat GetDefaultColorFormat() const override;
268
269 // |Capabilities|
270 PixelFormat GetDefaultStencilFormat() const override;
271
272 // |Capabilities|
273 PixelFormat GetDefaultDepthStencilFormat() const override;
274
275 // |Capabilities|
276 PixelFormat GetDefaultGlyphAtlasFormat() const override;
277
278 // |Capabilities|
279 ISize GetMaximumRenderPassAttachmentSize() const override;
280
281 //----------------------------------------------------------------------------
282 /// @return If fixed-rate compression for non-onscreen surfaces is
283 /// supported.
284 ///
285 bool SupportsTextureFixedRateCompression() const;
286
287 /// Whether the external fence and semaphore extensions used for AHB support
288 /// are available.
289 bool SupportsExternalSemaphoreExtensions() const;
290
291 //----------------------------------------------------------------------------
292 /// @brief Get the fixed compression rate supported by the context for
293 /// the given format and usage.
294 ///
295 /// @param[in] compression_type The compression type.
296 /// @param[in] desc The format and usage of the image.
297 ///
298 /// @return The supported fixed compression rate.
299 ///
300 std::optional<vk::ImageCompressionFixedRateFlagBitsEXT> GetSupportedFRCRate(
301 CompressionType compression_type,
302 const FRCFormatDescriptor& desc) const;
303
304 //----------------------------------------------------------------------------
305 /// @brief Update capabilities for the given set of workarounds.
306 void ApplyWorkarounds(const WorkaroundsVK& workarounds);
307
308 private:
309 bool validations_enabled_ = false;
310 std::map<std::string, std::set<std::string>> exts_;
311 std::set<RequiredCommonDeviceExtensionVK> required_common_device_extensions_;
312 std::set<RequiredAndroidDeviceExtensionVK>
313 required_android_device_extensions_;
314 std::set<OptionalAndroidDeviceExtensionVK>
315 optional_android_device_extensions_;
316 std::set<OptionalDeviceExtensionVK> optional_device_extensions_;
317 mutable PixelFormat default_color_format_ = PixelFormat::kUnknown;
318 PixelFormat default_stencil_format_ = PixelFormat::kUnknown;
319 PixelFormat default_depth_stencil_format_ = PixelFormat::kUnknown;
320 vk::PhysicalDevice physical_device_;
321 vk::PhysicalDeviceProperties device_properties_;
322 bool supports_compute_subgroups_ = false;
323 bool supports_device_transient_textures_ = false;
324 bool supports_texture_fixed_rate_compression_ = false;
325 ISize max_render_pass_attachment_size_ = ISize{0, 0};
326 bool has_triangle_fans_ = true;
327 bool has_primitive_restart_ = true;
328 bool has_framebuffer_fetch_ = true;
329 bool supports_external_fence_and_semaphore_ = false;
330 bool is_valid_ = false;
331
332 // The embedder.h API is responsible for providing the instance and device
333 // extensions.
334 bool use_embedder_extensions_ = false;
335 std::vector<std::string> embedder_instance_extensions_;
336 std::vector<std::string> embedder_device_extensions_;
337
338 bool HasExtension(const std::string& ext) const;
339
340 bool HasLayer(const std::string& layer) const;
341
342 CapabilitiesVK(const CapabilitiesVK&) = delete;
343
344 CapabilitiesVK& operator=(const CapabilitiesVK&) = delete;
345 };
346
347 } // namespace impeller
348
349 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_CAPABILITIES_VK_H_
backend_cast.h
capabilities.h
impeller::BackendCast
Definition: backend_cast.h:11
impeller::Capabilities
Definition: capabilities.h:14
impeller::CapabilitiesVK
The Vulkan layers and extensions wrangler.
Definition: capabilities_vk.h:181
impeller::CapabilitiesVK::SupportsTriangleFan
bool SupportsTriangleFan() const override
Whether the primitive type TriangleFan is supported by the backend.
Definition: capabilities_vk.cc:798
impeller::CapabilitiesVK::SupportsDeviceTransientTextures
bool SupportsDeviceTransientTextures() const override
Whether the context backend supports allocating StorageMode::kDeviceTransient (aka "memoryless") text...
Definition: capabilities_vk.cc:693
impeller::CapabilitiesVK::GetEnabledInstanceExtensions
std::optional< std::vector< std::string > > GetEnabledInstanceExtensions() const
Definition: capabilities_vk.cc:96
impeller::CapabilitiesVK::AreValidationsEnabled
bool AreValidationsEnabled() const
Definition: capabilities_vk.cc:79
impeller::CapabilitiesVK::SetPhysicalDevice
bool SetPhysicalDevice(const vk::PhysicalDevice &physical_device, const PhysicalDeviceFeatures &enabled_features)
Definition: capabilities_vk.cc:514
impeller::CapabilitiesVK::GetMaximumRenderPassAttachmentSize
ISize GetMaximumRenderPassAttachmentSize() const override
Return the maximum size of a render pass attachment.
Definition: capabilities_vk.cc:802
impeller::CapabilitiesVK::SupportsSSBO
bool SupportsSSBO() const override
Whether the context backend supports binding Shader Storage Buffer Objects (SSBOs) to pipelines.
Definition: capabilities_vk.cc:657
impeller::CapabilitiesVK::SupportsFramebufferFetch
bool SupportsFramebufferFetch() const override
Whether the context backend is able to support pipelines with shaders that read from the framebuffer ...
Definition: capabilities_vk.cc:667
impeller::CapabilitiesVK::SupportsExternalSemaphoreExtensions
bool SupportsExternalSemaphoreExtensions() const
Definition: capabilities_vk.cc:811
impeller::CapabilitiesVK::CapabilitiesVK
CapabilitiesVK(bool enable_validations, bool fatal_missing_validations=false, bool use_embedder_extensions=false, std::vector< std::string > instance_extensions={}, std::vector< std::string > device_extensions={})
Definition: capabilities_vk.cc:19
impeller::CapabilitiesVK::~CapabilitiesVK
~CapabilitiesVK()
impeller::CapabilitiesVK::SupportsOffscreenMSAA
bool SupportsOffscreenMSAA() const override
Whether the context backend supports attaching offscreen MSAA color/stencil textures.
Definition: capabilities_vk.cc:647
impeller::CapabilitiesVK::SupportsCompute
bool SupportsCompute() const override
Whether the context backend supports ComputePass.
Definition: capabilities_vk.cc:672
impeller::CapabilitiesVK::HasExtension
bool HasExtension(RequiredCommonDeviceExtensionVK ext) const
Definition: capabilities_vk.cc:721
impeller::CapabilitiesVK::GetSupportedFRCRate
std::optional< vk::ImageCompressionFixedRateFlagBitsEXT > GetSupportedFRCRate(CompressionType compression_type, const FRCFormatDescriptor &desc) const
Get the fixed compression rate supported by the context for the given format and usage.
Definition: capabilities_vk.cc:746
impeller::CapabilitiesVK::SetOffscreenFormat
void SetOffscreenFormat(PixelFormat pixel_format) const
Definition: capabilities_vk.cc:510
impeller::CapabilitiesVK::GetDefaultStencilFormat
PixelFormat GetDefaultStencilFormat() const override
Returns a supported PixelFormat for textures that store stencil information. May include a depth chan...
Definition: capabilities_vk.cc:703
impeller::CapabilitiesVK::ApplyWorkarounds
void ApplyWorkarounds(const WorkaroundsVK &workarounds)
Update capabilities for the given set of workarounds.
Definition: capabilities_vk.cc:806
impeller::CapabilitiesVK::IsValid
bool IsValid() const
Definition: capabilities_vk.cc:75
impeller::CapabilitiesVK::PhysicalDeviceFeatures
vk::StructureChain< vk::PhysicalDeviceFeatures2, vk::PhysicalDeviceSamplerYcbcrConversionFeaturesKHR, vk::PhysicalDevice16BitStorageFeatures, vk::PhysicalDeviceImageCompressionControlFeaturesEXT > PhysicalDeviceFeatures
Definition: capabilities_vk.h:214
impeller::CapabilitiesVK::SupportsComputeSubgroups
bool SupportsComputeSubgroups() const override
Whether the context backend supports configuring ComputePass command subgroups.
Definition: capabilities_vk.cc:678
impeller::CapabilitiesVK::GetDefaultDepthStencilFormat
PixelFormat GetDefaultDepthStencilFormat() const override
Returns a supported PixelFormat for textures that store both a stencil and depth component....
Definition: capabilities_vk.cc:708
impeller::CapabilitiesVK::SupportsTextureToTextureBlits
bool SupportsTextureToTextureBlits() const override
Whether the context backend supports blitting from one texture region to another texture region (via ...
Definition: capabilities_vk.cc:662
impeller::CapabilitiesVK::GetEnabledDeviceExtensions
std::optional< std::vector< std::string > > GetEnabledDeviceExtensions(const vk::PhysicalDevice &physical_device) const
Definition: capabilities_vk.cc:260
impeller::CapabilitiesVK::SupportsReadFromResolve
bool SupportsReadFromResolve() const override
Whether the context backend supports binding the current RenderPass attachments. This is supported if...
Definition: capabilities_vk.cc:684
impeller::CapabilitiesVK::SupportsDecalSamplerAddressMode
bool SupportsDecalSamplerAddressMode() const override
Whether the context backend supports SamplerAddressMode::Decal.
Definition: capabilities_vk.cc:688
impeller::CapabilitiesVK::SupportsPrimitiveRestart
bool SupportsPrimitiveRestart() const override
Whether primitive restart is supported.
Definition: capabilities_vk.cc:506
impeller::CapabilitiesVK::GetEnabledLayers
std::optional< std::vector< std::string > > GetEnabledLayers() const
Definition: capabilities_vk.cc:83
impeller::CapabilitiesVK::SupportsTextureFixedRateCompression
bool SupportsTextureFixedRateCompression() const
Definition: capabilities_vk.cc:741
impeller::CapabilitiesVK::GetDefaultGlyphAtlasFormat
PixelFormat GetDefaultGlyphAtlasFormat() const override
Returns the default pixel format for the alpha bitmap glyph atlas.
Definition: capabilities_vk.cc:717
impeller::CapabilitiesVK::GetDefaultColorFormat
PixelFormat GetDefaultColorFormat() const override
Returns a supported PixelFormat for textures that store 4-channel colors (red/green/blue/alpha).
Definition: capabilities_vk.cc:698
impeller::CapabilitiesVK::GetPhysicalDeviceProperties
const vk::PhysicalDeviceProperties & GetPhysicalDeviceProperties() const
Definition: capabilities_vk.cc:713
impeller::CapabilitiesVK::SupportsExtendedRangeFormats
bool SupportsExtendedRangeFormats() const override
Whether the XR formats are supported on this device.
Definition: capabilities_vk.cc:815
impeller::CapabilitiesVK::SupportsImplicitResolvingMSAA
bool SupportsImplicitResolvingMSAA() const override
Whether the context backend supports multisampled rendering to the on-screen surface without requirin...
Definition: capabilities_vk.cc:652
impeller::CapabilitiesVK::GetEnabledDeviceFeatures
std::optional< PhysicalDeviceFeatures > GetEnabledDeviceFeatures(const vk::PhysicalDevice &physical_device) const
Definition: capabilities_vk.cc:395
impeller
Definition: allocation.cc:12
impeller::RequiredAndroidDeviceExtensionVK
RequiredAndroidDeviceExtensionVK
A device extension available on all Android platforms. Without the presence of these extensions on An...
Definition: capabilities_vk.h:48
impeller::RequiredAndroidDeviceExtensionVK::kKHRExternalMemory
@ kKHRExternalMemory
impeller::RequiredAndroidDeviceExtensionVK::kKHRSamplerYcbcrConversion
@ kKHRSamplerYcbcrConversion
impeller::RequiredAndroidDeviceExtensionVK::kKHRDedicatedAllocation
@ kKHRDedicatedAllocation
impeller::RequiredAndroidDeviceExtensionVK::kLast
@ kLast
impeller::RequiredAndroidDeviceExtensionVK::kEXTQueueFamilyForeign
@ kEXTQueueFamilyForeign
impeller::RequiredAndroidDeviceExtensionVK::kANDROIDExternalMemoryAndroidHardwareBuffer
@ kANDROIDExternalMemoryAndroidHardwareBuffer
impeller::PixelFormat
PixelFormat
The Pixel formats supported by Impeller. The naming convention denotes the usage of the component,...
Definition: formats.h:99
impeller::PixelFormat::kUnknown
@ kUnknown
impeller::RequiredCommonDeviceExtensionVK
RequiredCommonDeviceExtensionVK
A device extension available on all platforms. Without the presence of these extensions,...
Definition: capabilities_vk.h:29
impeller::RequiredCommonDeviceExtensionVK::kKHRSwapchain
@ kKHRSwapchain
impeller::RequiredCommonDeviceExtensionVK::kLast
@ kLast
impeller::OptionalAndroidDeviceExtensionVK
OptionalAndroidDeviceExtensionVK
A device extension available on some Android platforms.
Definition: capabilities_vk.h:93
impeller::OptionalAndroidDeviceExtensionVK::kKHRExternalFenceFd
@ kKHRExternalFenceFd
impeller::OptionalAndroidDeviceExtensionVK::kKHRExternalSemaphore
@ kKHRExternalSemaphore
impeller::OptionalAndroidDeviceExtensionVK::kKHRExternalFence
@ kKHRExternalFence
impeller::OptionalAndroidDeviceExtensionVK::kKHRExternalSemaphoreFd
@ kKHRExternalSemaphoreFd
impeller::OptionalAndroidDeviceExtensionVK::kLast
@ kLast
impeller::CompressionType
CompressionType
Additional compression to apply to a texture. This value is ignored on platforms which do not support...
Definition: texture_descriptor.h:19
impeller::OptionalDeviceExtensionVK
OptionalDeviceExtensionVK
A device extension enabled if available. Subsystems cannot assume availability and must check if thes...
Definition: capabilities_vk.h:131
impeller::OptionalDeviceExtensionVK::kEXTImageCompressionControl
@ kEXTImageCompressionControl
impeller::OptionalDeviceExtensionVK::kLast
@ kLast
impeller::OptionalDeviceExtensionVK::kVKKHRPortabilitySubset
@ kVKKHRPortabilitySubset
impeller::OptionalDeviceExtensionVK::kEXTPipelineCreationFeedback
@ kEXTPipelineCreationFeedback
impeller::FRCFormatDescriptor
A pixel format and usage that is sufficient to check if images of that format and usage are suitable ...
Definition: capabilities_vk.h:162
impeller::FRCFormatDescriptor::tiling
vk::ImageTiling tiling
Definition: capabilities_vk.h:165
impeller::FRCFormatDescriptor::usage
vk::ImageUsageFlags usage
Definition: capabilities_vk.h:166
impeller::FRCFormatDescriptor::flags
vk::ImageCreateFlags flags
Definition: capabilities_vk.h:167
impeller::FRCFormatDescriptor::type
vk::ImageType type
Definition: capabilities_vk.h:164
impeller::FRCFormatDescriptor::format
vk::Format format
Definition: capabilities_vk.h:163
impeller::FRCFormatDescriptor::FRCFormatDescriptor
FRCFormatDescriptor(const vk::ImageCreateInfo &image_info)
Definition: capabilities_vk.h:169
impeller::TSize
Definition: size.h:25
impeller::WorkaroundsVK
A non-exhaustive set of driver specific workarounds.
Definition: workarounds_vk.h:13
texture_descriptor.h
vk.h
workarounds_vk.h