• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_features.py using data from vk_features.json.
3 //
4 // Copyright 2022 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // FeaturesVk_autogen.h: Optional features for the Vulkan renderer.
9 
10 #ifndef ANGLE_PLATFORM_AUTOGEN_FEATURESVK_H_
11 #define ANGLE_PLATFORM_AUTOGEN_FEATURESVK_H_
12 
13 #include "platform/Feature.h"
14 
15 namespace angle
16 {
17 
18 struct FeaturesVk : FeatureSetBase
19 {
20     FeaturesVk();
21     ~FeaturesVk();
22 
23     FeatureInfo appendAliasedMemoryDecorations = {
24         "appendAliasedMemoryDecorations",
25         FeatureCategory::VulkanWorkarounds,
26         "Append aliased memory decoration to ssbo and image in SpirV if they are not declared with restrict memory qualifier in GLSL",
27         &members, "b/266235549"
28     };
29 
30     FeatureInfo bresenhamLineRasterization = {
31         "bresenhamLineRasterization",
32         FeatureCategory::VulkanFeatures,
33         "Enable Bresenham line rasterization via VK_EXT_line_rasterization extension",
34         &members,
35     };
36 
37     FeatureInfo provokingVertex = {
38         "provokingVertex",
39         FeatureCategory::VulkanFeatures,
40         "Enable provoking vertex mode via VK_EXT_provoking_vertex extension",
41         &members,
42     };
43 
44     FeatureInfo forceFallbackFormat = {
45         "forceFallbackFormat",
46         FeatureCategory::VulkanWorkarounds,
47         "Force a fallback format for angle_end2end_tests",
48         &members,
49     };
50 
51     FeatureInfo clampPointSize = {
52         "clampPointSize",
53         FeatureCategory::VulkanWorkarounds,
54         "The point size range reported from the API is inconsistent with the actual behavior",
55         &members, "http://anglebug.com/2970"
56     };
57 
58     FeatureInfo supportsDepthClipEnable = {
59         "supportsDepthClipEnable",
60         FeatureCategory::VulkanFeatures,
61         "VkDevice supports the VK_EXT_depth_clip_enable extension.",
62         &members, "http://anglebug.com/3970"
63     };
64 
65     FeatureInfo supportsDepthClampZeroOne = {
66         "supportsDepthClampZeroOne",
67         FeatureCategory::VulkanFeatures,
68         "VkDevice supports the VK_EXT_depth_clamp_zero_one extension",
69         &members, "http://anglebug.com/3970"
70     };
71 
72     FeatureInfo clampFragDepth = {
73         "clampFragDepth",
74         FeatureCategory::VulkanWorkarounds,
75         "gl_FragDepth is not clamped when rendering to a floating point depth buffer without VK_EXT_depth_clamp_zero_one",
76         &members, "http://anglebug.com/3970"
77     };
78 
79     FeatureInfo mutableMipmapTextureUpload = {
80         "mutableMipmapTextureUpload",
81         FeatureCategory::VulkanFeatures,
82         "Enable uploading the previously defined mutable mipmap texture.",
83         &members, "https://anglebug.com/7308"
84     };
85 
86     FeatureInfo useVmaForImageSuballocation = {
87         "useVmaForImageSuballocation",
88         FeatureCategory::VulkanFeatures,
89         "Utilize VMA for image memory suballocation.",
90         &members,
91     };
92 
93     FeatureInfo supportsMemoryBudget = {
94         "supportsMemoryBudget",
95         FeatureCategory::VulkanFeatures,
96         "VkDevice supports the VK_EXT_memory_budget extension.",
97         &members,
98     };
99 
100     FeatureInfo supportsRenderpass2 = {
101         "supportsRenderpass2",
102         FeatureCategory::VulkanFeatures,
103         "VkDevice supports the VK_KHR_create_renderpass2 extension",
104         &members,
105     };
106 
107     FeatureInfo supportsIncrementalPresent = {
108         "supportsIncrementalPresent",
109         FeatureCategory::VulkanFeatures,
110         "VkDevice supports the VK_KHR_incremental_present extension",
111         &members,
112     };
113 
114     FeatureInfo supportsAndroidHardwareBuffer = {
115         "supportsAndroidHardwareBuffer",
116         FeatureCategory::VulkanFeatures,
117         "VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension",
118         &members,
119     };
120 
121     FeatureInfo supportsGGPFrameToken = {
122         "supportsGGPFrameToken",
123         FeatureCategory::VulkanFeatures,
124         "VkDevice supports the VK_GGP_frame_token extension",
125         &members,
126     };
127 
128     FeatureInfo supportsExternalMemoryFd = {
129         "supportsExternalMemoryFd",
130         FeatureCategory::VulkanFeatures,
131         "VkDevice supports the VK_KHR_external_memory_fd extension",
132         &members,
133     };
134 
135     FeatureInfo supportsExternalMemoryFuchsia = {
136         "supportsExternalMemoryFuchsia",
137         FeatureCategory::VulkanFeatures,
138         "VkDevice supports the VK_FUCHSIA_external_memory extension",
139         &members,
140     };
141 
142     FeatureInfo supportsFilteringPrecision = {
143         "supportsFilteringPrecision",
144         FeatureCategory::VulkanFeatures,
145         "VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension",
146         &members,
147     };
148 
149     FeatureInfo supportsExternalFenceCapabilities = {
150         "supportsExternalFenceCapabilities",
151         FeatureCategory::VulkanFeatures,
152         "VkInstance supports the VK_KHR_external_fence_capabilities extension",
153         &members,
154     };
155 
156     FeatureInfo supportsExternalSemaphoreCapabilities = {
157         "supportsExternalSemaphoreCapabilities",
158         FeatureCategory::VulkanFeatures,
159         "VkInstance supports the VK_KHR_external_semaphore_capabilities extension",
160         &members,
161     };
162 
163     FeatureInfo supportsExternalSemaphoreFd = {
164         "supportsExternalSemaphoreFd",
165         FeatureCategory::VulkanFeatures,
166         "VkDevice supports the VK_KHR_external_semaphore_fd extension",
167         &members,
168     };
169 
170     FeatureInfo supportsExternalSemaphoreFuchsia = {
171         "supportsExternalSemaphoreFuchsia",
172         FeatureCategory::VulkanFeatures,
173         "VkDevice supports the VK_FUCHSIA_external_semaphore extension",
174         &members,
175     };
176 
177     FeatureInfo supportsExternalFenceFd = {
178         "supportsExternalFenceFd",
179         FeatureCategory::VulkanFeatures,
180         "VkDevice supports the VK_KHR_external_fence_fd extension",
181         &members, "http://anglebug.com/2517"
182     };
183 
184     FeatureInfo supportsAndroidNativeFenceSync = {
185         "supportsAndroidNativeFenceSync",
186         FeatureCategory::VulkanFeatures,
187         "VkDevice supports the EGL_ANDROID_native_fence_sync extension",
188         &members, "http://anglebug.com/2517"
189     };
190 
191     FeatureInfo supportsImageCubeArray = {
192         "supportsImageCubeArray",
193         FeatureCategory::VulkanFeatures,
194         "VkDevice supports the imageCubeArray feature properly",
195         &members, "http://anglebug.com/3584"
196     };
197 
198     FeatureInfo supportsPipelineStatisticsQuery = {
199         "supportsPipelineStatisticsQuery",
200         FeatureCategory::VulkanFeatures,
201         "VkDevice supports the pipelineStatisticsQuery feature",
202         &members, "http://anglebug.com/5430"
203     };
204 
205     FeatureInfo supportsShaderStencilExport = {
206         "supportsShaderStencilExport",
207         FeatureCategory::VulkanFeatures,
208         "VkDevice supports the VK_EXT_shader_stencil_export extension",
209         &members,
210     };
211 
212     FeatureInfo supportsYUVSamplerConversion = {
213         "supportsYUVSamplerConversion",
214         FeatureCategory::VulkanFeatures,
215         "VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension",
216         &members,
217     };
218 
219     FeatureInfo emulateTransformFeedback = {
220         "emulateTransformFeedback",
221         FeatureCategory::VulkanFeatures,
222         "Emulate transform feedback as the VK_EXT_transform_feedback is not present.",
223         &members, "http://anglebug.com/3205"
224     };
225 
226     FeatureInfo supportsTransformFeedbackExtension = {
227         "supportsTransformFeedbackExtension",
228         FeatureCategory::VulkanFeatures,
229         "Transform feedback uses the VK_EXT_transform_feedback extension.",
230         &members, "http://anglebug.com/3206"
231     };
232 
233     FeatureInfo supportsGeometryStreamsCapability = {
234         "supportsGeometryStreamsCapability",
235         FeatureCategory::VulkanFeatures,
236         "Implementation supports the GeometryStreams SPIR-V capability.",
237         &members, "http://anglebug.com/3206"
238     };
239 
240     FeatureInfo supportsIndexTypeUint8 = {
241         "supportsIndexTypeUint8",
242         FeatureCategory::VulkanFeatures,
243         "VkDevice supports the VK_EXT_index_type_uint8 extension",
244         &members, "http://anglebug.com/4405"
245     };
246 
247     FeatureInfo supportsCustomBorderColor = {
248         "supportsCustomBorderColor",
249         FeatureCategory::VulkanFeatures,
250         "VkDevice supports the VK_EXT_custom_border_color extension",
251         &members, "http://anglebug.com/3577"
252     };
253 
254     FeatureInfo supportsMultiDrawIndirect = {
255         "supportsMultiDrawIndirect",
256         FeatureCategory::VulkanFeatures,
257         "VkDevice supports the multiDrawIndirect extension",
258         &members, "http://anglebug.com/6439"
259     };
260 
261     FeatureInfo supportsDepthStencilResolve = {
262         "supportsDepthStencilResolve",
263         FeatureCategory::VulkanFeatures,
264         "VkDevice supports the VK_KHR_depth_stencil_resolve "
265         "extension with the independentResolveNone feature",
266         &members, "http://anglebug.com/4836"
267     };
268 
269     FeatureInfo supportsMultisampledRenderToSingleSampledGOOGLEX = {
270         "supportsMultisampledRenderToSingleSampledGOOGLEX",
271         FeatureCategory::VulkanFeatures,
272         "VkDevice supports the VK_GOOGLEX_multisampled_render_to_single_sampled extension",
273         &members, "http://anglebug.com/4836"
274     };
275 
276     FeatureInfo supportsMultisampledRenderToSingleSampled = {
277         "supportsMultisampledRenderToSingleSampled",
278         FeatureCategory::VulkanFeatures,
279         "VkDevice supports the VK_EXT_multisampled_render_to_single_sampled extension",
280         &members, "http://anglebug.com/4836"
281     };
282 
283     FeatureInfo supportsMultiview = {
284         "supportsMultiview",
285         FeatureCategory::VulkanFeatures,
286         "VkDevice supports the VK_KHR_multiview extension",
287         &members, "http://anglebug.com/6048"
288     };
289 
290     FeatureInfo forceD16TexFilter = {
291         "forceD16TexFilter",
292         FeatureCategory::VulkanWorkarounds,
293         "VK_FORMAT_D16_UNORM does not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, "
294         "which prevents OES_depth_texture from being supported.",
295         &members, "http://anglebug.com/3452"
296     };
297 
298     FeatureInfo disableFlippingBlitWithCommand = {
299         "disableFlippingBlitWithCommand",
300         FeatureCategory::VulkanWorkarounds,
301         "vkCmdBlitImage with flipped coordinates blits incorrectly.",
302         &members, "http://anglebug.com/3498"
303     };
304 
305     FeatureInfo perFrameWindowSizeQuery = {
306         "perFrameWindowSizeQuery",
307         FeatureCategory::VulkanWorkarounds,
308         "Vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE when window resizing",
309         &members, "http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625"
310     };
311 
312     FeatureInfo padBuffersToMaxVertexAttribStride = {
313         "padBuffersToMaxVertexAttribStride",
314         FeatureCategory::VulkanWorkarounds,
315         "Vulkan considers vertex attribute accesses to count up to the last multiple of the "
316         "stride. This additional access supports AMD's robust buffer access implementation. "
317         "AMDVLK in particular will return incorrect values when the vertex access extends into "
318         "the range that would be the stride padding and the buffer is too small. "
319         "This workaround limits GL_MAX_VERTEX_ATTRIB_STRIDE to a maximum value and "
320         "pads up every buffer allocation size to be a multiple of the maximum stride.",
321         &members, "http://anglebug.com/4428"
322     };
323 
324     FeatureInfo supportsExternalMemoryDmaBufAndModifiers = {
325         "supportsExternalMemoryDmaBufAndModifiers",
326         FeatureCategory::VulkanFeatures,
327         "VkDevice supports the VK_EXT_external_memory_dma_buf and VK_EXT_image_drm_format_modifier "
328         "extensions",
329         &members, "http://anglebug.com/6248"
330     };
331 
332     FeatureInfo supportsExternalMemoryHost = {
333         "supportsExternalMemoryHost",
334         FeatureCategory::VulkanFeatures,
335         "VkDevice supports the VK_EXT_external_memory_host extension",
336         &members,
337     };
338 
339     FeatureInfo allocateNonZeroMemory = {
340         "allocateNonZeroMemory",
341         FeatureCategory::VulkanFeatures,
342         "Fill new allocations with non-zero values to flush out errors.",
343         &members, "http://anglebug.com/4384"
344     };
345 
346     FeatureInfo logMemoryReportCallbacks = {
347         "logMemoryReportCallbacks",
348         FeatureCategory::VulkanFeatures,
349         "Log each callback from VK_EXT_device_memory_report",
350         &members,
351     };
352 
353     FeatureInfo logMemoryReportStats = {
354         "logMemoryReportStats",
355         FeatureCategory::VulkanFeatures,
356         "Log stats from VK_EXT_device_memory_report each swap",
357         &members,
358     };
359 
360     FeatureInfo preferCPUForBufferSubData = {
361         "preferCPUForBufferSubData",
362         FeatureCategory::VulkanFeatures,
363         "Prefer use CPU to do bufferSubData instead of staged update.",
364         &members, "http://issuetracker.google.com/200067929"
365     };
366 
367     FeatureInfo persistentlyMappedBuffers = {
368         "persistentlyMappedBuffers",
369         FeatureCategory::VulkanFeatures,
370         "Persistently map buffer memory to reduce map/unmap IOCTL overhead.",
371         &members, "http://anglebug.com/2162"
372     };
373 
374     FeatureInfo enablePreRotateSurfaces = {
375         "enablePreRotateSurfaces",
376         FeatureCategory::VulkanFeatures,
377         "Enable Android pre-rotation for landscape applications",
378         &members, "http://anglebug.com/3502"
379     };
380 
381     FeatureInfo enablePrecisionQualifiers = {
382         "enablePrecisionQualifiers",
383         FeatureCategory::VulkanFeatures,
384         "Enable precision qualifiers in shaders",
385         &members, "http://anglebug.com/3078"
386     };
387 
388     FeatureInfo varyingsRequireMatchingPrecisionInSpirv = {
389         "varyingsRequireMatchingPrecisionInSpirv",
390         FeatureCategory::VulkanWorkarounds,
391         "Add additional SPIRV instructions to make sure precision "
392         "between shader stages match with each other",
393         &members, "http://anglebug.com/7488"
394     };
395 
396     FeatureInfo preferAggregateBarrierCalls = {
397         "preferAggregateBarrierCalls",
398         FeatureCategory::VulkanWorkarounds,
399         "Single barrier call is preferred over multiple calls with "
400         "fine grained pipeline stage dependency information",
401         &members, "http://anglebug.com/4633"
402     };
403 
404     FeatureInfo preferSkippingInvalidateForEmulatedFormats = {
405         "preferSkippingInvalidateForEmulatedFormats",
406         FeatureCategory::VulkanWorkarounds,
407         "Skipping invalidate is preferred for emulated formats that have extra channels over "
408         "re-clearing the image",
409         &members, "http://anglebug.com/6860"
410     };
411 
412     FeatureInfo asyncCommandQueue = {
413         "asyncCommandQueue",
414         FeatureCategory::VulkanFeatures,
415         "Use CommandQueue worker thread to dispatch work to GPU.",
416         &members, "http://anglebug.com/4324"
417     };
418 
419     FeatureInfo slowAsyncCommandQueueForTesting = {
420         "slowAsyncCommandQueueForTesting",
421         FeatureCategory::VulkanWorkarounds,
422         "Artificially slow down async command queue for threading testing",
423         &members, "https://anglebug.com/6574"
424     };
425 
426     FeatureInfo supportsShaderFloat16 = {
427         "supportsShaderFloat16",
428         FeatureCategory::VulkanFeatures,
429         "VkDevice supports the VK_KHR_shader_float16_int8 extension "
430         "and has the shaderFloat16 feature",
431         &members, "http://anglebug.com/4551"
432     };
433 
434     FeatureInfo allowGenerateMipmapWithCompute = {
435         "allowGenerateMipmapWithCompute",
436         FeatureCategory::VulkanFeatures,
437         "Use the compute path to generate mipmaps on devices that meet the minimum requirements, "
438         "and the performance is better.",
439         &members, "http://anglebug.com/4551"
440     };
441 
442     FeatureInfo supportsRenderPassStoreOpNone = {
443         "supportsRenderPassStoreOpNone",
444         FeatureCategory::VulkanFeatures,
445         "VkDevice supports VK_QCOM_render_pass_store_ops extension.",
446         &members, "http://anglebug.com/5055"
447     };
448 
449     FeatureInfo supportsRenderPassLoadStoreOpNone = {
450         "supportsRenderPassLoadStoreOpNone",
451         FeatureCategory::VulkanFeatures,
452         "VkDevice supports VK_EXT_load_store_op_none extension.",
453         &members, "http://anglebug.com/5371"
454     };
455 
456     FeatureInfo disallowMixedDepthStencilLoadOpNoneAndLoad = {
457         "disallowMixedDepthStencilLoadOpNoneAndLoad",
458         FeatureCategory::VulkanWorkarounds,
459         "Disallow use of LOAD_OP_NONE for only one of the depth or stencil aspects of a "
460         "depth/stencil attachment",
461         &members, "http://anglebug.com/7370"
462     };
463 
464     FeatureInfo supportsDepthClipControl = {
465         "supportsDepthClipControl",
466         FeatureCategory::VulkanFeatures,
467         "VkDevice supports VK_EXT_depth_clip_control extension.",
468         &members, "http://anglebug.com/5421"
469     };
470 
471     FeatureInfo supportsPrimitiveTopologyListRestart = {
472         "supportsPrimitiveTopologyListRestart",
473         FeatureCategory::VulkanFeatures,
474         "VkDevice supports VK_EXT_primitive_topology_list_restart extension.",
475         &members, "http://anglebug.com/3832"
476     };
477 
478     FeatureInfo supportsBlendOperationAdvanced = {
479         "supportsBlendOperationAdvanced",
480         FeatureCategory::VulkanFeatures,
481         "VkDevice supports VK_EXT_blend_operation_advanced extension.",
482         &members, "http://anglebug.com/3586"
483     };
484 
485     FeatureInfo forceMaxUniformBufferSize16KB = {
486         "forceMaxUniformBufferSize16KB",
487         FeatureCategory::VulkanWorkarounds,
488         "Force max uniform buffer size to 16K on some device due to bug",
489         &members, "https://issuetracker.google.com/161903006"
490     };
491 
492     FeatureInfo supportsImageFormatList = {
493         "supportsImageFormatList",
494         FeatureCategory::VulkanFeatures,
495         "Enable VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT by default for ICDs "
496         "that support VK_KHR_image_format_list",
497         &members, "http://anglebug.com/5281"
498     };
499 
500     FeatureInfo enableMultisampledRenderToTexture = {
501         "enableMultisampledRenderToTexture",
502         FeatureCategory::VulkanWorkarounds,
503         "Expose EXT_multisampled_render_to_texture",
504         &members, "http://anglebug.com/4937"
505     };
506 
507     FeatureInfo deferFlushUntilEndRenderPass = {
508         "deferFlushUntilEndRenderPass",
509         FeatureCategory::VulkanWorkarounds,
510         "Allow glFlush to be deferred until renderpass ends",
511         &members, "https://issuetracker.google.com/issues/166475273"
512     };
513 
514     FeatureInfo waitIdleBeforeSwapchainRecreation = {
515         "waitIdleBeforeSwapchainRecreation",
516         FeatureCategory::VulkanWorkarounds,
517         "Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue to be idle. "
518         "Works around a bug on platforms which destroy oldSwapchain in vkCreateSwapchainKHR.",
519         &members, "http://anglebug.com/5061"
520     };
521 
522     FeatureInfo forceTextureLodOffset1 = {
523         "forceTextureLodOffset1",
524         FeatureCategory::VulkanWorkarounds,
525         "Increase the minimum texture level-of-detail by 1 when sampling.",
526         &members,
527     };
528 
529     FeatureInfo forceTextureLodOffset2 = {
530         "forceTextureLodOffset2",
531         FeatureCategory::VulkanWorkarounds,
532         "Increase the minimum texture level-of-detail by 2 when sampling.",
533         &members,
534     };
535 
536     FeatureInfo forceTextureLodOffset3 = {
537         "forceTextureLodOffset3",
538         FeatureCategory::VulkanWorkarounds,
539         "Increase the minimum texture level-of-detail by 3 when sampling.",
540         &members,
541     };
542 
543     FeatureInfo forceTextureLodOffset4 = {
544         "forceTextureLodOffset4",
545         FeatureCategory::VulkanWorkarounds,
546         "Increase the minimum texture level-of-detail by 4 when sampling.",
547         &members,
548     };
549 
550     FeatureInfo forceNearestFiltering = {
551         "forceNearestFiltering",
552         FeatureCategory::VulkanWorkarounds,
553         "Force nearest filtering when sampling.",
554         &members,
555     };
556 
557     FeatureInfo forceNearestMipFiltering = {
558         "forceNearestMipFiltering",
559         FeatureCategory::VulkanWorkarounds,
560         "Force nearest mip filtering when sampling.",
561         &members,
562     };
563 
564     FeatureInfo compressVertexData = {
565         "compressVertexData",
566         FeatureCategory::VulkanWorkarounds,
567         "Compress vertex data to smaller data types when "
568         "possible. Using this feature makes ANGLE non-conformant.",
569         &members,
570     };
571 
572     FeatureInfo preferDrawClearOverVkCmdClearAttachments = {
573         "preferDrawClearOverVkCmdClearAttachments",
574         FeatureCategory::VulkanWorkarounds,
575         "On some hardware, clear using a draw call instead of vkCmdClearAttachments in the middle "
576         "of render pass due to bugs",
577         &members, "https://issuetracker.google.com/166809097"
578     };
579 
580     FeatureInfo emulatedPrerotation90 = {
581         "emulatedPrerotation90",
582         FeatureCategory::VulkanFeatures,
583         "Emulate 90-degree prerotation.",
584         &members, "http://anglebug.com/4901"
585     };
586 
587     FeatureInfo emulatedPrerotation180 = {
588         "emulatedPrerotation180",
589         FeatureCategory::VulkanFeatures,
590         "Emulate 180-degree prerotation.",
591         &members, "http://anglebug.com/4901"
592     };
593 
594     FeatureInfo emulatedPrerotation270 = {
595         "emulatedPrerotation270",
596         FeatureCategory::VulkanFeatures,
597         "Emulate 270-degree prerotation.",
598         &members, "http://anglebug.com/4901"
599     };
600 
601     FeatureInfo preferDriverUniformOverSpecConst = {
602         "preferDriverUniformOverSpecConst",
603         FeatureCategory::VulkanFeatures,
604         "Prefer using driver uniforms instead of specialization constants.",
605         &members, "http://anglebug.com/7406"
606     };
607 
608     FeatureInfo exposeNonConformantExtensionsAndVersions = {
609         "exposeNonConformantExtensionsAndVersions",
610         FeatureCategory::VulkanWorkarounds,
611         "Expose GLES versions and extensions that are not conformant.",
612         &members, "http://anglebug.com/5375"
613     };
614 
615     FeatureInfo emulateR32fImageAtomicExchange = {
616         "emulateR32fImageAtomicExchange",
617         FeatureCategory::VulkanWorkarounds,
618         "Emulate r32f images with r32ui to support imageAtomicExchange.",
619         &members, "http://anglebug.com/5535"
620     };
621 
622     FeatureInfo supportsNegativeViewport = {
623         "supportsNegativeViewport",
624         FeatureCategory::VulkanFeatures,
625         "The driver supports inverting the viewport with a negative height.",
626         &members,
627     };
628 
629     FeatureInfo forceFragmentShaderPrecisionHighpToMediump = {
630         "forceFragmentShaderPrecisionHighpToMediump",
631         FeatureCategory::VulkanWorkarounds,
632         "Forces highp precision in fragment shader to mediump.",
633         &members, "https://issuetracker.google.com/184850002"
634     };
635 
636     FeatureInfo preferSubmitAtFBOBoundary = {
637         "preferSubmitAtFBOBoundary",
638         FeatureCategory::VulkanWorkarounds,
639         "Submit commands to driver at each FBO boundary for performance improvements.",
640         &members, "https://issuetracker.google.com/187425444"
641     };
642 
643     FeatureInfo useMultipleDescriptorsForExternalFormats = {
644         "useMultipleDescriptorsForExternalFormats",
645         FeatureCategory::VulkanWorkarounds,
646         "Return a default descriptor count for external formats.",
647         &members, "http://anglebug.com/6141"
648     };
649 
650     FeatureInfo supportsProtectedMemory = {
651         "supportsProtectedMemory",
652         FeatureCategory::VulkanFeatures,
653         "VkDevice supports protected memory",
654         &members, "http://anglebug.com/3965"
655     };
656 
657     FeatureInfo supportsHostQueryReset = {
658         "supportsHostQueryReset",
659         FeatureCategory::VulkanFeatures,
660         "VkDevice supports VK_EXT_host_query_reset extension",
661         &members, "http://anglebug.com/6692"
662     };
663 
664     FeatureInfo supportsPipelineCreationCacheControl = {
665         "supportsPipelineCreationCacheControl",
666         FeatureCategory::VulkanFeatures,
667         "VkDevice supports VK_EXT_pipeline_creation_cache_control extension",
668         &members, "http://anglebug.com/5881"
669     };
670 
671     FeatureInfo supportsPipelineCreationFeedback = {
672         "supportsPipelineCreationFeedback",
673         FeatureCategory::VulkanFeatures,
674         "VkDevice supports VK_EXT_pipeline_creation_feedback extension",
675         &members, "http://anglebug.com/5881"
676     };
677 
678     FeatureInfo supportsPrimitivesGeneratedQuery = {
679         "supportsPrimitivesGeneratedQuery",
680         FeatureCategory::VulkanFeatures,
681         "VkDevice supports VK_EXT_primitives_generated_query extension",
682         &members, "http://anglebug.com/5430"
683     };
684 
685     FeatureInfo supportsSurfaceCapabilities2Extension = {
686         "supportsSurfaceCapabilities2Extension",
687         FeatureCategory::VulkanFeatures,
688         "VkInstance supports the VK_KHR_get_surface_capabilities2 extension",
689         &members,
690     };
691 
692     FeatureInfo supportsSurfaceProtectedCapabilitiesExtension = {
693         "supportsSurfaceProtectedCapabilitiesExtension",
694         FeatureCategory::VulkanFeatures,
695         "VkInstance supports the VK_KHR_surface_protected_capabilities extension",
696         &members,
697     };
698 
699     FeatureInfo supportsSurfacelessQueryExtension = {
700         "supportsSurfacelessQueryExtension",
701         FeatureCategory::VulkanFeatures,
702         "VkInstance supports the VK_GOOGLE_surfaceless_query extension",
703         &members,
704     };
705 
706     FeatureInfo supportsSurfaceProtectedSwapchains = {
707         "supportsSurfaceProtectedSwapchains",
708         FeatureCategory::VulkanFeatures,
709         "VkSurface supportsProtected for protected swapchains",
710         &members,
711     };
712 
713     FeatureInfo overrideSurfaceFormatRGB8ToRGBA8 = {
714         "overrideSurfaceFormatRGB8ToRGBA8",
715         FeatureCategory::VulkanWorkarounds,
716         "Override surface format GL_RGB8 to GL_RGBA8",
717         &members, "http://anglebug.com/6651"
718     };
719 
720     FeatureInfo supportsSharedPresentableImageExtension = {
721         "supportsSharedPresentableImageExtension",
722         FeatureCategory::VulkanFeatures,
723         "VkSurface supports the VK_KHR_shared_presentable_images extension",
724         &members,
725     };
726 
727     FeatureInfo supportsShaderFramebufferFetch = {
728         "supportsShaderFramebufferFetch",
729         FeatureCategory::VulkanFeatures,
730         "Whether the Vulkan backend supports coherent framebuffer fetch",
731         &members,
732     };
733 
734     FeatureInfo supportsShaderFramebufferFetchNonCoherent = {
735         "supportsShaderFramebufferFetchNonCoherent",
736         FeatureCategory::VulkanFeatures,
737         "Whether the Vulkan backend supports non-coherent framebuffer fetch",
738         &members,
739     };
740 
741     FeatureInfo permanentlySwitchToFramebufferFetchMode = {
742         "permanentlySwitchToFramebufferFetchMode",
743         FeatureCategory::VulkanFeatures,
744         "Whether the context should permanently switch to framebuffer fetch mode on first "
745         "encounter",
746         &members,
747     };
748 
749     FeatureInfo supportsLockSurfaceExtension = {
750         "supportsLockSurfaceExtension",
751         FeatureCategory::VulkanFeatures,
752         "Surface supports the EGL_KHR_lock_surface3 extension",
753         &members,
754     };
755 
756     FeatureInfo swapbuffersOnFlushOrFinishWithSingleBuffer = {
757         "swapbuffersOnFlushOrFinishWithSingleBuffer",
758         FeatureCategory::VulkanFeatures,
759         "Bypass deferredFlush with calling swapbuffers on flush or finish when in Shared "
760         "Present mode",
761         &members, "http://anglebug.com/6878"
762     };
763 
764     FeatureInfo emulateDithering = {
765         "emulateDithering",
766         FeatureCategory::VulkanFeatures,
767         "Emulate OpenGL dithering",
768         &members, "http://anglebug.com/6755"
769     };
770 
771     FeatureInfo roundOutputAfterDithering = {
772         "roundOutputAfterDithering",
773         FeatureCategory::VulkanWorkarounds,
774         "Round output after dithering to workaround a driver bug that rounds the output up",
775         &members, "http://anglebug.com/6953"
776     };
777 
778     FeatureInfo emulateAdvancedBlendEquations = {
779         "emulateAdvancedBlendEquations",
780         FeatureCategory::VulkanFeatures,
781         "Emulate GL_KHR_blend_equation_advanced",
782         &members, "http://anglebug.com/3586"
783     };
784 
785     FeatureInfo doubleDepthBiasConstantFactor = {
786         "doubleDepthBiasConstantFactor",
787         FeatureCategory::VulkanWorkarounds,
788         "Due to a Vulkan spec ambiguity, some drivers interpret depthBiasConstantFactor as half "
789         "the expected value",
790         &members,
791     };
792 
793     FeatureInfo bottomLeftOriginPresentRegionRectangles = {
794         "bottomLeftOriginPresentRegionRectangles",
795         FeatureCategory::VulkanWorkarounds,
796         "On some platforms present region rectangles are expected to have a bottom-left origin, "
797         "instead of top-left origin as from spec",
798         &members,
799     };
800 
801     FeatureInfo forceSubmitImmutableTextureUpdates = {
802         "forceSubmitImmutableTextureUpdates",
803         FeatureCategory::VulkanAppWorkarounds,
804         "Force submit updates to immutable textures",
805         &members, "http://anglebug.com/6929"
806     };
807 
808     FeatureInfo retainSPIRVDebugInfo = {
809         "retainSPIRVDebugInfo",
810         FeatureCategory::VulkanFeatures,
811         "Retain debug info in SPIR-V blob.",
812         &members, "http://anglebug.com/5901"
813     };
814 
815     FeatureInfo warmUpPipelineCacheAtLink = {
816         "warmUpPipelineCacheAtLink",
817         FeatureCategory::VulkanFeatures,
818         "Warm up the Vulkan pipeline cache at link time",
819         &members, "http://anglebug.com/5881"
820     };
821 
822     FeatureInfo preferDeviceLocalMemoryHostVisible = {
823         "preferDeviceLocalMemoryHostVisible",
824         FeatureCategory::VulkanFeatures,
825         "Prefer adding HOST_VISIBLE flag for DEVICE_LOCAL memory when picking memory types",
826         &members, "http://anglebug.com/7047"
827     };
828 
829     FeatureInfo supportsExtendedDynamicState = {
830         "supportsExtendedDynamicState",
831         FeatureCategory::VulkanFeatures,
832         "VkDevice supports VK_EXT_extended_dynamic_state extension",
833         &members, "http://anglebug.com/5906"
834     };
835 
836     FeatureInfo useVertexInputBindingStrideDynamicState = {
837         "useVertexInputBindingStrideDynamicState",
838         FeatureCategory::VulkanWorkarounds,
839         "Use the Vertex Input Bininding Stride dynamic state from VK_EXT_extended_dynamic_state",
840         &members, "http://anglebug.com/5906"
841     };
842 
843     FeatureInfo useCullModeDynamicState = {
844         "useCullModeDynamicState",
845         FeatureCategory::VulkanWorkarounds,
846         "Use the Cull Mode dynamic state from VK_EXT_extended_dynamic_state",
847         &members, "http://anglebug.com/5906"
848     };
849 
850     FeatureInfo useFrontFaceDynamicState = {
851         "useFrontFaceDynamicState",
852         FeatureCategory::VulkanWorkarounds,
853         "Use the Front Face dynamic state from VK_EXT_extended_dynamic_state",
854         &members, "http://anglebug.com/5906"
855     };
856 
857     FeatureInfo useDepthTestEnableDynamicState = {
858         "useDepthTestEnableDynamicState",
859         FeatureCategory::VulkanWorkarounds,
860         "Use the Depth Test Enable dynamic state from VK_EXT_extended_dynamic_state",
861         &members, "http://anglebug.com/5906"
862     };
863 
864     FeatureInfo useDepthWriteEnableDynamicState = {
865         "useDepthWriteEnableDynamicState",
866         FeatureCategory::VulkanWorkarounds,
867         "Use the Depth Write Enable dynamic state from VK_EXT_extended_dynamic_state",
868         &members, "http://anglebug.com/5906"
869     };
870 
871     FeatureInfo useDepthCompareOpDynamicState = {
872         "useDepthCompareOpDynamicState",
873         FeatureCategory::VulkanWorkarounds,
874         "Use the Depth Compare Op dynamic state from VK_EXT_extended_dynamic_state",
875         &members, "http://anglebug.com/5906"
876     };
877 
878     FeatureInfo useStencilTestEnableDynamicState = {
879         "useStencilTestEnableDynamicState",
880         FeatureCategory::VulkanWorkarounds,
881         "Use the Stencil Test Enable dynamic state from VK_EXT_extended_dynamic_state",
882         &members, "http://anglebug.com/5906"
883     };
884 
885     FeatureInfo useStencilOpDynamicState = {
886         "useStencilOpDynamicState",
887         FeatureCategory::VulkanWorkarounds,
888         "Use the Stencil Op dynamic state from VK_EXT_extended_dynamic_state",
889         &members, "http://anglebug.com/5906"
890     };
891 
892     FeatureInfo supportsExtendedDynamicState2 = {
893         "supportsExtendedDynamicState2",
894         FeatureCategory::VulkanFeatures,
895         "VkDevice supports VK_EXT_extended_dynamic_state2 extension",
896         &members, "http://anglebug.com/5906"
897     };
898 
899     FeatureInfo usePrimitiveRestartEnableDynamicState = {
900         "usePrimitiveRestartEnableDynamicState",
901         FeatureCategory::VulkanWorkarounds,
902         "Use the Primitive Restart Enable dynamic state from VK_EXT_extended_dynamic_state2",
903         &members, "http://anglebug.com/5906"
904     };
905 
906     FeatureInfo useRasterizerDiscardEnableDynamicState = {
907         "useRasterizerDiscardEnableDynamicState",
908         FeatureCategory::VulkanWorkarounds,
909         "Use the Rasterizer Discard Enable dynamic state from VK_EXT_extended_dynamic_state2",
910         &members, "http://anglebug.com/5906"
911     };
912 
913     FeatureInfo useDepthBiasEnableDynamicState = {
914         "useDepthBiasEnableDynamicState",
915         FeatureCategory::VulkanWorkarounds,
916         "Use the Depth Bias Enable dynamic state from VK_EXT_extended_dynamic_state2",
917         &members, "http://anglebug.com/5906"
918     };
919 
920     FeatureInfo supportsLogicOpDynamicState = {
921         "supportsLogicOpDynamicState",
922         FeatureCategory::VulkanFeatures,
923         "VkDevice supports the logicOp feature of VK_EXT_extended_dynamic_state2 extension",
924         &members, "http://anglebug.com/3862"
925     };
926 
927     FeatureInfo supportsFragmentShadingRate = {
928         "supportsFragmentShadingRate",
929         FeatureCategory::VulkanFeatures,
930         "VkDevice supports VK_KHR_fragment_shading_rate extension",
931         &members, "http://anglebug.com/7172"
932     };
933 
934     FeatureInfo supportsFragmentShaderPixelInterlock = {
935         "supportsFragmentShaderPixelInterlock",
936         FeatureCategory::VulkanFeatures,
937         "VkDevice supports the VK_EXT_fragment_shader_interlock extension "
938         "and has the fragmentShaderPixelInterlock feature",
939         &members,
940     };
941 
942     FeatureInfo explicitlyEnablePerSampleShading = {
943         "explicitlyEnablePerSampleShading",
944         FeatureCategory::VulkanWorkarounds,
945         "Explicitly enable per-sample shading if the fragment shader contains the "
946         "sample qualifier",
947         &members, "http://anglebug.com/6876"
948     };
949 
950     FeatureInfo explicitlyCastMediumpFloatTo16Bit = {
951         "explicitlyCastMediumpFloatTo16Bit",
952         FeatureCategory::VulkanWorkarounds,
953         "Explicitly cast mediump floating point values to 16 bit",
954         &members, "https://issuetracker.google.com/274859104"
955     };
956 
957     FeatureInfo forceContinuousRefreshOnSharedPresent = {
958         "forceContinuousRefreshOnSharedPresent",
959         FeatureCategory::VulkanFeatures,
960         "Force to create vulkan swapchain with continuous refresh on shared present",
961         &members, "https://issuetracker.google.com/229267970"
962     };
963 
964     FeatureInfo supportsImage2dViewOf3d = {
965         "supportsImage2dViewOf3d",
966         FeatureCategory::VulkanFeatures,
967         "VkDevice supports VK_EXT_image_2d_view_of_3d",
968         &members, "https://anglebug.com/7320"
969     };
970 
971     FeatureInfo supportsSampler2dViewOf3d = {
972         "supportsSampler2dViewOf3d",
973         FeatureCategory::VulkanFeatures,
974         "VkDevice supports the sampler2DViewOf3D feature of VK_EXT_image_2d_view_of_3d",
975         &members, "https://anglebug.com/7320"
976     };
977 
978     FeatureInfo supportsImagelessFramebuffer = {
979         "supportsImagelessFramebuffer",
980         FeatureCategory::VulkanFeatures,
981         "VkDevice supports VK_KHR_imageless_framebuffer extension",
982         &members, "http://anglebug.com/7553"
983     };
984 
985     FeatureInfo preferLinearFilterForYUV = {
986         "preferLinearFilterForYUV",
987         FeatureCategory::VulkanFeatures,
988         "Prefer to use VK_FILTER_LINEAR for VkSamplerYcbcrConversion",
989         &members, "https://anglebug.com/7382"
990     };
991 
992     FeatureInfo supportsYuvTarget = {
993         "supportsYuvTarget",
994         FeatureCategory::VulkanFeatures,
995         "VkDevice supports VK_ANDROID_render_to_external_format and VK_EXT_ycbcr_attachment",
996         &members,
997     };
998 
999     FeatureInfo useNonZeroStencilWriteMaskStaticState = {
1000         "useNonZeroStencilWriteMaskStaticState",
1001         FeatureCategory::VulkanWorkarounds,
1002         "Work around a driver bug where 0 in stencil write mask static state would make the "
1003         "corresponding dynamic state malfunction in the presence of discard or alpha to coverage",
1004         &members, "http://anglebug.com/7556"
1005     };
1006 
1007     FeatureInfo mapUnspecifiedColorSpaceToPassThrough = {
1008         "mapUnspecifiedColorSpaceToPassThrough",
1009         FeatureCategory::VulkanFeatures,
1010         "Use VK_COLOR_SPACE_PASS_THROUGH_EXT for EGL_NONE or unspecifed color "
1011         "spaces",
1012         &members,
1013     };
1014 
1015     FeatureInfo supportsTimestampSurfaceAttribute = {
1016         "supportsTimestampSurfaceAttribute",
1017         FeatureCategory::VulkanFeatures,
1018         "Platform supports setting frame timestamp surface attribute",
1019         &members, "https://anglebug.com/7489"
1020     };
1021 
1022     FeatureInfo supportsRasterizationOrderAttachmentAccess = {
1023         "supportsRasterizationOrderAttachmentAccess",
1024         FeatureCategory::VulkanFeatures,
1025         "VkDevice supports VK_EXT_rasterization_order_attachment_access extension",
1026         &members, "https://anglebug.com/7604"
1027     };
1028 
1029     FeatureInfo eglColorspaceAttributePassthrough = {
1030         "eglColorspaceAttributePassthrough",
1031         FeatureCategory::VulkanFeatures,
1032         "Support passthrough of EGL colorspace attribute values",
1033         &members, "https://anglebug.com/7319"
1034     };
1035 
1036     FeatureInfo supportsPipelineRobustness = {
1037         "supportsPipelineRobustness",
1038         FeatureCategory::VulkanFeatures,
1039         "VkDevice supports VK_EXT_pipeline_robustness extension",
1040         &members, "https://anglebug.com/5845"
1041     };
1042 
1043     FeatureInfo supportsVertexInputDynamicState = {
1044         "supportsVertexInputDynamicState",
1045         FeatureCategory::VulkanFeatures,
1046         "VkDevice supports VK_EXT_vertex_input_dynamic_state extension",
1047         &members, "https://anglebug.com/7162"
1048     };
1049 
1050     FeatureInfo supportsColorWriteEnable = {
1051         "supportsColorWriteEnable",
1052         FeatureCategory::VulkanFeatures,
1053         "VkDevice supports VK_EXT_color_write_enable extension",
1054         &members, "https://anglebug.com/7161"
1055     };
1056 
1057     FeatureInfo supportsPresentation = {
1058         "supportsPresentation",
1059         FeatureCategory::VulkanFeatures,
1060         "VkDisplay supports presentation through a present family queue",
1061         &members,
1062     };
1063 
1064     FeatureInfo supportsComputeTranscodeEtcToBc = {
1065         "supportsComputeTranscodeEtcToBc",
1066         FeatureCategory::VulkanFeatures,
1067         "supports compute shader transcode etc format to bc format",
1068         &members,
1069     };
1070 
1071     FeatureInfo supportsGraphicsPipelineLibrary = {
1072         "supportsGraphicsPipelineLibrary",
1073         FeatureCategory::VulkanFeatures,
1074         "VkDevice supports the VK_EXT_graphics_pipeline_library extension",
1075         &members, "https://anglebug.com/7369"
1076     };
1077 
1078     FeatureInfo preferMonolithicPipelinesOverLibraries = {
1079         "preferMonolithicPipelinesOverLibraries",
1080         FeatureCategory::VulkanWorkarounds,
1081         "Whether monolithic pipelines perform significantly better than libraries",
1082         &members, "https://anglebug.com/7369"
1083     };
1084 
1085     FeatureInfo slowDownMonolithicPipelineCreationForTesting = {
1086         "slowDownMonolithicPipelineCreationForTesting",
1087         FeatureCategory::VulkanWorkarounds,
1088         "Artificially slow down async monolithic pipeline creation for threading testing",
1089         &members, "https://anglebug.com/7369"
1090     };
1091 
1092     FeatureInfo syncMonolithicPipelinesToBlobCache = {
1093         "syncMonolithicPipelinesToBlobCache",
1094         FeatureCategory::VulkanWorkarounds,
1095         "Whether it's beneficial to store monolithic pipelines in the blob cache when "
1096         "VK_EXT_graphics_pipeline_library is in use.  Otherwise the libraries are stored "
1097         "only, and monolithic pipelines are recreated on every run",
1098         &members, "https://anglebug.com/7369"
1099     };
1100 
1101     FeatureInfo mergeProgramPipelineCachesToGlobalCache = {
1102         "mergeProgramPipelineCachesToGlobalCache",
1103         FeatureCategory::VulkanWorkarounds,
1104         "Whether it's beneficial to merge the pipeline cache for the shaders subset of the "
1105         "pipeline into the monolithic pipeline cache.  Only useful on platforms where "
1106         "monolithic pipelines can reuse blobs from partial pipelines",
1107         &members, "https://anglebug.com/7369"
1108     };
1109 
1110     FeatureInfo hasEffectivePipelineCacheSerialization = {
1111         "hasEffectivePipelineCacheSerialization",
1112         FeatureCategory::VulkanFeatures,
1113         "Whether the implementation serializes the Vulkan pipeline cache effectively. "
1114         "On some implementations, pipeline cache serialization returns no data, so there "
1115         "is no benefit to serializing it",
1116         &members, "https://anglebug.com/7369"
1117     };
1118 
1119     FeatureInfo enableAsyncPipelineCacheCompression = {
1120         "enableAsyncPipelineCacheCompression",
1121         FeatureCategory::VulkanWorkarounds,
1122         "Enable compressing pipeline cache in a thread.",
1123         &members, "http://anglebug.com/4722"
1124     };
1125 
1126     FeatureInfo supportsPipelineProtectedAccess = {
1127         "supportsPipelineProtectedAccess",
1128         FeatureCategory::VulkanFeatures,
1129         "VkDevice supports the VK_EXT_pipeline_protected_access extension",
1130         &members, "https://anglebug.com/7714"
1131     };
1132 
1133     FeatureInfo supportsMixedReadWriteDepthStencilLayouts = {
1134         "supportsMixedReadWriteDepthStencilLayouts",
1135         FeatureCategory::VulkanFeatures,
1136         "VkDevice supports the mixed read and write depth/stencil layouts introduced by VK_KHR_maintenance2",
1137         &members, "https://anglebug.com/7899"
1138     };
1139 
1140     FeatureInfo supportsSwapchainMaintenance1 = {
1141         "supportsSwapchainMaintenance1",
1142         FeatureCategory::VulkanFeatures,
1143         "VkDevice supports the VK_EXT_surface_maintenance1 and VK_EXT_swapchain_maintenance1 extensions",
1144         &members, "https://anglebug.com/7847"
1145     };
1146 
1147     FeatureInfo supportsGetMemoryRequirements2 = {
1148         "supportsGetMemoryRequirements2",
1149         FeatureCategory::VulkanFeatures,
1150         "VkDevice supports the VK_KHR_get_memory_requirements2 extension",
1151         &members, "https://anglebug.com/4830"
1152     };
1153 
1154     FeatureInfo supportsBindMemory2 = {
1155         "supportsBindMemory2",
1156         FeatureCategory::VulkanFeatures,
1157         "VkDevice supports the VK_KHR_bind_memory2 extension",
1158         &members, "https://anglebug.com/4966"
1159     };
1160 
1161     FeatureInfo supportsSamplerMirrorClampToEdge = {
1162         "supportsSamplerMirrorClampToEdge",
1163         FeatureCategory::VulkanFeatures,
1164         "VkDevice supports the VK_KHR_sampler_mirror_clamp_to_edge extension",
1165         &members,
1166     };
1167 
1168     FeatureInfo preferSubmitOnAnySamplesPassedQueryEnd = {
1169         "preferSubmitOnAnySamplesPassedQueryEnd",
1170         FeatureCategory::VulkanWorkarounds,
1171         "Submit commands to driver when last GL_ANY_SAMPLES_PASSED query is made for performance improvements.",
1172         &members, "https://issuetracker.google.com/250706693"
1173     };
1174 
1175     FeatureInfo forceWaitForSubmissionToCompleteForQueryResult = {
1176         "forceWaitForSubmissionToCompleteForQueryResult",
1177         FeatureCategory::VulkanWorkarounds,
1178         "Force wait for submission to complete before calling getQueryResult(wait).",
1179         &members, "https://issuetracker.google.com/253522366"
1180     };
1181 
1182     FeatureInfo asyncCommandBufferReset = {
1183         "asyncCommandBufferReset",
1184         FeatureCategory::VulkanFeatures,
1185         "Reset command buffer in async thread.",
1186         &members, "https://issuetracker.google.com/255411748"
1187     };
1188 
1189     FeatureInfo useResetCommandBufferBitForSecondaryPools = {
1190         "useResetCommandBufferBitForSecondaryPools",
1191         FeatureCategory::VulkanWorkarounds,
1192         "Use VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT for initializing "
1193         "SecondaryCommandPools when using VulkanSecondaryCommandBuffer. ",
1194         &members,
1195     };
1196 
1197     FeatureInfo enablePipelineCacheDataCompression = {
1198         "enablePipelineCacheDataCompression",
1199         FeatureCategory::VulkanFeatures,
1200         "enable pipeline cache data compression.",
1201         &members, "https://issuetracker.google.com/258207403"
1202     };
1203 
1204     FeatureInfo supportsLegacyDithering = {
1205         "supportsLegacyDithering",
1206         FeatureCategory::VulkanFeatures,
1207         "VkDevice supports the VK_EXT_legacy_dithering extension",
1208         &members, "https://issuetracker.google.com/284462263"
1209     };
1210 
1211     FeatureInfo limitSampleCountTo2 = {
1212         "limitSampleCountTo2",
1213         FeatureCategory::VulkanWorkarounds,
1214         "Limit sample count to 2 to save memory on low end devices.",
1215         &members, "http://anglebug.com/8162"
1216     };
1217 
1218     FeatureInfo supportsFullScreenExclusive = {
1219         "supportsFullScreenExclusive",
1220         FeatureCategory::VulkanFeatures,
1221         "VkDevice supports the VK_EXT_full_screen_exclusive extension",
1222         &members, "http://anglebug.com/8215"
1223     };
1224 
1225     FeatureInfo forceDisableFullScreenExclusive = {
1226         "forceDisableFullScreenExclusive",
1227         FeatureCategory::VulkanWorkarounds,
1228         "Device needs VK_EXT_full_screen_exclusive explicitly disabled",
1229         &members, "http://anglebug.com/8215"
1230     };
1231 
1232     FeatureInfo supportsPortabilityEnumeration = {
1233         "supportsPortabilityEnumeration",
1234         FeatureCategory::VulkanFeatures,
1235         "Vulkan supports VK_KHR_portability_enumeration extension",
1236         &members, "http://anglebug.com/8229"
1237     };
1238 
1239     FeatureInfo enablePortabilityEnumeration = {
1240         "enablePortabilityEnumeration",
1241         FeatureCategory::VulkanWorkarounds,
1242         "Enable use of VK_KHR_portability_enumeration extension",
1243         &members, "http://anglebug.com/8229"
1244     };
1245 
1246     FeatureInfo supportsTimelineSemaphore = {
1247         "supportsTimelineSemaphore",
1248         FeatureCategory::VulkanFeatures,
1249         "VkDevice supports the VK_KHR_timeline_semaphore extension",
1250         &members,
1251     };
1252 
1253 };
1254 
1255 inline FeaturesVk::FeaturesVk()  = default;
1256 inline FeaturesVk::~FeaturesVk() = default;
1257 
1258 }  // namespace angle
1259 
1260 #endif  // ANGLE_PLATFORM_AUTOGEN_FEATURESVK_H_
1261