tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FeaturesVk_autogen.h (35192B)


      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_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 bresenhamLineRasterization = {
     24        "bresenhamLineRasterization",
     25        FeatureCategory::VulkanFeatures,
     26        "Enable Bresenham line rasterization via VK_EXT_line_rasterization extension",
     27        &members,
     28    };
     29 
     30    FeatureInfo provokingVertex = {
     31        "provokingVertex",
     32        FeatureCategory::VulkanFeatures,
     33        "Enable provoking vertex mode via VK_EXT_provoking_vertex extension",
     34        &members,
     35    };
     36 
     37    FeatureInfo forceFallbackFormat = {
     38        "forceFallbackFormat",
     39        FeatureCategory::VulkanWorkarounds,
     40        "Force a fallback format for angle_end2end_tests",
     41        &members,
     42    };
     43 
     44    FeatureInfo clampPointSize = {
     45        "clampPointSize", FeatureCategory::VulkanWorkarounds,
     46        "The point size range reported from the API is inconsistent with the actual behavior",
     47        &members, "http://anglebug.com/2970"};
     48 
     49    FeatureInfo depthClamping = {
     50        "depthClamping", FeatureCategory::VulkanWorkarounds,
     51        "The depth value is not clamped to [0,1] for floating point depth buffers.", &members,
     52        "http://anglebug.com/3970"};
     53 
     54    FeatureInfo mutableMipmapTextureUpload = {
     55        "mutableMipmapTextureUpload", FeatureCategory::VulkanFeatures,
     56        "Enable uploading the previously defined mutable mipmap texture.", &members,
     57        "https://anglebug.com/7308"};
     58 
     59    FeatureInfo supportsRenderpass2 = {
     60        "supportsRenderpass2",
     61        FeatureCategory::VulkanFeatures,
     62        "VkDevice supports the VK_KHR_create_renderpass2 extension",
     63        &members,
     64    };
     65 
     66    FeatureInfo supportsIncrementalPresent = {
     67        "supportsIncrementalPresent",
     68        FeatureCategory::VulkanFeatures,
     69        "VkDevice supports the VK_KHR_incremental_present extension",
     70        &members,
     71    };
     72 
     73    FeatureInfo supportsAndroidHardwareBuffer = {
     74        "supportsAndroidHardwareBuffer",
     75        FeatureCategory::VulkanFeatures,
     76        "VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension",
     77        &members,
     78    };
     79 
     80    FeatureInfo supportsGGPFrameToken = {
     81        "supportsGGPFrameToken",
     82        FeatureCategory::VulkanFeatures,
     83        "VkDevice supports the VK_GGP_frame_token extension",
     84        &members,
     85    };
     86 
     87    FeatureInfo supportsExternalMemoryFd = {
     88        "supportsExternalMemoryFd",
     89        FeatureCategory::VulkanFeatures,
     90        "VkDevice supports the VK_KHR_external_memory_fd extension",
     91        &members,
     92    };
     93 
     94    FeatureInfo supportsExternalMemoryFuchsia = {
     95        "supportsExternalMemoryFuchsia",
     96        FeatureCategory::VulkanFeatures,
     97        "VkDevice supports the VK_FUCHSIA_external_memory extension",
     98        &members,
     99    };
    100 
    101    FeatureInfo supportsFilteringPrecision = {
    102        "supportsFilteringPrecision",
    103        FeatureCategory::VulkanFeatures,
    104        "VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension",
    105        &members,
    106    };
    107 
    108    FeatureInfo supportsExternalFenceCapabilities = {
    109        "supportsExternalFenceCapabilities",
    110        FeatureCategory::VulkanFeatures,
    111        "VkInstance supports the VK_KHR_external_fence_capabilities extension",
    112        &members,
    113    };
    114 
    115    FeatureInfo supportsExternalSemaphoreCapabilities = {
    116        "supportsExternalSemaphoreCapabilities",
    117        FeatureCategory::VulkanFeatures,
    118        "VkInstance supports the VK_KHR_external_semaphore_capabilities extension",
    119        &members,
    120    };
    121 
    122    FeatureInfo supportsExternalSemaphoreFd = {
    123        "supportsExternalSemaphoreFd",
    124        FeatureCategory::VulkanFeatures,
    125        "VkDevice supports the VK_KHR_external_semaphore_fd extension",
    126        &members,
    127    };
    128 
    129    FeatureInfo supportsExternalSemaphoreFuchsia = {
    130        "supportsExternalSemaphoreFuchsia",
    131        FeatureCategory::VulkanFeatures,
    132        "VkDevice supports the VK_FUCHSIA_external_semaphore extension",
    133        &members,
    134    };
    135 
    136    FeatureInfo supportsExternalFenceFd = {
    137        "supportsExternalFenceFd", FeatureCategory::VulkanFeatures,
    138        "VkDevice supports the VK_KHR_external_fence_fd extension", &members,
    139        "http://anglebug.com/2517"};
    140 
    141    FeatureInfo supportsAndroidNativeFenceSync = {
    142        "supportsAndroidNativeFenceSync", FeatureCategory::VulkanFeatures,
    143        "VkDevice supports the EGL_ANDROID_native_fence_sync extension", &members,
    144        "http://anglebug.com/2517"};
    145 
    146    FeatureInfo supportsImageCubeArray = {"supportsImageCubeArray", FeatureCategory::VulkanFeatures,
    147                                          "VkDevice supports the imageCubeArray feature properly",
    148                                          &members, "http://anglebug.com/3584"};
    149 
    150    FeatureInfo supportsPipelineStatisticsQuery = {
    151        "supportsPipelineStatisticsQuery", FeatureCategory::VulkanFeatures,
    152        "VkDevice supports the pipelineStatisticsQuery feature", &members,
    153        "http://anglebug.com/5430"};
    154 
    155    FeatureInfo supportsShaderStencilExport = {
    156        "supportsShaderStencilExport",
    157        FeatureCategory::VulkanFeatures,
    158        "VkDevice supports the VK_EXT_shader_stencil_export extension",
    159        &members,
    160    };
    161 
    162    FeatureInfo supportsYUVSamplerConversion = {
    163        "supportsYUVSamplerConversion",
    164        FeatureCategory::VulkanFeatures,
    165        "VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension",
    166        &members,
    167    };
    168 
    169    FeatureInfo emulateTransformFeedback = {
    170        "emulateTransformFeedback", FeatureCategory::VulkanFeatures,
    171        "Emulate transform feedback as the VK_EXT_transform_feedback is not present.", &members,
    172        "http://anglebug.com/3205"};
    173 
    174    FeatureInfo supportsTransformFeedbackExtension = {
    175        "supportsTransformFeedbackExtension", FeatureCategory::VulkanFeatures,
    176        "Transform feedback uses the VK_EXT_transform_feedback extension.", &members,
    177        "http://anglebug.com/3206"};
    178 
    179    FeatureInfo supportsGeometryStreamsCapability = {
    180        "supportsGeometryStreamsCapability", FeatureCategory::VulkanFeatures,
    181        "Implementation supports the GeometryStreams SPIR-V capability.", &members,
    182        "http://anglebug.com/3206"};
    183 
    184    FeatureInfo supportsIndexTypeUint8 = {"supportsIndexTypeUint8", FeatureCategory::VulkanFeatures,
    185                                          "VkDevice supports the VK_EXT_index_type_uint8 extension",
    186                                          &members, "http://anglebug.com/4405"};
    187 
    188    FeatureInfo supportsCustomBorderColor = {
    189        "supportsCustomBorderColor", FeatureCategory::VulkanFeatures,
    190        "VkDevice supports the VK_EXT_custom_border_color extension", &members,
    191        "http://anglebug.com/3577"};
    192 
    193    FeatureInfo supportsMultiDrawIndirect = {
    194        "supportsMultiDrawIndirect", FeatureCategory::VulkanFeatures,
    195        "VkDevice supports the multiDrawIndirect extension", &members, "http://anglebug.com/6439"};
    196 
    197    FeatureInfo supportsDepthStencilResolve = {"supportsDepthStencilResolve",
    198                                               FeatureCategory::VulkanFeatures,
    199                                               "VkDevice supports the VK_KHR_depth_stencil_resolve "
    200                                               "extension with the independentResolveNone feature",
    201                                               &members, "http://anglebug.com/4836"};
    202 
    203    FeatureInfo supportsMultisampledRenderToSingleSampledGOOGLEX = {
    204        "supportsMultisampledRenderToSingleSampledGOOGLEX", FeatureCategory::VulkanFeatures,
    205        "VkDevice supports the VK_GOOGLEX_multisampled_render_to_single_sampled extension",
    206        &members, "http://anglebug.com/4836"};
    207 
    208    FeatureInfo supportsMultisampledRenderToSingleSampled = {
    209        "supportsMultisampledRenderToSingleSampled", FeatureCategory::VulkanFeatures,
    210        "VkDevice supports the VK_EXT_multisampled_render_to_single_sampled extension", &members,
    211        "http://anglebug.com/4836"};
    212 
    213    FeatureInfo supportsMultiview = {"supportsMultiview", FeatureCategory::VulkanFeatures,
    214                                     "VkDevice supports the VK_KHR_multiview extension", &members,
    215                                     "http://anglebug.com/6048"};
    216 
    217    FeatureInfo disableFifoPresentMode = {
    218        "disableFifoPresentMode", FeatureCategory::VulkanWorkarounds,
    219        "VK_PRESENT_MODE_FIFO_KHR causes random timeouts", &members, "http://anglebug.com/3153"};
    220 
    221    FeatureInfo forceD16TexFilter = {
    222        "forceD16TexFilter", FeatureCategory::VulkanWorkarounds,
    223        "VK_FORMAT_D16_UNORM does not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, "
    224        "which prevents OES_depth_texture from being supported.",
    225        &members, "http://anglebug.com/3452"};
    226 
    227    FeatureInfo disableFlippingBlitWithCommand = {
    228        "disableFlippingBlitWithCommand", FeatureCategory::VulkanWorkarounds,
    229        "vkCmdBlitImage with flipped coordinates blits incorrectly.", &members,
    230        "http://anglebug.com/3498"};
    231 
    232    FeatureInfo perFrameWindowSizeQuery = {
    233        "perFrameWindowSizeQuery", FeatureCategory::VulkanWorkarounds,
    234        "Vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE when window resizing", &members,
    235        "http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625"};
    236 
    237    FeatureInfo padBuffersToMaxVertexAttribStride = {
    238        "padBuffersToMaxVertexAttribStride", FeatureCategory::VulkanWorkarounds,
    239        "Vulkan considers vertex attribute accesses to count up to the last multiple of the "
    240        "stride. This additional access supports AMD's robust buffer access implementation. "
    241        "AMDVLK in particular will return incorrect values when the vertex access extends into "
    242        "the range that would be the stride padding and the buffer is too small. "
    243        "This workaround limits GL_MAX_VERTEX_ATTRIB_STRIDE to a maximum value and "
    244        "pads up every buffer allocation size to be a multiple of the maximum stride.",
    245        &members, "http://anglebug.com/4428"};
    246 
    247    FeatureInfo supportsExternalMemoryDmaBufAndModifiers = {
    248        "supportsExternalMemoryDmaBufAndModifiers", FeatureCategory::VulkanFeatures,
    249        "VkDevice supports the VK_EXT_external_memory_dma_buf and VK_EXT_image_drm_format_modifier "
    250        "extensions",
    251        &members, "http://anglebug.com/6248"};
    252 
    253    FeatureInfo supportsExternalMemoryHost = {
    254        "supportsExternalMemoryHost",
    255        FeatureCategory::VulkanFeatures,
    256        "VkDevice supports the VK_EXT_external_memory_host extension",
    257        &members,
    258    };
    259 
    260    FeatureInfo allocateNonZeroMemory = {
    261        "allocateNonZeroMemory", FeatureCategory::VulkanFeatures,
    262        "Fill new allocations with non-zero values to flush out errors.", &members,
    263        "http://anglebug.com/4384"};
    264 
    265    FeatureInfo logMemoryReportCallbacks = {
    266        "logMemoryReportCallbacks",
    267        FeatureCategory::VulkanFeatures,
    268        "Log each callback from VK_EXT_device_memory_report",
    269        &members,
    270    };
    271 
    272    FeatureInfo logMemoryReportStats = {
    273        "logMemoryReportStats",
    274        FeatureCategory::VulkanFeatures,
    275        "Log stats from VK_EXT_device_memory_report each swap",
    276        &members,
    277    };
    278 
    279    FeatureInfo shadowBuffers = {
    280        "shadowBuffers", FeatureCategory::VulkanFeatures,
    281        "Allocate a shadow buffer for GL buffer objects to reduce glMap* latency.", &members,
    282        "http://anglebug.com/4339"};
    283 
    284    FeatureInfo preferCPUForBufferSubData = {
    285        "preferCPUForBufferSubData", FeatureCategory::VulkanFeatures,
    286        "Prefer use CPU to do bufferSubData instead of staged update.", &members,
    287        "http://issuetracker.google.com/200067929"};
    288 
    289    FeatureInfo persistentlyMappedBuffers = {
    290        "persistentlyMappedBuffers", FeatureCategory::VulkanFeatures,
    291        "Persistently map buffer memory to reduce map/unmap IOCTL overhead.", &members,
    292        "http://anglebug.com/2162"};
    293 
    294    FeatureInfo enablePreRotateSurfaces = {"enablePreRotateSurfaces",
    295                                           FeatureCategory::VulkanFeatures,
    296                                           "Enable Android pre-rotation for landscape applications",
    297                                           &members, "http://anglebug.com/3502"};
    298 
    299    FeatureInfo enablePrecisionQualifiers = {
    300        "enablePrecisionQualifiers", FeatureCategory::VulkanFeatures,
    301        "Enable precision qualifiers in shaders", &members, "http://anglebug.com/3078"};
    302 
    303    FeatureInfo preferAggregateBarrierCalls = {
    304        "preferAggregateBarrierCalls", FeatureCategory::VulkanWorkarounds,
    305        "Single barrier call is preferred over multiple calls with "
    306        "fine grained pipeline stage dependency information",
    307        &members, "http://anglebug.com/4633"};
    308 
    309    FeatureInfo preferSkippingInvalidateForEmulatedFormats = {
    310        "preferSkippingInvalidateForEmulatedFormats", FeatureCategory::VulkanWorkarounds,
    311        "Skipping invalidate is preferred for emulated formats that have extra channels over "
    312        "re-clearing the image",
    313        &members, "http://anglebug.com/6860"};
    314 
    315    FeatureInfo asyncCommandQueue = {"asyncCommandQueue", FeatureCategory::VulkanFeatures,
    316                                     "Use CommandQueue worker thread to dispatch work to GPU.",
    317                                     &members, "http://anglebug.com/4324"};
    318 
    319    FeatureInfo supportsShaderFloat16 = {
    320        "supportsShaderFloat16", FeatureCategory::VulkanFeatures,
    321        "VkDevice supports the VK_KHR_shader_float16_int8 extension "
    322        "and has the shaderFloat16 feature",
    323        &members, "http://anglebug.com/4551"};
    324 
    325    FeatureInfo allowGenerateMipmapWithCompute = {
    326        "allowGenerateMipmapWithCompute", FeatureCategory::VulkanFeatures,
    327        "Use the compute path to generate mipmaps on devices that meet the minimum requirements, "
    328        "and the performance is better.",
    329        &members, "http://anglebug.com/4551"};
    330 
    331    FeatureInfo supportsRenderPassStoreOpNone = {
    332        "supportsRenderPassStoreOpNone", FeatureCategory::VulkanFeatures,
    333        "VkDevice supports VK_QCOM_render_pass_store_ops extension.", &members,
    334        "http://anglebug.com/5055"};
    335 
    336    FeatureInfo supportsRenderPassLoadStoreOpNone = {
    337        "supportsRenderPassLoadStoreOpNone", FeatureCategory::VulkanFeatures,
    338        "VkDevice supports VK_EXT_load_store_op_none extension.", &members,
    339        "http://anglebug.com/5371"};
    340 
    341    FeatureInfo disallowMixedDepthStencilLoadOpNoneAndLoad = {
    342        "disallowMixedDepthStencilLoadOpNoneAndLoad", FeatureCategory::VulkanWorkarounds,
    343        "Disallow use of LOAD_OP_NONE for only one of the depth or stencil aspects of a "
    344        "depth/stencil attachment",
    345        &members, "http://anglebug.com/7370"};
    346 
    347    FeatureInfo supportsDepthClipControl = {
    348        "supportsDepthClipControl", FeatureCategory::VulkanFeatures,
    349        "VkDevice supports VK_EXT_depth_clip_control extension.", &members,
    350        "http://anglebug.com/5421"};
    351 
    352    FeatureInfo supportsPrimitiveTopologyListRestart = {
    353        "supportsPrimitiveTopologyListRestart", FeatureCategory::VulkanFeatures,
    354        "VkDevice supports VK_EXT_primitive_topology_list_restart extension.", &members,
    355        "http://anglebug.com/3832"};
    356 
    357    FeatureInfo supportsBlendOperationAdvanced = {
    358        "supportsBlendOperationAdvanced", FeatureCategory::VulkanFeatures,
    359        "VkDevice supports VK_EXT_blend_operation_advanced extension.", &members,
    360        "http://anglebug.com/3586"};
    361 
    362    FeatureInfo forceMaxUniformBufferSize16KB = {
    363        "forceMaxUniformBufferSize16KB", FeatureCategory::VulkanWorkarounds,
    364        "Force max uniform buffer size to 16K on some device due to bug", &members,
    365        "https://issuetracker.google.com/161903006"};
    366 
    367    FeatureInfo supportsImageFormatList = {
    368        "supportsImageFormatList", FeatureCategory::VulkanFeatures,
    369        "Enable VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT by default for ICDs "
    370        "that support VK_KHR_image_format_list",
    371        &members, "http://anglebug.com/5281"};
    372 
    373    FeatureInfo enableMultisampledRenderToTexture = {
    374        "enableMultisampledRenderToTexture", FeatureCategory::VulkanWorkarounds,
    375        "Expose EXT_multisampled_render_to_texture", &members, "http://anglebug.com/4937"};
    376 
    377    FeatureInfo deferFlushUntilEndRenderPass = {
    378        "deferFlushUntilEndRenderPass", FeatureCategory::VulkanWorkarounds,
    379        "Allow glFlush to be deferred until renderpass ends", &members,
    380        "https://issuetracker.google.com/issues/166475273"};
    381 
    382    FeatureInfo waitIdleBeforeSwapchainRecreation = {
    383        "waitIdleBeforeSwapchainRecreation", FeatureCategory::VulkanWorkarounds,
    384        "Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue to be idle. "
    385        "Works around a bug on platforms which destroy oldSwapchain in vkCreateSwapchainKHR.",
    386        &members, "http://anglebug.com/5061"};
    387 
    388    FeatureInfo forceTextureLodOffset1 = {
    389        "forceTextureLodOffset1",
    390        FeatureCategory::VulkanWorkarounds,
    391        "Increase the minimum texture level-of-detail by 1 when sampling.",
    392        &members,
    393    };
    394 
    395    FeatureInfo forceTextureLodOffset2 = {
    396        "forceTextureLodOffset2",
    397        FeatureCategory::VulkanWorkarounds,
    398        "Increase the minimum texture level-of-detail by 2 when sampling.",
    399        &members,
    400    };
    401 
    402    FeatureInfo forceTextureLodOffset3 = {
    403        "forceTextureLodOffset3",
    404        FeatureCategory::VulkanWorkarounds,
    405        "Increase the minimum texture level-of-detail by 3 when sampling.",
    406        &members,
    407    };
    408 
    409    FeatureInfo forceTextureLodOffset4 = {
    410        "forceTextureLodOffset4",
    411        FeatureCategory::VulkanWorkarounds,
    412        "Increase the minimum texture level-of-detail by 4 when sampling.",
    413        &members,
    414    };
    415 
    416    FeatureInfo forceNearestFiltering = {
    417        "forceNearestFiltering",
    418        FeatureCategory::VulkanWorkarounds,
    419        "Force nearest filtering when sampling.",
    420        &members,
    421    };
    422 
    423    FeatureInfo forceNearestMipFiltering = {
    424        "forceNearestMipFiltering",
    425        FeatureCategory::VulkanWorkarounds,
    426        "Force nearest mip filtering when sampling.",
    427        &members,
    428    };
    429 
    430    FeatureInfo compressVertexData = {
    431        "compressVertexData",
    432        FeatureCategory::VulkanWorkarounds,
    433        "Compress vertex data to smaller data types when "
    434        "possible. Using this feature makes ANGLE non-conformant.",
    435        &members,
    436    };
    437 
    438    FeatureInfo preferDrawClearOverVkCmdClearAttachments = {
    439        "preferDrawClearOverVkCmdClearAttachments", FeatureCategory::VulkanWorkarounds,
    440        "On some hardware, clear using a draw call instead of vkCmdClearAttachments in the middle "
    441        "of render pass due to bugs",
    442        &members, "https://issuetracker.google.com/166809097"};
    443 
    444    FeatureInfo emulatedPrerotation90 = {"emulatedPrerotation90", FeatureCategory::VulkanFeatures,
    445                                         "Emulate 90-degree prerotation.", &members,
    446                                         "http://anglebug.com/4901"};
    447 
    448    FeatureInfo emulatedPrerotation180 = {"emulatedPrerotation180", FeatureCategory::VulkanFeatures,
    449                                          "Emulate 180-degree prerotation.", &members,
    450                                          "http://anglebug.com/4901"};
    451 
    452    FeatureInfo emulatedPrerotation270 = {"emulatedPrerotation270", FeatureCategory::VulkanFeatures,
    453                                          "Emulate 270-degree prerotation.", &members,
    454                                          "http://anglebug.com/4901"};
    455 
    456    FeatureInfo generateSPIRVThroughGlslang = {
    457        "generateSPIRVThroughGlslang", FeatureCategory::VulkanFeatures,
    458        "Translate SPIR-V through glslang.", &members, "http://anglebug.com/4889"};
    459 
    460    FeatureInfo preferDriverUniformOverSpecConst = {
    461        "preferDriverUniformOverSpecConst", FeatureCategory::VulkanFeatures,
    462        "Prefer using driver uniforms instead of specialization constants.", &members,
    463        "http://anglebug.com/7406"};
    464 
    465    FeatureInfo exposeNonConformantExtensionsAndVersions = {
    466        "exposeNonConformantExtensionsAndVersions", FeatureCategory::VulkanWorkarounds,
    467        "Expose GLES versions and extensions that are not conformant.", &members,
    468        "http://anglebug.com/5375"};
    469 
    470    FeatureInfo emulateR32fImageAtomicExchange = {
    471        "emulateR32fImageAtomicExchange", FeatureCategory::VulkanWorkarounds,
    472        "Emulate r32f images with r32ui to support imageAtomicExchange.", &members,
    473        "http://anglebug.com/5535"};
    474 
    475    FeatureInfo supportsNegativeViewport = {
    476        "supportsNegativeViewport",
    477        FeatureCategory::VulkanFeatures,
    478        "The driver supports inverting the viewport with a negative height.",
    479        &members,
    480    };
    481 
    482    FeatureInfo forceFragmentShaderPrecisionHighpToMediump = {
    483        "forceFragmentShaderPrecisionHighpToMediump", FeatureCategory::VulkanWorkarounds,
    484        "Forces highp precision in fragment shader to mediump.", &members,
    485        "https://issuetracker.google.com/184850002"};
    486 
    487    FeatureInfo preferSubmitAtFBOBoundary = {
    488        "preferSubmitAtFBOBoundary", FeatureCategory::VulkanWorkarounds,
    489        "Submit commands to driver at each FBO boundary for performance improvements.", &members,
    490        "https://issuetracker.google.com/187425444"};
    491 
    492    FeatureInfo useMultipleDescriptorsForExternalFormats = {
    493        "useMultipleDescriptorsForExternalFormats", FeatureCategory::VulkanWorkarounds,
    494        "Return a default descriptor count for external formats.", &members,
    495        "http://anglebug.com/6141"};
    496 
    497    FeatureInfo supportsProtectedMemory = {
    498        "supportsProtectedMemory", FeatureCategory::VulkanFeatures,
    499        "VkDevice supports protected memory", &members, "http://anglebug.com/3965"};
    500 
    501    FeatureInfo supportsHostQueryReset = {"supportsHostQueryReset", FeatureCategory::VulkanFeatures,
    502                                          "VkDevice supports VK_EXT_host_query_reset extension",
    503                                          &members, "http://anglebug.com/6692"};
    504 
    505    FeatureInfo supportsPipelineCreationCacheControl = {
    506        "supportsPipelineCreationCacheControl", FeatureCategory::VulkanFeatures,
    507        "VkDevice supports VK_EXT_pipeline_creation_cache_control extension", &members,
    508        "http://anglebug.com/5881"};
    509 
    510    FeatureInfo supportsPipelineCreationFeedback = {
    511        "supportsPipelineCreationFeedback", FeatureCategory::VulkanFeatures,
    512        "VkDevice supports VK_EXT_pipeline_creation_feedback extension", &members,
    513        "http://anglebug.com/5881"};
    514 
    515    FeatureInfo supportsPrimitivesGeneratedQuery = {
    516        "supportsPrimitivesGeneratedQuery", FeatureCategory::VulkanFeatures,
    517        "VkDevice supports VK_EXT_primitives_generated_query extension", &members,
    518        "http://anglebug.com/5430"};
    519 
    520    FeatureInfo supportsSurfaceCapabilities2Extension = {
    521        "supportsSurfaceCapabilities2Extension",
    522        FeatureCategory::VulkanFeatures,
    523        "VkInstance supports the VK_KHR_get_surface_capabilities2 extension",
    524        &members,
    525    };
    526 
    527    FeatureInfo supportsSurfaceProtectedCapabilitiesExtension = {
    528        "supportsSurfaceProtectedCapabilitiesExtension",
    529        FeatureCategory::VulkanFeatures,
    530        "VkInstance supports the VK_KHR_surface_protected_capabilities extension",
    531        &members,
    532    };
    533 
    534    FeatureInfo supportsSurfacelessQueryExtension = {
    535        "supportsSurfacelessQueryExtension",
    536        FeatureCategory::VulkanFeatures,
    537        "VkInstance supports the VK_GOOGLE_surfaceless_query extension",
    538        &members,
    539    };
    540 
    541    FeatureInfo supportsSurfaceProtectedSwapchains = {
    542        "supportsSurfaceProtectedSwapchains",
    543        FeatureCategory::VulkanFeatures,
    544        "VkSurface supportsProtected for protected swapchains",
    545        &members,
    546    };
    547 
    548    FeatureInfo overrideSurfaceFormatRGB8ToRGBA8 = {
    549        "overrideSurfaceFormatRGB8ToRGBA8", FeatureCategory::VulkanWorkarounds,
    550        "Override surface format GL_RGB8 to GL_RGBA8", &members, "http://anglebug.com/6651"};
    551 
    552    FeatureInfo supportsSharedPresentableImageExtension = {
    553        "supportsSharedPresentableImageExtension",
    554        FeatureCategory::VulkanFeatures,
    555        "VkSurface supports the VK_KHR_shared_presentable_images extension",
    556        &members,
    557    };
    558 
    559    FeatureInfo supportsShaderFramebufferFetch = {
    560        "supportsShaderFramebufferFetch",
    561        FeatureCategory::VulkanFeatures,
    562        "Whether the Vulkan backend supports coherent framebuffer fetch",
    563        &members,
    564    };
    565 
    566    FeatureInfo supportsShaderFramebufferFetchNonCoherent = {
    567        "supportsShaderFramebufferFetchNonCoherent",
    568        FeatureCategory::VulkanFeatures,
    569        "Whether the Vulkan backend supports non-coherent framebuffer fetch",
    570        &members,
    571    };
    572 
    573    FeatureInfo permanentlySwitchToFramebufferFetchMode = {
    574        "permanentlySwitchToFramebufferFetchMode",
    575        FeatureCategory::VulkanFeatures,
    576        "Whether the context should permanently switch to framebuffer fetch mode on first"
    577        "encounter",
    578        &members,
    579    };
    580 
    581    FeatureInfo supportsLockSurfaceExtension = {
    582        "supportsLockSurfaceExtension",
    583        FeatureCategory::VulkanFeatures,
    584        "Surface supports the EGL_KHR_lock_surface3 extension",
    585        &members,
    586    };
    587 
    588    FeatureInfo swapbuffersOnFlushOrFinishWithSingleBuffer = {
    589        "swapbuffersOnFlushOrFinishWithSingleBuffer", FeatureCategory::VulkanFeatures,
    590        "Bypass deferredFlush with calling swapbuffers on flush or finish when in Shared "
    591        "Present mode",
    592        &members, "http://anglebug.com/6878"};
    593 
    594    FeatureInfo emulateDithering = {"emulateDithering", FeatureCategory::VulkanFeatures,
    595                                    "Emulate OpenGL dithering", &members,
    596                                    "http://anglebug.com/6755"};
    597 
    598    FeatureInfo roundOutputAfterDithering = {
    599        "roundOutputAfterDithering", FeatureCategory::VulkanWorkarounds,
    600        "Round output after dithering to workaround a driver bug that rounds the output up",
    601        &members, "http://anglebug.com/6953"};
    602 
    603    FeatureInfo emulateAdvancedBlendEquations = {
    604        "emulateAdvancedBlendEquations", FeatureCategory::VulkanFeatures,
    605        "Emulate GL_KHR_blend_equation_advanced", &members, "http://anglebug.com/3586"};
    606 
    607    FeatureInfo precisionSafeDivision = {
    608        "precisionSafeDivision",
    609        FeatureCategory::VulkanWorkarounds,
    610        "Special case handling for platforms that do not generate 1.0f even when the dividend and"
    611        "divisor have the same value",
    612        &members,
    613    };
    614 
    615    FeatureInfo bottomLeftOriginPresentRegionRectangles = {
    616        "bottomLeftOriginPresentRegionRectangles",
    617        FeatureCategory::VulkanWorkarounds,
    618        "On some platforms present region rectangles are expected to have a bottom-left origin, "
    619        "instead of top-left origin as from spec",
    620        &members,
    621    };
    622 
    623    FeatureInfo forceSubmitImmutableTextureUpdates = {
    624        "forceSubmitImmutableTextureUpdates", FeatureCategory::VulkanAppWorkarounds,
    625        "Force submit updates to immutable textures", &members, "http://anglebug.com/6929"};
    626 
    627    FeatureInfo retainSPIRVDebugInfo = {"retainSPIRVDebugInfo", FeatureCategory::VulkanFeatures,
    628                                        "Retain debug info in SPIR-V blob.", &members,
    629                                        "http://anglebug.com/5901"};
    630 
    631    FeatureInfo warmUpPipelineCacheAtLink = {
    632        "warmUpPipelineCacheAtLink", FeatureCategory::VulkanFeatures,
    633        "Warm up the Vulkan pipeline cache at link time", &members, "http://anglebug.com/5881"};
    634 
    635    FeatureInfo preferDeviceLocalMemoryHostVisible = {
    636        "preferDeviceLocalMemoryHostVisible", FeatureCategory::VulkanFeatures,
    637        "Prefer adding HOST_VISIBLE flag for DEVICE_LOCAL memory when picking memory types",
    638        &members, "http://anglebug.com/7047"};
    639 
    640    FeatureInfo forceStaticVertexStrideState = {
    641        "forceStaticVertexStrideState", FeatureCategory::VulkanWorkarounds,
    642        "Force static state for VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT due to"
    643        "driver bugs",
    644        &members, "https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=107106"};
    645 
    646    FeatureInfo supportsExtendedDynamicState = {
    647        "supportsExtendedDynamicState", FeatureCategory::VulkanFeatures,
    648        "VkDevice supports VK_EXT_extended_dynamic_state extension", &members,
    649        "http://anglebug.com/5906"};
    650 
    651    FeatureInfo supportsExtendedDynamicState2 = {
    652        "supportsExtendedDynamicState2", FeatureCategory::VulkanFeatures,
    653        "VkDevice supports VK_EXT_extended_dynamic_state2 extension", &members,
    654        "http://anglebug.com/5906"};
    655 
    656    FeatureInfo supportsLogicOpDynamicState = {
    657        "supportsLogicOpDynamicState", FeatureCategory::VulkanFeatures,
    658        "VkDevice supports the logicOp feature of VK_EXT_extended_dynamic_state2 extension",
    659        &members, "http://anglebug.com/3862"};
    660 
    661    FeatureInfo supportsFragmentShadingRate = {
    662        "supportsFragmentShadingRate", FeatureCategory::VulkanFeatures,
    663        "VkDevice supports VK_KHR_fragment_shading_rate extension", &members,
    664        "http://anglebug.com/7172"};
    665 
    666    FeatureInfo supportsFragmentShaderPixelInterlock = {
    667        "supportsFragmentShaderPixelInterlock",
    668        FeatureCategory::VulkanFeatures,
    669        "VkDevice supports the VK_EXT_fragment_shader_interlock extension "
    670        "and has the fragmentShaderPixelInterlock feature",
    671        &members,
    672    };
    673 
    674    FeatureInfo explicitlyEnablePerSampleShading = {
    675        "explicitlyEnablePerSampleShading", FeatureCategory::VulkanWorkarounds,
    676        "Explicitly enable per-sample shading if the fragment shader contains the "
    677        "sample qualifier",
    678        &members, "http://anglebug.com/6876"};
    679 
    680    FeatureInfo forceContinuousRefreshOnSharedPresent = {
    681        "forceContinuousRefreshOnSharedPresent", FeatureCategory::VulkanFeatures,
    682        "Force to create vulkan swapchain with continuous refresh on shared present", &members,
    683        "https://issuetracker.google.com/229267970"};
    684 
    685    FeatureInfo supportsImage2dViewOf3d = {
    686        "supportsImage2dViewOf3d", FeatureCategory::VulkanFeatures,
    687        "VkDevice supports VK_EXT_image_2d_view_of_3d", &members, "https://anglebug.com/7320"};
    688 
    689    FeatureInfo supportsImagelessFramebuffer = {
    690        "supportsImagelessFramebuffer", FeatureCategory::VulkanFeatures,
    691        "VkDevice supports VK_KHR_imageless_framebuffer extension", &members,
    692        "http://anglebug.com/7553"};
    693 
    694    FeatureInfo preferLinearFilterForYUV = {
    695        "preferLinearFilterForYUV", FeatureCategory::VulkanFeatures,
    696        "Prefer to use VK_FILTER_LINEAR for VkSamplerYcbcrConversion", &members,
    697        "https://anglebug.com/7382"};
    698 
    699    FeatureInfo supportsYuvTarget = {
    700        "supportsYuvTarget",
    701        FeatureCategory::VulkanFeatures,
    702        "VkDevice supports VK_ANDROID_render_to_external_format and VK_EXT_ycbcr_attachment",
    703        &members,
    704    };
    705 
    706    FeatureInfo useNonZeroStencilWriteMaskStaticState = {
    707        "useNonZeroStencilWriteMaskStaticState", FeatureCategory::VulkanWorkarounds,
    708        "Work around a driver bug where 0 in stencil write mask static state would make the"
    709        "corresponding dynamic state malfunction in the presence of discard or alpha to coverage",
    710        &members, "http://anglebug.com/7556"};
    711 
    712    FeatureInfo mapUnspecifiedColorSpaceToPassThrough = {
    713        "mapUnspecifiedColorSpaceToPassThrough",
    714        FeatureCategory::VulkanFeatures,
    715        "Use VK_COLOR_SPACE_PASS_THROUGH_EXT for EGL_NONE or unspecifed color "
    716        "spaces",
    717        &members,
    718    };
    719 
    720    FeatureInfo supportsTimestampSurfaceAttribute = {
    721        "supportsTimestampSurfaceAttribute", FeatureCategory::VulkanFeatures,
    722        "Platform supports setting frame timestamp surface attribute", &members,
    723        "https://anglebug.com/7489"};
    724 
    725    FeatureInfo supportsRasterizationOrderAttachmentAccess = {
    726        "supportsRasterizationOrderAttachmentAccess", FeatureCategory::VulkanFeatures,
    727        "VkDevice supports VK_EXT_rasterization_order_attachment_access extension", &members,
    728        "https://anglebug.com/7604"};
    729 
    730    FeatureInfo eglColorspaceAttributePassthrough = {
    731        "eglColorspaceAttributePassthrough", FeatureCategory::VulkanFeatures,
    732        "Support passthrough of EGL colorspace attribute values", &members,
    733        "https://anglebug.com/7319"};
    734 
    735    FeatureInfo supportsPipelineRobustness = {
    736        "supportsPipelineRobustness", FeatureCategory::VulkanFeatures,
    737        "VkDevice supports VK_EXT_pipeline_robustness extension", &members,
    738        "https://anglebug.com/5845"};
    739 
    740    FeatureInfo supportsVertexInputDynamicState = {
    741        "supportsVertexInputDynamicState", FeatureCategory::VulkanFeatures,
    742        "VkDevice supports VK_EXT_vertex_input_dynamic_state extension", &members,
    743        "https://anglebug.com/7162"};
    744 
    745    FeatureInfo supportsColorWriteEnable = {"supportsColorWriteEnable",
    746                                            FeatureCategory::VulkanFeatures,
    747                                            "VkDevice supports VK_EXT_color_write_enable extension",
    748                                            &members, "https://anglebug.com/7161"};
    749 
    750    FeatureInfo supportsPresentation = {
    751        "supportsPresentation",
    752        FeatureCategory::VulkanFeatures,
    753        "VkDisplay supports presentation through a present family queue",
    754        &members,
    755    };
    756 
    757    FeatureInfo supportsComputeTranscodeEtcToBc = {
    758        "supportsComputeTranscodeEtcToBc",
    759        FeatureCategory::VulkanFeatures,
    760        "supports compute shader transcode etc format to bc format",
    761        &members,
    762    };
    763 
    764    FeatureInfo supportsGraphicsPipelineLibrary = {
    765        "supportsGraphicsPipelineLibrary", FeatureCategory::VulkanFeatures,
    766        "VkDevice supports the VK_EXT_graphics_pipeline_library extension", &members,
    767        "https://anglebug.com/7369"};
    768 
    769    FeatureInfo supportsPipelineProtectedAccess = {
    770        "supportsPipelineProtectedAccess", FeatureCategory::VulkanFeatures,
    771        "VkDevice supports the VK_EXT_pipeline_protected_access extension", &members,
    772        "https://anglebug.com/7714"};
    773 
    774    FeatureInfo preferSubmitOnAnySamplesPassedQueryEnd = {
    775        "preferSubmitOnAnySamplesPassedQueryEnd", FeatureCategory::VulkanWorkarounds,
    776        "Submit commands to driver when last GL_ANY_SAMPLES_PASSED query is made for performance "
    777        "improvements.",
    778        &members, "https://issuetracker.google.com/250706693"};
    779 };
    780 
    781 inline FeaturesVk::FeaturesVk()  = default;
    782 inline FeaturesVk::~FeaturesVk() = default;
    783 
    784 }  // namespace angle
    785 
    786 #endif  // ANGLE_PLATFORM_FEATURESVK_H_