• 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.h: Optional features for the Vulkan renderer.
9 
10 #ifndef ANGLE_PLATFORM_FEATURESVK_H_
11 #define ANGLE_PLATFORM_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 basicGLLineRasterization = {
24         "basicGLLineRasterization",
25         FeatureCategory::VulkanFeatures,
26         "Enable the use of pixel shader patching to implement OpenGL basic line "
27         "rasterization rules",
28         &members,
29     };
30 
31     FeatureInfo bresenhamLineRasterization = {
32         "bresenhamLineRasterization",
33         FeatureCategory::VulkanFeatures,
34         "Enable Bresenham line rasterization via VK_EXT_line_rasterization extension",
35         &members,
36     };
37 
38     FeatureInfo provokingVertex = {
39         "provokingVertex",
40         FeatureCategory::VulkanFeatures,
41         "Enable provoking vertex mode via VK_EXT_provoking_vertex extension",
42         &members,
43     };
44 
45     FeatureInfo forceFallbackFormat = {
46         "forceFallbackFormat",
47         FeatureCategory::VulkanWorkarounds,
48         "Force a fallback format for angle_end2end_tests",
49         &members,
50     };
51 
52     FeatureInfo clampPointSize = {
53         "clampPointSize", 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     FeatureInfo depthClamping = {
58         "depthClamping", FeatureCategory::VulkanWorkarounds,
59         "The depth value is not clamped to [0,1] for floating point depth buffers.", &members,
60         "http://anglebug.com/3970"};
61 
62     FeatureInfo supportsRenderpass2 = {
63         "supportsRenderpass2",
64         FeatureCategory::VulkanFeatures,
65         "VkDevice supports the VK_KHR_create_renderpass2 extension",
66         &members,
67     };
68 
69     FeatureInfo supportsIncrementalPresent = {
70         "supportsIncrementalPresent",
71         FeatureCategory::VulkanFeatures,
72         "VkDevice supports the VK_KHR_incremental_present extension",
73         &members,
74     };
75 
76     FeatureInfo supportsAndroidHardwareBuffer = {
77         "supportsAndroidHardwareBuffer",
78         FeatureCategory::VulkanFeatures,
79         "VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension",
80         &members,
81     };
82 
83     FeatureInfo supportsGGPFrameToken = {
84         "supportsGGPFrameToken",
85         FeatureCategory::VulkanFeatures,
86         "VkDevice supports the VK_GGP_frame_token extension",
87         &members,
88     };
89 
90     FeatureInfo supportsExternalMemoryFd = {
91         "supportsExternalMemoryFd",
92         FeatureCategory::VulkanFeatures,
93         "VkDevice supports the VK_KHR_external_memory_fd extension",
94         &members,
95     };
96 
97     FeatureInfo supportsExternalMemoryFuchsia = {
98         "supportsExternalMemoryFuchsia",
99         FeatureCategory::VulkanFeatures,
100         "VkDevice supports the VK_FUCHSIA_external_memory extension",
101         &members,
102     };
103 
104     FeatureInfo supportsFilteringPrecision = {
105         "supportsFilteringPrecision",
106         FeatureCategory::VulkanFeatures,
107         "VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension",
108         &members,
109     };
110 
111     FeatureInfo supportsExternalFenceCapabilities = {
112         "supportsExternalFenceCapabilities",
113         FeatureCategory::VulkanFeatures,
114         "VkInstance supports the VK_KHR_external_fence_capabilities extension",
115         &members,
116     };
117 
118     FeatureInfo supportsExternalSemaphoreCapabilities = {
119         "supportsExternalSemaphoreCapabilities",
120         FeatureCategory::VulkanFeatures,
121         "VkInstance supports the VK_KHR_external_semaphore_capabilities extension",
122         &members,
123     };
124 
125     FeatureInfo supportsExternalSemaphoreFd = {
126         "supportsExternalSemaphoreFd",
127         FeatureCategory::VulkanFeatures,
128         "VkDevice supports the VK_KHR_external_semaphore_fd extension",
129         &members,
130     };
131 
132     FeatureInfo supportsExternalSemaphoreFuchsia = {
133         "supportsExternalSemaphoreFuchsia",
134         FeatureCategory::VulkanFeatures,
135         "VkDevice supports the VK_FUCHSIA_external_semaphore extension",
136         &members,
137     };
138 
139     FeatureInfo supportsExternalFenceFd = {
140         "supportsExternalFenceFd", FeatureCategory::VulkanFeatures,
141         "VkDevice supports the VK_KHR_external_fence_fd extension", &members,
142         "http://anglebug.com/2517"};
143 
144     FeatureInfo supportsAndroidNativeFenceSync = {
145         "supportsAndroidNativeFenceSync", FeatureCategory::VulkanFeatures,
146         "VkDevice supports the EGL_ANDROID_native_fence_sync extension", &members,
147         "http://anglebug.com/2517"};
148 
149     FeatureInfo supportsImageCubeArray = {"supportsImageCubeArray", FeatureCategory::VulkanFeatures,
150                                           "VkDevice supports the imageCubeArray feature properly",
151                                           &members, "http://anglebug.com/3584"};
152 
153     FeatureInfo supportsPipelineStatisticsQuery = {
154         "supportsPipelineStatisticsQuery", FeatureCategory::VulkanFeatures,
155         "VkDevice supports the pipelineStatisticsQuery feature", &members,
156         "http://anglebug.com/5430"};
157 
158     FeatureInfo supportsShaderStencilExport = {
159         "supportsShaderStencilExport",
160         FeatureCategory::VulkanFeatures,
161         "VkDevice supports the VK_EXT_shader_stencil_export extension",
162         &members,
163     };
164 
165     FeatureInfo supportsYUVSamplerConversion = {
166         "supportsYUVSamplerConversion",
167         FeatureCategory::VulkanFeatures,
168         "VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension",
169         &members,
170     };
171 
172     FeatureInfo emulateTransformFeedback = {
173         "emulateTransformFeedback", FeatureCategory::VulkanFeatures,
174         "Emulate transform feedback as the VK_EXT_transform_feedback is not present.", &members,
175         "http://anglebug.com/3205"};
176 
177     FeatureInfo supportsTransformFeedbackExtension = {
178         "supportsTransformFeedbackExtension", FeatureCategory::VulkanFeatures,
179         "Transform feedback uses the VK_EXT_transform_feedback extension.", &members,
180         "http://anglebug.com/3206"};
181 
182     FeatureInfo supportsGeometryStreamsCapability = {
183         "supportsGeometryStreamsCapability", FeatureCategory::VulkanFeatures,
184         "Implementation supports the GeometryStreams SPIR-V capability.", &members,
185         "http://anglebug.com/3206"};
186 
187     FeatureInfo supportsIndexTypeUint8 = {"supportsIndexTypeUint8", FeatureCategory::VulkanFeatures,
188                                           "VkDevice supports the VK_EXT_index_type_uint8 extension",
189                                           &members, "http://anglebug.com/4405"};
190 
191     FeatureInfo supportsCustomBorderColor = {
192         "supportsCustomBorderColor", FeatureCategory::VulkanFeatures,
193         "VkDevice supports the VK_EXT_custom_border_color extension", &members,
194         "http://anglebug.com/3577"};
195 
196     FeatureInfo supportsMultiDrawIndirect = {
197         "supportsMultiDrawIndirect", FeatureCategory::VulkanFeatures,
198         "VkDevice supports the multiDrawIndirect extension", &members, "http://anglebug.com/6439"};
199 
200     FeatureInfo supportsDepthStencilResolve = {"supportsDepthStencilResolve",
201                                                FeatureCategory::VulkanFeatures,
202                                                "VkDevice supports the VK_KHR_depth_stencil_resolve "
203                                                "extension with the independentResolveNone feature",
204                                                &members, "http://anglebug.com/4836"};
205 
206     FeatureInfo supportsMultisampledRenderToSingleSampled = {
207         "supportsMultisampledRenderToSingleSampled", FeatureCategory::VulkanFeatures,
208         "VkDevice supports the VK_EXT_multisampled_render_to_single_sampled extension", &members,
209         "http://anglebug.com/4836"};
210 
211     FeatureInfo supportsMultiview = {"supportsMultiview", FeatureCategory::VulkanFeatures,
212                                      "VkDevice supports the VK_KHR_multiview extension", &members,
213                                      "http://anglebug.com/6048"};
214 
215     FeatureInfo disableFifoPresentMode = {
216         "disableFifoPresentMode", FeatureCategory::VulkanWorkarounds,
217         "VK_PRESENT_MODE_FIFO_KHR causes random timeouts", &members, "http://anglebug.com/3153"};
218 
219     FeatureInfo bindEmptyForUnusedDescriptorSets = {
220         "bindEmptyForUnusedDescriptorSets", FeatureCategory::VulkanWorkarounds,
221         "Gaps in bound descriptor set indices causes the post-gap sets to misbehave", &members,
222         "http://anglebug.com/2727"};
223 
224     FeatureInfo forceD16TexFilter = {
225         "forceD16TexFilter", FeatureCategory::VulkanWorkarounds,
226         "VK_FORMAT_D16_UNORM does not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, "
227         "which prevents OES_depth_texture from being supported.",
228         &members, "http://anglebug.com/3452"};
229 
230     FeatureInfo disableFlippingBlitWithCommand = {
231         "disableFlippingBlitWithCommand", FeatureCategory::VulkanWorkarounds,
232         "vkCmdBlitImage with flipped coordinates blits incorrectly.", &members,
233         "http://anglebug.com/3498"};
234 
235     FeatureInfo perFrameWindowSizeQuery = {
236         "perFrameWindowSizeQuery", FeatureCategory::VulkanWorkarounds,
237         "Vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE when window resizing", &members,
238         "http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625"};
239 
240     FeatureInfo disallowSeamfulCubeMapEmulation = {
241         "disallowSeamfulCubeMapEmulation", FeatureCategory::VulkanWorkarounds,
242         "Seamful cube map emulation misbehaves on some drivers, so it's disallowed", &members,
243         "http://anglebug.com/3243"};
244 
245     FeatureInfo padBuffersToMaxVertexAttribStride = {
246         "padBuffersToMaxVertexAttribStride", FeatureCategory::VulkanWorkarounds,
247         "Vulkan considers vertex attribute accesses to count up to the last multiple of the "
248         "stride. This additional access supports AMD's robust buffer access implementation. "
249         "AMDVLK in particular will return incorrect values when the vertex access extends into "
250         "the range that would be the stride padding and the buffer is too small. "
251         "This workaround limits GL_MAX_VERTEX_ATTRIB_STRIDE to a maximum value and "
252         "pads up every buffer allocation size to be a multiple of the maximum stride.",
253         &members, "http://anglebug.com/4428"};
254 
255     FeatureInfo supportsExternalMemoryDmaBufAndModifiers = {
256         "supportsExternalMemoryDmaBufAndModifiers", FeatureCategory::VulkanFeatures,
257         "VkDevice supports the VK_EXT_external_memory_dma_buf and VK_EXT_image_drm_format_modifier "
258         "extensions",
259         &members, "http://anglebug.com/6248"};
260 
261     FeatureInfo supportsExternalMemoryHost = {
262         "supportsExternalMemoryHost",
263         FeatureCategory::VulkanFeatures,
264         "VkDevice supports the VK_EXT_external_memory_host extension",
265         &members,
266     };
267 
268     FeatureInfo allocateNonZeroMemory = {
269         "allocateNonZeroMemory", FeatureCategory::VulkanFeatures,
270         "Fill new allocations with non-zero values to flush out errors.", &members,
271         "http://anglebug.com/4384"};
272 
273     FeatureInfo logMemoryReportCallbacks = {
274         "logMemoryReportCallbacks",
275         FeatureCategory::VulkanFeatures,
276         "Log each callback from VK_EXT_device_memory_report",
277         &members,
278     };
279 
280     FeatureInfo logMemoryReportStats = {
281         "logMemoryReportStats",
282         FeatureCategory::VulkanFeatures,
283         "Log stats from VK_EXT_device_memory_report each swap",
284         &members,
285     };
286 
287     FeatureInfo shadowBuffers = {
288         "shadowBuffers", FeatureCategory::VulkanFeatures,
289         "Allocate a shadow buffer for GL buffer objects to reduce glMap* latency.", &members,
290         "http://anglebug.com/4339"};
291 
292     FeatureInfo preferCPUForBufferSubData = {
293         "preferCPUForBufferSubData", FeatureCategory::VulkanFeatures,
294         "Prefer use CPU to do bufferSubData instead of staged update.", &members,
295         "http://issuetracker.google.com/200067929"};
296 
297     FeatureInfo persistentlyMappedBuffers = {
298         "persistentlyMappedBuffers", FeatureCategory::VulkanFeatures,
299         "Persistently map buffer memory to reduce map/unmap IOCTL overhead.", &members,
300         "http://anglebug.com/2162"};
301 
302     FeatureInfo enablePreRotateSurfaces = {"enablePreRotateSurfaces",
303                                            FeatureCategory::VulkanFeatures,
304                                            "Enable Android pre-rotation for landscape applications",
305                                            &members, "http://anglebug.com/3502"};
306 
307     FeatureInfo enablePrecisionQualifiers = {
308         "enablePrecisionQualifiers", FeatureCategory::VulkanFeatures,
309         "Enable precision qualifiers in shaders", &members, "http://anglebug.com/3078"};
310 
311     FeatureInfo preferAggregateBarrierCalls = {
312         "preferAggregateBarrierCalls", FeatureCategory::VulkanWorkarounds,
313         "Single barrier call is preferred over multiple calls with "
314         "fine grained pipeline stage dependency information",
315         &members, "http://anglebug.com/4633"};
316 
317     FeatureInfo preferSkippingInvalidateForEmulatedFormats = {
318         "preferSkippingInvalidateForEmulatedFormats", FeatureCategory::VulkanWorkarounds,
319         "Skipping invalidate is preferred for emulated formats that have extra channels over "
320         "re-clearing the image",
321         &members, "http://anglebug.com/6860"};
322 
323     FeatureInfo asyncCommandQueue = {"asyncCommandQueue", FeatureCategory::VulkanFeatures,
324                                      "Use CommandQueue worker thread to dispatch work to GPU.",
325                                      &members, "http://anglebug.com/4324"};
326 
327     FeatureInfo supportsShaderFloat16 = {
328         "supportsShaderFloat16", FeatureCategory::VulkanFeatures,
329         "VkDevice supports the VK_KHR_shader_float16_int8 extension "
330         "and has the shaderFloat16 feature",
331         &members, "http://anglebug.com/4551"};
332 
333     FeatureInfo allowGenerateMipmapWithCompute = {
334         "allowGenerateMipmapWithCompute", FeatureCategory::VulkanFeatures,
335         "Use the compute path to generate mipmaps on devices that meet the minimum requirements, "
336         "and the performance is better.",
337         &members, "http://anglebug.com/4551"};
338 
339     FeatureInfo supportsRenderPassStoreOpNone = {
340         "supportsRenderPassStoreOpNone", FeatureCategory::VulkanFeatures,
341         "VkDevice supports VK_QCOM_render_pass_store_ops extension.", &members,
342         "http://anglebug.com/5055"};
343 
344     FeatureInfo supportsRenderPassLoadStoreOpNone = {
345         "supportsRenderPassLoadStoreOpNone", FeatureCategory::VulkanFeatures,
346         "VkDevice supports VK_EXT_load_store_op_none extension.", &members,
347         "http://anglebug.com/5371"};
348 
349     FeatureInfo supportsDepthClipControl = {
350         "supportsDepthClipControl", FeatureCategory::VulkanFeatures,
351         "VkDevice supports VK_EXT_depth_clip_control extension.", &members,
352         "http://anglebug.com/5421"};
353 
354     FeatureInfo supportsBlendOperationAdvanced = {
355         "supportsBlendOperationAdvanced", FeatureCategory::VulkanFeatures,
356         "VkDevice supports VK_EXT_blend_operation_advanced extension.", &members,
357         "http://anglebug.com/3586"};
358 
359     FeatureInfo forceMaxUniformBufferSize16KB = {
360         "forceMaxUniformBufferSize16KB", FeatureCategory::VulkanWorkarounds,
361         "Force max uniform buffer size to 16K on some device due to bug", &members,
362         "https://issuetracker.google.com/161903006"};
363 
364     FeatureInfo supportsImageFormatList = {
365         "supportsImageFormatList", FeatureCategory::VulkanFeatures,
366         "Enable VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT by default for ICDs "
367         "that support VK_KHR_image_format_list",
368         &members, "http://anglebug.com/5281"};
369 
370     FeatureInfo enableMultisampledRenderToTexture = {
371         "enableMultisampledRenderToTexture", FeatureCategory::VulkanWorkarounds,
372         "Expose EXT_multisampled_render_to_texture", &members, "http://anglebug.com/4937"};
373 
374     FeatureInfo deferFlushUntilEndRenderPass = {
375         "deferFlushUntilEndRenderPass", FeatureCategory::VulkanWorkarounds,
376         "Allow glFlush to be deferred until renderpass ends", &members,
377         "https://issuetracker.google.com/issues/166475273"};
378 
379     FeatureInfo waitIdleBeforeSwapchainRecreation = {
380         "waitIdleBeforeSwapchainRecreation", FeatureCategory::VulkanWorkarounds,
381         "Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue to be idle. "
382         "Works around a bug on platforms which destroy oldSwapchain in vkCreateSwapchainKHR.",
383         &members, "http://anglebug.com/5061"};
384 
385     FeatureInfo forceTextureLodOffset1 = {
386         "forceTextureLodOffset1",
387         FeatureCategory::VulkanWorkarounds,
388         "Increase the minimum texture level-of-detail by 1 when sampling.",
389         &members,
390     };
391 
392     FeatureInfo forceTextureLodOffset2 = {
393         "forceTextureLodOffset2",
394         FeatureCategory::VulkanWorkarounds,
395         "Increase the minimum texture level-of-detail by 2 when sampling.",
396         &members,
397     };
398 
399     FeatureInfo forceTextureLodOffset3 = {
400         "forceTextureLodOffset3",
401         FeatureCategory::VulkanWorkarounds,
402         "Increase the minimum texture level-of-detail by 3 when sampling.",
403         &members,
404     };
405 
406     FeatureInfo forceTextureLodOffset4 = {
407         "forceTextureLodOffset4",
408         FeatureCategory::VulkanWorkarounds,
409         "Increase the minimum texture level-of-detail by 4 when sampling.",
410         &members,
411     };
412 
413     FeatureInfo forceNearestFiltering = {
414         "forceNearestFiltering",
415         FeatureCategory::VulkanWorkarounds,
416         "Force nearest filtering when sampling.",
417         &members,
418     };
419 
420     FeatureInfo forceNearestMipFiltering = {
421         "forceNearestMipFiltering",
422         FeatureCategory::VulkanWorkarounds,
423         "Force nearest mip filtering when sampling.",
424         &members,
425     };
426 
427     FeatureInfo compressVertexData = {
428         "compressVertexData",
429         FeatureCategory::VulkanWorkarounds,
430         "Compress vertex data to smaller data types when "
431         "possible. Using this feature makes ANGLE non-conformant.",
432         &members,
433     };
434 
435     FeatureInfo preferDrawClearOverVkCmdClearAttachments = {
436         "preferDrawClearOverVkCmdClearAttachments", FeatureCategory::VulkanWorkarounds,
437         "On some hardware, clear using a draw call instead of vkCmdClearAttachments in the middle "
438         "of render pass due to bugs",
439         &members, "https://issuetracker.google.com/166809097"};
440 
441     FeatureInfo emulatedPrerotation90 = {"emulatedPrerotation90", FeatureCategory::VulkanFeatures,
442                                          "Emulate 90-degree prerotation.", &members,
443                                          "http://anglebug.com/4901"};
444 
445     FeatureInfo emulatedPrerotation180 = {"emulatedPrerotation180", FeatureCategory::VulkanFeatures,
446                                           "Emulate 180-degree prerotation.", &members,
447                                           "http://anglebug.com/4901"};
448 
449     FeatureInfo emulatedPrerotation270 = {"emulatedPrerotation270", FeatureCategory::VulkanFeatures,
450                                           "Emulate 270-degree prerotation.", &members,
451                                           "http://anglebug.com/4901"};
452 
453     FeatureInfo generateSPIRVThroughGlslang = {
454         "generateSPIRVThroughGlslang", FeatureCategory::VulkanFeatures,
455         "Translate SPIR-V through glslang.", &members, "http://anglebug.com/4889"};
456 
457     FeatureInfo forceDriverUniformOverSpecConst = {
458         "forceDriverUniformOverSpecConst", FeatureCategory::VulkanWorkarounds,
459         "Forces using driver uniforms instead of specialization constants.", &members,
460         "http://issuetracker.google.com/173636783"};
461 
462     FeatureInfo exposeNonConformantExtensionsAndVersions = {
463         "exposeNonConformantExtensionsAndVersions", FeatureCategory::VulkanWorkarounds,
464         "Expose GLES versions and extensions that are not conformant.", &members,
465         "http://anglebug.com/5375"};
466 
467     FeatureInfo emulateR32fImageAtomicExchange = {
468         "emulateR32fImageAtomicExchange", FeatureCategory::VulkanWorkarounds,
469         "Emulate r32f images with r32ui to support imageAtomicExchange.", &members,
470         "http://anglebug.com/5535"};
471 
472     FeatureInfo supportsNegativeViewport = {
473         "supportsNegativeViewport",
474         FeatureCategory::VulkanFeatures,
475         "The driver supports inverting the viewport with a negative height.",
476         &members,
477     };
478 
479     FeatureInfo forceFragmentShaderPrecisionHighpToMediump = {
480         "forceFragmentShaderPrecisionHighpToMediump", FeatureCategory::VulkanWorkarounds,
481         "Forces highp precision in fragment shader to mediump.", &members,
482         "https://issuetracker.google.com/184850002"};
483 
484     FeatureInfo preferSubmitAtFBOBoundary = {
485         "preferSubmitAtFBOBoundary", FeatureCategory::VulkanWorkarounds,
486         "Submit commands to driver at each FBO boundary for performance improvements.", &members,
487         "https://issuetracker.google.com/187425444"};
488 
489     FeatureInfo useMultipleDescriptorsForExternalFormats = {
490         "useMultipleDescriptorsForExternalFormats", FeatureCategory::VulkanWorkarounds,
491         "Return a default descriptor count for external formats.", &members,
492         "http://anglebug.com/6141"};
493 
494     FeatureInfo supportsProtectedMemory = {
495         "supportsProtectedMemory", FeatureCategory::VulkanFeatures,
496         "VkDevice supports protected memory", &members, "http://anglebug.com/3965"};
497 
498     FeatureInfo supportsHostQueryReset = {"supportsHostQueryReset", FeatureCategory::VulkanFeatures,
499                                           "VkDevice supports VK_EXT_host_query_reset extension",
500                                           &members, "http://anglebug.com/6692"};
501 
502     FeatureInfo supportsSurfaceCapabilities2Extension = {
503         "supportsSurfaceCapabilities2Extension",
504         FeatureCategory::VulkanFeatures,
505         "VkInstance supports the VK_KHR_get_surface_capabilities2 extension",
506         &members,
507     };
508 
509     FeatureInfo supportsSurfaceProtectedCapabilitiesExtension = {
510         "supportsSurfaceProtectedCapabilitiesExtension",
511         FeatureCategory::VulkanFeatures,
512         "VkInstance supports the VK_KHR_surface_protected_capabilities extension",
513         &members,
514     };
515 
516     FeatureInfo supportsSurfacelessQueryExtension = {
517         "supportsSurfacelessQueryExtension",
518         FeatureCategory::VulkanFeatures,
519         "VkInstance supports the VK_GOOGLE_surfaceless_query extension",
520         &members,
521     };
522 
523     FeatureInfo supportsSurfaceProtectedSwapchains = {
524         "supportsSurfaceProtectedSwapchains",
525         FeatureCategory::VulkanFeatures,
526         "VkSurface supportsProtected for protected swapchains",
527         &members,
528     };
529 
530     FeatureInfo overrideSurfaceFormatRGB8ToRGBA8 = {
531         "overrideSurfaceFormatRGB8ToRGBA8", FeatureCategory::VulkanWorkarounds,
532         "Override surface format GL_RGB8 to GL_RGBA8", &members, "http://anglebug.com/6651"};
533 
534     FeatureInfo supportsSharedPresentableImageExtension = {
535         "supportsSharedPresentableImageExtension",
536         FeatureCategory::VulkanFeatures,
537         "VkSurface supports the VK_KHR_shared_presentable_images extension",
538         &members,
539     };
540 
541     FeatureInfo supportsShaderFramebufferFetch = {
542         "supportsShaderFramebufferFetch",
543         FeatureCategory::VulkanFeatures,
544         "Whether the Vulkan backend supports coherent framebuffer fetch",
545         &members,
546     };
547 
548     FeatureInfo supportsShaderFramebufferFetchNonCoherent = {
549         "supportsShaderFramebufferFetchNonCoherent",
550         FeatureCategory::VulkanFeatures,
551         "Whether the Vulkan backend supports non-coherent framebuffer fetch",
552         &members,
553     };
554 
555     FeatureInfo supportsLockSurfaceExtension = {
556         "supportsLockSurfaceExtension",
557         FeatureCategory::VulkanFeatures,
558         "Surface supports the EGL_KHR_lock_surface3 extension",
559         &members,
560     };
561 
562     FeatureInfo swapbuffersOnFlushOrFinishWithSingleBuffer = {
563         "swapbuffersOnFlushOrFinishWithSingleBuffer", FeatureCategory::VulkanFeatures,
564         "Bypass deferredFlush with calling swapbuffers on flush or finish when in Shared Present "
565         "mode",
566         &members, "http://anglebug.com/6878"};
567 
568     FeatureInfo emulateDithering = {"emulateDithering", FeatureCategory::VulkanFeatures,
569                                     "Emulate OpenGL dithering", &members,
570                                     "http://anglebug.com/6755"};
571 
572     FeatureInfo emulateAdvancedBlendEquations = {
573         "emulateAdvancedBlendEquations", FeatureCategory::VulkanFeatures,
574         "Emulate GL_KHR_blend_equation_advanced", &members, "http://anglebug.com/3586"};
575 
576     FeatureInfo bottomLeftOriginPresentRegionRectangles = {
577         "bottomLeftOriginPresentRegionRectangles",
578         FeatureCategory::VulkanWorkarounds,
579         "On some platforms present region rectangles are expected to have a bottom-left origin, "
580         "instead of top-left origin as from spec",
581         &members,
582     };
583 
584     FeatureInfo forceSubmitImmutableTextureUpdates = {
585         "forceSubmitImmutableTextureUpdates", FeatureCategory::VulkanAppWorkarounds,
586         "Force submit updates to immutable textures", &members, "http://anglebug.com/6929"};
587 
588     FeatureInfo retainSPIRVDebugInfo = {"retainSPIRVDebugInfo", FeatureCategory::VulkanFeatures,
589                                         "Retain debug info in SPIR-V blob.", &members,
590                                         "http://anglebug.com/5901"};
591 
592     FeatureInfo createPipelineDuringLink = {
593         "createPipelineDuringLink", FeatureCategory::VulkanFeatures,
594         "Create pipeline with default state during glLinkProgram", &members,
595         "http://anglebug.com/7046"};
596 };
597 
598 inline FeaturesVk::FeaturesVk()  = default;
599 inline FeaturesVk::~FeaturesVk() = default;
600 
601 }  // namespace angle
602 
603 #endif  // ANGLE_PLATFORM_FEATURESVK_H_
604