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 SPIR-V 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 supportsDepthClampZeroOne = { 59 "supportsDepthClampZeroOne", 60 FeatureCategory::VulkanFeatures, 61 "VkDevice supports the VK_EXT_depth_clamp_zero_one extension", 62 &members, "http://anglebug.com/3970" 63 }; 64 65 FeatureInfo clampFragDepth = { 66 "clampFragDepth", 67 FeatureCategory::VulkanWorkarounds, 68 "gl_FragDepth is not clamped when rendering to a floating point depth buffer without VK_EXT_depth_clamp_zero_one", 69 &members, "http://anglebug.com/3970" 70 }; 71 72 FeatureInfo mutableMipmapTextureUpload = { 73 "mutableMipmapTextureUpload", 74 FeatureCategory::VulkanFeatures, 75 "Enable uploading the previously defined mutable mipmap texture.", 76 &members, "https://anglebug.com/7308" 77 }; 78 79 FeatureInfo useVmaForImageSuballocation = { 80 "useVmaForImageSuballocation", 81 FeatureCategory::VulkanFeatures, 82 "Utilize VMA for image memory suballocation.", 83 &members, 84 }; 85 86 FeatureInfo supportsMemoryBudget = { 87 "supportsMemoryBudget", 88 FeatureCategory::VulkanFeatures, 89 "VkDevice supports the VK_EXT_memory_budget extension.", 90 &members, 91 }; 92 93 FeatureInfo supportsRenderpass2 = { 94 "supportsRenderpass2", 95 FeatureCategory::VulkanFeatures, 96 "VkDevice supports the VK_KHR_create_renderpass2 extension", 97 &members, 98 }; 99 100 FeatureInfo supportsIncrementalPresent = { 101 "supportsIncrementalPresent", 102 FeatureCategory::VulkanFeatures, 103 "VkDevice supports the VK_KHR_incremental_present extension", 104 &members, 105 }; 106 107 FeatureInfo supportsAndroidHardwareBuffer = { 108 "supportsAndroidHardwareBuffer", 109 FeatureCategory::VulkanFeatures, 110 "VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension", 111 &members, 112 }; 113 114 FeatureInfo supportsGGPFrameToken = { 115 "supportsGGPFrameToken", 116 FeatureCategory::VulkanFeatures, 117 "VkDevice supports the VK_GGP_frame_token extension", 118 &members, 119 }; 120 121 FeatureInfo supportsExternalMemoryFd = { 122 "supportsExternalMemoryFd", 123 FeatureCategory::VulkanFeatures, 124 "VkDevice supports the VK_KHR_external_memory_fd extension", 125 &members, 126 }; 127 128 FeatureInfo supportsExternalMemoryFuchsia = { 129 "supportsExternalMemoryFuchsia", 130 FeatureCategory::VulkanFeatures, 131 "VkDevice supports the VK_FUCHSIA_external_memory extension", 132 &members, 133 }; 134 135 FeatureInfo supportsExternalFenceCapabilities = { 136 "supportsExternalFenceCapabilities", 137 FeatureCategory::VulkanFeatures, 138 "VkInstance supports the VK_KHR_external_fence_capabilities extension", 139 &members, 140 }; 141 142 FeatureInfo supportsExternalSemaphoreCapabilities = { 143 "supportsExternalSemaphoreCapabilities", 144 FeatureCategory::VulkanFeatures, 145 "VkInstance supports the VK_KHR_external_semaphore_capabilities extension", 146 &members, 147 }; 148 149 FeatureInfo supportsExternalSemaphoreFd = { 150 "supportsExternalSemaphoreFd", 151 FeatureCategory::VulkanFeatures, 152 "VkDevice supports the VK_KHR_external_semaphore_fd extension", 153 &members, 154 }; 155 156 FeatureInfo supportsExternalSemaphoreFuchsia = { 157 "supportsExternalSemaphoreFuchsia", 158 FeatureCategory::VulkanFeatures, 159 "VkDevice supports the VK_FUCHSIA_external_semaphore extension", 160 &members, 161 }; 162 163 FeatureInfo supportsExternalFenceFd = { 164 "supportsExternalFenceFd", 165 FeatureCategory::VulkanFeatures, 166 "VkDevice supports the VK_KHR_external_fence_fd extension", 167 &members, "http://anglebug.com/2517" 168 }; 169 170 FeatureInfo supportsAndroidNativeFenceSync = { 171 "supportsAndroidNativeFenceSync", 172 FeatureCategory::VulkanFeatures, 173 "VkDevice supports the EGL_ANDROID_native_fence_sync extension", 174 &members, "http://anglebug.com/2517" 175 }; 176 177 FeatureInfo supportsImageCubeArray = { 178 "supportsImageCubeArray", 179 FeatureCategory::VulkanFeatures, 180 "VkDevice supports the imageCubeArray feature properly", 181 &members, "http://anglebug.com/3584" 182 }; 183 184 FeatureInfo supportsPipelineStatisticsQuery = { 185 "supportsPipelineStatisticsQuery", 186 FeatureCategory::VulkanFeatures, 187 "VkDevice supports the pipelineStatisticsQuery feature", 188 &members, "http://anglebug.com/5430" 189 }; 190 191 FeatureInfo supportsShaderStencilExport = { 192 "supportsShaderStencilExport", 193 FeatureCategory::VulkanFeatures, 194 "VkDevice supports the VK_EXT_shader_stencil_export extension", 195 &members, 196 }; 197 198 FeatureInfo supportsYUVSamplerConversion = { 199 "supportsYUVSamplerConversion", 200 FeatureCategory::VulkanFeatures, 201 "VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension", 202 &members, 203 }; 204 205 FeatureInfo emulateTransformFeedback = { 206 "emulateTransformFeedback", 207 FeatureCategory::VulkanFeatures, 208 "Emulate transform feedback as the VK_EXT_transform_feedback is not present.", 209 &members, "http://anglebug.com/3205" 210 }; 211 212 FeatureInfo supportsTransformFeedbackExtension = { 213 "supportsTransformFeedbackExtension", 214 FeatureCategory::VulkanFeatures, 215 "Transform feedback uses the VK_EXT_transform_feedback extension.", 216 &members, "http://anglebug.com/3206" 217 }; 218 219 FeatureInfo supportsGeometryStreamsCapability = { 220 "supportsGeometryStreamsCapability", 221 FeatureCategory::VulkanFeatures, 222 "Implementation supports the GeometryStreams SPIR-V capability.", 223 &members, "http://anglebug.com/3206" 224 }; 225 226 FeatureInfo supportsIndexTypeUint8 = { 227 "supportsIndexTypeUint8", 228 FeatureCategory::VulkanFeatures, 229 "VkDevice supports the VK_EXT_index_type_uint8 extension", 230 &members, "http://anglebug.com/4405" 231 }; 232 233 FeatureInfo supportsCustomBorderColor = { 234 "supportsCustomBorderColor", 235 FeatureCategory::VulkanFeatures, 236 "VkDevice supports the VK_EXT_custom_border_color extension", 237 &members, "http://anglebug.com/3577" 238 }; 239 240 FeatureInfo supportsMultiDrawIndirect = { 241 "supportsMultiDrawIndirect", 242 FeatureCategory::VulkanFeatures, 243 "VkDevice supports the multiDrawIndirect extension", 244 &members, "http://anglebug.com/6439" 245 }; 246 247 FeatureInfo supportsDepthStencilResolve = { 248 "supportsDepthStencilResolve", 249 FeatureCategory::VulkanFeatures, 250 "VkDevice supports the VK_KHR_depth_stencil_resolve extension", 251 &members, "http://anglebug.com/4836" 252 }; 253 254 FeatureInfo supportsDepthStencilIndependentResolveNone = { 255 "supportsDepthStencilIndependentResolveNone", 256 FeatureCategory::VulkanFeatures, 257 "VkDevice supports the VK_KHR_depth_stencil_resolve " 258 "extension with the independentResolveNone feature", 259 &members, "http://anglebug.com/7551" 260 }; 261 262 FeatureInfo supportsMultisampledRenderToSingleSampled = { 263 "supportsMultisampledRenderToSingleSampled", 264 FeatureCategory::VulkanFeatures, 265 "VkDevice supports the VK_EXT_multisampled_render_to_single_sampled extension", 266 &members, "http://anglebug.com/4836" 267 }; 268 269 FeatureInfo preferMSRTSSFlagByDefault = { 270 "preferMSRTSSFlagByDefault", 271 FeatureCategory::VulkanFeatures, 272 "Enable MSRTSS for each image initialization if available", 273 &members, "http://anglebug.com/8622" 274 }; 275 276 FeatureInfo supportsMultiview = { 277 "supportsMultiview", 278 FeatureCategory::VulkanFeatures, 279 "VkDevice supports the VK_KHR_multiview extension", 280 &members, "http://anglebug.com/6048" 281 }; 282 283 FeatureInfo forceD16TexFilter = { 284 "forceD16TexFilter", 285 FeatureCategory::VulkanWorkarounds, 286 "VK_FORMAT_D16_UNORM does not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, " 287 "which prevents OES_depth_texture from being supported.", 288 &members, "http://anglebug.com/3452" 289 }; 290 291 FeatureInfo disableFlippingBlitWithCommand = { 292 "disableFlippingBlitWithCommand", 293 FeatureCategory::VulkanWorkarounds, 294 "vkCmdBlitImage with flipped coordinates blits incorrectly.", 295 &members, "http://anglebug.com/3498" 296 }; 297 298 FeatureInfo perFrameWindowSizeQuery = { 299 "perFrameWindowSizeQuery", 300 FeatureCategory::VulkanWorkarounds, 301 "Vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE when window resizing", 302 &members, "http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625" 303 }; 304 305 FeatureInfo padBuffersToMaxVertexAttribStride = { 306 "padBuffersToMaxVertexAttribStride", 307 FeatureCategory::VulkanWorkarounds, 308 "Vulkan considers vertex attribute accesses to count up to the last multiple of the " 309 "stride. This additional access supports AMD's robust buffer access implementation. " 310 "AMDVLK in particular will return incorrect values when the vertex access extends into " 311 "the range that would be the stride padding and the buffer is too small. " 312 "This workaround limits GL_MAX_VERTEX_ATTRIB_STRIDE to a maximum value and " 313 "pads up every buffer allocation size to be a multiple of the maximum stride.", 314 &members, "http://anglebug.com/4428" 315 }; 316 317 FeatureInfo supportsExternalMemoryDmaBufAndModifiers = { 318 "supportsExternalMemoryDmaBufAndModifiers", 319 FeatureCategory::VulkanFeatures, 320 "VkDevice supports the VK_EXT_external_memory_dma_buf and VK_EXT_image_drm_format_modifier " 321 "extensions", 322 &members, "http://anglebug.com/6248" 323 }; 324 325 FeatureInfo supportsExternalMemoryHost = { 326 "supportsExternalMemoryHost", 327 FeatureCategory::VulkanFeatures, 328 "VkDevice supports the VK_EXT_external_memory_host extension", 329 &members, 330 }; 331 332 FeatureInfo allocateNonZeroMemory = { 333 "allocateNonZeroMemory", 334 FeatureCategory::VulkanFeatures, 335 "Fill new allocations with non-zero values to flush out errors.", 336 &members, "http://anglebug.com/4384" 337 }; 338 339 FeatureInfo logMemoryReportCallbacks = { 340 "logMemoryReportCallbacks", 341 FeatureCategory::VulkanFeatures, 342 "Log each callback from VK_EXT_device_memory_report", 343 &members, 344 }; 345 346 FeatureInfo logMemoryReportStats = { 347 "logMemoryReportStats", 348 FeatureCategory::VulkanFeatures, 349 "Log stats from VK_EXT_device_memory_report each swap", 350 &members, 351 }; 352 353 FeatureInfo preferCPUForBufferSubData = { 354 "preferCPUForBufferSubData", 355 FeatureCategory::VulkanFeatures, 356 "Prefer use CPU to do bufferSubData instead of staged update.", 357 &members, "http://issuetracker.google.com/200067929" 358 }; 359 360 FeatureInfo persistentlyMappedBuffers = { 361 "persistentlyMappedBuffers", 362 FeatureCategory::VulkanFeatures, 363 "Persistently map buffer memory to reduce map/unmap IOCTL overhead.", 364 &members, "http://anglebug.com/2162" 365 }; 366 367 FeatureInfo enablePreRotateSurfaces = { 368 "enablePreRotateSurfaces", 369 FeatureCategory::VulkanFeatures, 370 "Enable Android pre-rotation for landscape applications", 371 &members, "http://anglebug.com/3502" 372 }; 373 374 FeatureInfo enablePrecisionQualifiers = { 375 "enablePrecisionQualifiers", 376 FeatureCategory::VulkanFeatures, 377 "Enable precision qualifiers in shaders", 378 &members, "http://anglebug.com/3078" 379 }; 380 381 FeatureInfo varyingsRequireMatchingPrecisionInSpirv = { 382 "varyingsRequireMatchingPrecisionInSpirv", 383 FeatureCategory::VulkanWorkarounds, 384 "Add additional SPIR-V instructions to make sure precision " 385 "between shader stages match with each other", 386 &members, "http://anglebug.com/7488" 387 }; 388 389 FeatureInfo preferAggregateBarrierCalls = { 390 "preferAggregateBarrierCalls", 391 FeatureCategory::VulkanWorkarounds, 392 "Single barrier call is preferred over multiple calls with " 393 "fine grained pipeline stage dependency information", 394 &members, "http://anglebug.com/4633" 395 }; 396 397 FeatureInfo preferSkippingInvalidateForEmulatedFormats = { 398 "preferSkippingInvalidateForEmulatedFormats", 399 FeatureCategory::VulkanWorkarounds, 400 "Skipping invalidate is preferred for emulated formats that have extra channels over " 401 "re-clearing the image", 402 &members, "http://anglebug.com/6860" 403 }; 404 405 FeatureInfo asyncCommandQueue = { 406 "asyncCommandQueue", 407 FeatureCategory::VulkanFeatures, 408 "Use CommandQueue worker thread to dispatch work to GPU.", 409 &members, "http://anglebug.com/4324" 410 }; 411 412 FeatureInfo slowAsyncCommandQueueForTesting = { 413 "slowAsyncCommandQueueForTesting", 414 FeatureCategory::VulkanWorkarounds, 415 "Artificially slow down async command queue for threading testing", 416 &members, "https://anglebug.com/6574" 417 }; 418 419 FeatureInfo supportsShaderFloat16 = { 420 "supportsShaderFloat16", 421 FeatureCategory::VulkanFeatures, 422 "VkDevice supports the VK_KHR_shader_float16_int8 extension " 423 "and has the shaderFloat16 feature", 424 &members, "http://anglebug.com/4551" 425 }; 426 427 FeatureInfo allowGenerateMipmapWithCompute = { 428 "allowGenerateMipmapWithCompute", 429 FeatureCategory::VulkanFeatures, 430 "Use the compute path to generate mipmaps on devices that meet the minimum requirements, " 431 "and the performance is better.", 432 &members, "http://anglebug.com/4551" 433 }; 434 435 FeatureInfo supportsRenderPassStoreOpNone = { 436 "supportsRenderPassStoreOpNone", 437 FeatureCategory::VulkanFeatures, 438 "VkDevice supports VK_QCOM_render_pass_store_ops extension.", 439 &members, "http://anglebug.com/5055" 440 }; 441 442 FeatureInfo supportsRenderPassLoadStoreOpNone = { 443 "supportsRenderPassLoadStoreOpNone", 444 FeatureCategory::VulkanFeatures, 445 "VkDevice supports VK_EXT_load_store_op_none extension.", 446 &members, "http://anglebug.com/5371" 447 }; 448 449 FeatureInfo disallowMixedDepthStencilLoadOpNoneAndLoad = { 450 "disallowMixedDepthStencilLoadOpNoneAndLoad", 451 FeatureCategory::VulkanWorkarounds, 452 "Disallow use of LOAD_OP_NONE for only one of the depth or stencil aspects of a " 453 "depth/stencil attachment", 454 &members, "http://anglebug.com/7370" 455 }; 456 457 FeatureInfo supportsDepthClipControl = { 458 "supportsDepthClipControl", 459 FeatureCategory::VulkanFeatures, 460 "VkDevice supports VK_EXT_depth_clip_control extension.", 461 &members, "http://anglebug.com/5421" 462 }; 463 464 FeatureInfo supportsPrimitiveTopologyListRestart = { 465 "supportsPrimitiveTopologyListRestart", 466 FeatureCategory::VulkanFeatures, 467 "VkDevice supports VK_EXT_primitive_topology_list_restart extension.", 468 &members, "http://anglebug.com/3832" 469 }; 470 471 FeatureInfo supportsBlendOperationAdvanced = { 472 "supportsBlendOperationAdvanced", 473 FeatureCategory::VulkanFeatures, 474 "VkDevice supports VK_EXT_blend_operation_advanced extension.", 475 &members, "http://anglebug.com/3586" 476 }; 477 478 FeatureInfo forceMaxUniformBufferSize16KB = { 479 "forceMaxUniformBufferSize16KB", 480 FeatureCategory::VulkanWorkarounds, 481 "Force max uniform buffer size to 16K on some device due to bug", 482 &members, "https://issuetracker.google.com/161903006" 483 }; 484 485 FeatureInfo supportsImageFormatList = { 486 "supportsImageFormatList", 487 FeatureCategory::VulkanFeatures, 488 "Enable VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT by default for ICDs " 489 "that support VK_KHR_image_format_list", 490 &members, "http://anglebug.com/5281" 491 }; 492 493 FeatureInfo allowMultisampledRenderToTextureEmulation = { 494 "allowMultisampledRenderToTextureEmulation", 495 FeatureCategory::VulkanWorkarounds, 496 "Allow emulation of EXT_multisampled_render_to_texture", 497 &members, "http://anglebug.com/8291" 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 waitIdleBeforeSwapchainRecreation = { 508 "waitIdleBeforeSwapchainRecreation", 509 FeatureCategory::VulkanWorkarounds, 510 "Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue to be idle. " 511 "Works around a bug on platforms which destroy oldSwapchain in vkCreateSwapchainKHR.", 512 &members, "http://anglebug.com/5061" 513 }; 514 515 FeatureInfo forceTextureLodOffset1 = { 516 "forceTextureLodOffset1", 517 FeatureCategory::VulkanWorkarounds, 518 "Increase the minimum texture level-of-detail by 1 when sampling.", 519 &members, 520 }; 521 522 FeatureInfo forceTextureLodOffset2 = { 523 "forceTextureLodOffset2", 524 FeatureCategory::VulkanWorkarounds, 525 "Increase the minimum texture level-of-detail by 2 when sampling.", 526 &members, 527 }; 528 529 FeatureInfo forceTextureLodOffset3 = { 530 "forceTextureLodOffset3", 531 FeatureCategory::VulkanWorkarounds, 532 "Increase the minimum texture level-of-detail by 3 when sampling.", 533 &members, 534 }; 535 536 FeatureInfo forceTextureLodOffset4 = { 537 "forceTextureLodOffset4", 538 FeatureCategory::VulkanWorkarounds, 539 "Increase the minimum texture level-of-detail by 4 when sampling.", 540 &members, 541 }; 542 543 FeatureInfo forceNearestFiltering = { 544 "forceNearestFiltering", 545 FeatureCategory::VulkanWorkarounds, 546 "Force nearest filtering when sampling.", 547 &members, 548 }; 549 550 FeatureInfo forceNearestMipFiltering = { 551 "forceNearestMipFiltering", 552 FeatureCategory::VulkanWorkarounds, 553 "Force nearest mip filtering when sampling.", 554 &members, 555 }; 556 557 FeatureInfo compressVertexData = { 558 "compressVertexData", 559 FeatureCategory::VulkanWorkarounds, 560 "Compress vertex data to smaller data types when " 561 "possible. Using this feature makes ANGLE non-conformant.", 562 &members, 563 }; 564 565 FeatureInfo preferDrawClearOverVkCmdClearAttachments = { 566 "preferDrawClearOverVkCmdClearAttachments", 567 FeatureCategory::VulkanWorkarounds, 568 "On some hardware, clear using a draw call instead of vkCmdClearAttachments in the middle " 569 "of render pass due to bugs", 570 &members, "https://issuetracker.google.com/166809097" 571 }; 572 573 FeatureInfo emulatedPrerotation90 = { 574 "emulatedPrerotation90", 575 FeatureCategory::VulkanFeatures, 576 "Emulate 90-degree prerotation.", 577 &members, "http://anglebug.com/4901" 578 }; 579 580 FeatureInfo emulatedPrerotation180 = { 581 "emulatedPrerotation180", 582 FeatureCategory::VulkanFeatures, 583 "Emulate 180-degree prerotation.", 584 &members, "http://anglebug.com/4901" 585 }; 586 587 FeatureInfo emulatedPrerotation270 = { 588 "emulatedPrerotation270", 589 FeatureCategory::VulkanFeatures, 590 "Emulate 270-degree prerotation.", 591 &members, "http://anglebug.com/4901" 592 }; 593 594 FeatureInfo preferDriverUniformOverSpecConst = { 595 "preferDriverUniformOverSpecConst", 596 FeatureCategory::VulkanFeatures, 597 "Prefer using driver uniforms instead of specialization constants.", 598 &members, "http://anglebug.com/7406" 599 }; 600 601 FeatureInfo exposeNonConformantExtensionsAndVersions = { 602 "exposeNonConformantExtensionsAndVersions", 603 FeatureCategory::VulkanWorkarounds, 604 "Expose GLES versions and extensions that are not conformant.", 605 &members, "http://anglebug.com/5375" 606 }; 607 608 FeatureInfo emulateR32fImageAtomicExchange = { 609 "emulateR32fImageAtomicExchange", 610 FeatureCategory::VulkanWorkarounds, 611 "Emulate r32f images with r32ui to support imageAtomicExchange.", 612 &members, "http://anglebug.com/5535" 613 }; 614 615 FeatureInfo forceFragmentShaderPrecisionHighpToMediump = { 616 "forceFragmentShaderPrecisionHighpToMediump", 617 FeatureCategory::VulkanWorkarounds, 618 "Forces highp precision in fragment shader to mediump.", 619 &members, "https://issuetracker.google.com/184850002" 620 }; 621 622 FeatureInfo preferSubmitAtFBOBoundary = { 623 "preferSubmitAtFBOBoundary", 624 FeatureCategory::VulkanWorkarounds, 625 "Submit commands to driver at each FBO boundary for performance improvements.", 626 &members, "https://issuetracker.google.com/187425444" 627 }; 628 629 FeatureInfo useMultipleDescriptorsForExternalFormats = { 630 "useMultipleDescriptorsForExternalFormats", 631 FeatureCategory::VulkanWorkarounds, 632 "Return a default descriptor count for external formats.", 633 &members, "http://anglebug.com/6141" 634 }; 635 636 FeatureInfo supportsProtectedMemory = { 637 "supportsProtectedMemory", 638 FeatureCategory::VulkanFeatures, 639 "VkDevice supports protected memory", 640 &members, "http://anglebug.com/3965" 641 }; 642 643 FeatureInfo supportsHostQueryReset = { 644 "supportsHostQueryReset", 645 FeatureCategory::VulkanFeatures, 646 "VkDevice supports VK_EXT_host_query_reset extension", 647 &members, "http://anglebug.com/6692" 648 }; 649 650 FeatureInfo supportsPipelineCreationFeedback = { 651 "supportsPipelineCreationFeedback", 652 FeatureCategory::VulkanFeatures, 653 "VkDevice supports VK_EXT_pipeline_creation_feedback extension", 654 &members, "http://anglebug.com/5881" 655 }; 656 657 FeatureInfo supportsPrimitivesGeneratedQuery = { 658 "supportsPrimitivesGeneratedQuery", 659 FeatureCategory::VulkanFeatures, 660 "VkDevice supports VK_EXT_primitives_generated_query extension", 661 &members, "http://anglebug.com/5430" 662 }; 663 664 FeatureInfo supportsSurfaceCapabilities2Extension = { 665 "supportsSurfaceCapabilities2Extension", 666 FeatureCategory::VulkanFeatures, 667 "VkInstance supports the VK_KHR_get_surface_capabilities2 extension", 668 &members, 669 }; 670 671 FeatureInfo supportsSurfaceProtectedCapabilitiesExtension = { 672 "supportsSurfaceProtectedCapabilitiesExtension", 673 FeatureCategory::VulkanFeatures, 674 "VkInstance supports the VK_KHR_surface_protected_capabilities extension", 675 &members, 676 }; 677 678 FeatureInfo supportsSurfacelessQueryExtension = { 679 "supportsSurfacelessQueryExtension", 680 FeatureCategory::VulkanFeatures, 681 "VkInstance supports the VK_GOOGLE_surfaceless_query extension", 682 &members, 683 }; 684 685 FeatureInfo supportsSurfaceProtectedSwapchains = { 686 "supportsSurfaceProtectedSwapchains", 687 FeatureCategory::VulkanFeatures, 688 "VkSurface supportsProtected for protected swapchains", 689 &members, 690 }; 691 692 FeatureInfo overrideSurfaceFormatRGB8ToRGBA8 = { 693 "overrideSurfaceFormatRGB8ToRGBA8", 694 FeatureCategory::VulkanWorkarounds, 695 "Override surface format GL_RGB8 to GL_RGBA8", 696 &members, "http://anglebug.com/6651" 697 }; 698 699 FeatureInfo supportsSharedPresentableImageExtension = { 700 "supportsSharedPresentableImageExtension", 701 FeatureCategory::VulkanFeatures, 702 "VkSurface supports the VK_KHR_shared_presentable_images extension", 703 &members, 704 }; 705 706 FeatureInfo supportsShaderFramebufferFetch = { 707 "supportsShaderFramebufferFetch", 708 FeatureCategory::VulkanFeatures, 709 "Whether the Vulkan backend supports coherent framebuffer fetch", 710 &members, 711 }; 712 713 FeatureInfo supportsShaderFramebufferFetchNonCoherent = { 714 "supportsShaderFramebufferFetchNonCoherent", 715 FeatureCategory::VulkanFeatures, 716 "Whether the Vulkan backend supports non-coherent framebuffer fetch", 717 &members, 718 }; 719 720 FeatureInfo permanentlySwitchToFramebufferFetchMode = { 721 "permanentlySwitchToFramebufferFetchMode", 722 FeatureCategory::VulkanFeatures, 723 "Whether the context should permanently switch to framebuffer fetch mode on first " 724 "encounter", 725 &members, 726 }; 727 728 FeatureInfo supportsLockSurfaceExtension = { 729 "supportsLockSurfaceExtension", 730 FeatureCategory::VulkanFeatures, 731 "Surface supports the EGL_KHR_lock_surface3 extension", 732 &members, 733 }; 734 735 FeatureInfo swapbuffersOnFlushOrFinishWithSingleBuffer = { 736 "swapbuffersOnFlushOrFinishWithSingleBuffer", 737 FeatureCategory::VulkanFeatures, 738 "Bypass deferredFlush with calling swapbuffers on flush or finish when in Shared " 739 "Present mode", 740 &members, "http://anglebug.com/6878" 741 }; 742 743 FeatureInfo emulateDithering = { 744 "emulateDithering", 745 FeatureCategory::VulkanFeatures, 746 "Emulate OpenGL dithering", 747 &members, "http://anglebug.com/6755" 748 }; 749 750 FeatureInfo roundOutputAfterDithering = { 751 "roundOutputAfterDithering", 752 FeatureCategory::VulkanWorkarounds, 753 "Round output after dithering to workaround a driver bug that rounds the output up", 754 &members, "http://anglebug.com/6953" 755 }; 756 757 FeatureInfo adjustClearColorPrecision = { 758 "adjustClearColorPrecision", 759 FeatureCategory::VulkanWorkarounds, 760 "Adjust normalized clear color precision based on framebuffer color channel bits count", 761 &members, "https://issuetracker.google.com/292282210" 762 }; 763 764 FeatureInfo emulateAdvancedBlendEquations = { 765 "emulateAdvancedBlendEquations", 766 FeatureCategory::VulkanFeatures, 767 "Emulate GL_KHR_blend_equation_advanced", 768 &members, "http://anglebug.com/3586" 769 }; 770 771 FeatureInfo doubleDepthBiasConstantFactor = { 772 "doubleDepthBiasConstantFactor", 773 FeatureCategory::VulkanWorkarounds, 774 "Due to a Vulkan spec ambiguity, some drivers interpret depthBiasConstantFactor as half " 775 "the expected value", 776 &members, 777 }; 778 779 FeatureInfo bottomLeftOriginPresentRegionRectangles = { 780 "bottomLeftOriginPresentRegionRectangles", 781 FeatureCategory::VulkanWorkarounds, 782 "On some platforms present region rectangles are expected to have a bottom-left origin, " 783 "instead of top-left origin as from spec", 784 &members, 785 }; 786 787 FeatureInfo forceSubmitImmutableTextureUpdates = { 788 "forceSubmitImmutableTextureUpdates", 789 FeatureCategory::VulkanAppWorkarounds, 790 "Force submit updates to immutable textures", 791 &members, "http://anglebug.com/6929" 792 }; 793 794 FeatureInfo supportsSPIRV14 = { 795 "supportsSPIRV14", 796 FeatureCategory::VulkanFeatures, 797 "VkDevice supports VK_KHR_spirv_1_4 extension", 798 &members, "http://anglebug.com/342316794" 799 }; 800 801 FeatureInfo retainSPIRVDebugInfo = { 802 "retainSPIRVDebugInfo", 803 FeatureCategory::VulkanFeatures, 804 "Retain debug info in SPIR-V blob.", 805 &members, "http://anglebug.com/5901" 806 }; 807 808 FeatureInfo warmUpPipelineCacheAtLink = { 809 "warmUpPipelineCacheAtLink", 810 FeatureCategory::VulkanFeatures, 811 "Warm up the Vulkan pipeline cache at link time", 812 &members, "http://anglebug.com/5881" 813 }; 814 815 FeatureInfo preferDeviceLocalMemoryHostVisible = { 816 "preferDeviceLocalMemoryHostVisible", 817 FeatureCategory::VulkanFeatures, 818 "Prefer adding HOST_VISIBLE flag for DEVICE_LOCAL memory when picking memory types", 819 &members, "http://anglebug.com/7047" 820 }; 821 822 FeatureInfo supportsExtendedDynamicState = { 823 "supportsExtendedDynamicState", 824 FeatureCategory::VulkanFeatures, 825 "VkDevice supports VK_EXT_extended_dynamic_state extension", 826 &members, "http://anglebug.com/5906" 827 }; 828 829 FeatureInfo useVertexInputBindingStrideDynamicState = { 830 "useVertexInputBindingStrideDynamicState", 831 FeatureCategory::VulkanWorkarounds, 832 "Use the Vertex Input Bininding Stride dynamic state from VK_EXT_extended_dynamic_state", 833 &members, "http://anglebug.com/5906" 834 }; 835 836 FeatureInfo useCullModeDynamicState = { 837 "useCullModeDynamicState", 838 FeatureCategory::VulkanWorkarounds, 839 "Use the Cull Mode dynamic state from VK_EXT_extended_dynamic_state", 840 &members, "http://anglebug.com/5906" 841 }; 842 843 FeatureInfo useFrontFaceDynamicState = { 844 "useFrontFaceDynamicState", 845 FeatureCategory::VulkanWorkarounds, 846 "Use the Front Face dynamic state from VK_EXT_extended_dynamic_state", 847 &members, "http://anglebug.com/5906" 848 }; 849 850 FeatureInfo useDepthTestEnableDynamicState = { 851 "useDepthTestEnableDynamicState", 852 FeatureCategory::VulkanWorkarounds, 853 "Use the Depth Test Enable dynamic state from VK_EXT_extended_dynamic_state", 854 &members, "http://anglebug.com/5906" 855 }; 856 857 FeatureInfo useDepthWriteEnableDynamicState = { 858 "useDepthWriteEnableDynamicState", 859 FeatureCategory::VulkanWorkarounds, 860 "Use the Depth Write Enable dynamic state from VK_EXT_extended_dynamic_state", 861 &members, "http://anglebug.com/5906" 862 }; 863 864 FeatureInfo useDepthCompareOpDynamicState = { 865 "useDepthCompareOpDynamicState", 866 FeatureCategory::VulkanWorkarounds, 867 "Use the Depth Compare Op dynamic state from VK_EXT_extended_dynamic_state", 868 &members, "http://anglebug.com/5906" 869 }; 870 871 FeatureInfo useStencilTestEnableDynamicState = { 872 "useStencilTestEnableDynamicState", 873 FeatureCategory::VulkanWorkarounds, 874 "Use the Stencil Test Enable dynamic state from VK_EXT_extended_dynamic_state", 875 &members, "http://anglebug.com/5906" 876 }; 877 878 FeatureInfo useStencilOpDynamicState = { 879 "useStencilOpDynamicState", 880 FeatureCategory::VulkanWorkarounds, 881 "Use the Stencil Op dynamic state from VK_EXT_extended_dynamic_state", 882 &members, "http://anglebug.com/5906" 883 }; 884 885 FeatureInfo supportsExtendedDynamicState2 = { 886 "supportsExtendedDynamicState2", 887 FeatureCategory::VulkanFeatures, 888 "VkDevice supports VK_EXT_extended_dynamic_state2 extension", 889 &members, "http://anglebug.com/5906" 890 }; 891 892 FeatureInfo usePrimitiveRestartEnableDynamicState = { 893 "usePrimitiveRestartEnableDynamicState", 894 FeatureCategory::VulkanWorkarounds, 895 "Use the Primitive Restart Enable dynamic state from VK_EXT_extended_dynamic_state2", 896 &members, "http://anglebug.com/5906" 897 }; 898 899 FeatureInfo useRasterizerDiscardEnableDynamicState = { 900 "useRasterizerDiscardEnableDynamicState", 901 FeatureCategory::VulkanWorkarounds, 902 "Use the Rasterizer Discard Enable dynamic state from VK_EXT_extended_dynamic_state2", 903 &members, "http://anglebug.com/5906" 904 }; 905 906 FeatureInfo useDepthBiasEnableDynamicState = { 907 "useDepthBiasEnableDynamicState", 908 FeatureCategory::VulkanWorkarounds, 909 "Use the Depth Bias Enable dynamic state from VK_EXT_extended_dynamic_state2", 910 &members, "http://anglebug.com/5906" 911 }; 912 913 FeatureInfo supportsLogicOpDynamicState = { 914 "supportsLogicOpDynamicState", 915 FeatureCategory::VulkanFeatures, 916 "VkDevice supports the logicOp feature of VK_EXT_extended_dynamic_state2 extension", 917 &members, "http://anglebug.com/3862" 918 }; 919 920 FeatureInfo supportsFragmentShadingRate = { 921 "supportsFragmentShadingRate", 922 FeatureCategory::VulkanFeatures, 923 "VkDevice supports VK_KHR_fragment_shading_rate extension", 924 &members, "http://anglebug.com/7172" 925 }; 926 927 FeatureInfo supportsFoveatedRendering = { 928 "supportsFoveatedRendering", 929 FeatureCategory::VulkanFeatures, 930 "Use VK_KHR_fragment_shading_rate extension to implement QCOM foveated rendering extensions", 931 &members, "http://anglebug.com/8484" 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 disablePipelineCacheLoadForTesting = { 1093 "disablePipelineCacheLoadForTesting", 1094 FeatureCategory::VulkanWorkarounds, 1095 "Disable loading the pipeline cache from the blob cache for testing", 1096 &members, "https://anglebug.com/8417" 1097 }; 1098 1099 FeatureInfo syncMonolithicPipelinesToBlobCache = { 1100 "syncMonolithicPipelinesToBlobCache", 1101 FeatureCategory::VulkanWorkarounds, 1102 "Whether it's beneficial to store monolithic pipelines in the blob cache when " 1103 "VK_EXT_graphics_pipeline_library is in use. Otherwise the libraries are stored " 1104 "only, and monolithic pipelines are recreated on every run", 1105 &members, "https://anglebug.com/7369" 1106 }; 1107 1108 FeatureInfo mergeProgramPipelineCachesToGlobalCache = { 1109 "mergeProgramPipelineCachesToGlobalCache", 1110 FeatureCategory::VulkanWorkarounds, 1111 "Whether it's beneficial to merge the pipeline cache for the shaders subset of the " 1112 "pipeline into the monolithic pipeline cache. Only useful on platforms where " 1113 "monolithic pipelines can reuse blobs from partial pipelines", 1114 &members, "https://anglebug.com/7369" 1115 }; 1116 1117 FeatureInfo hasEffectivePipelineCacheSerialization = { 1118 "hasEffectivePipelineCacheSerialization", 1119 FeatureCategory::VulkanFeatures, 1120 "Whether the implementation serializes the Vulkan pipeline cache effectively. " 1121 "On some implementations, pipeline cache serialization returns no data, so there " 1122 "is no benefit to serializing it", 1123 &members, "https://anglebug.com/7369" 1124 }; 1125 1126 FeatureInfo enableAsyncPipelineCacheCompression = { 1127 "enableAsyncPipelineCacheCompression", 1128 FeatureCategory::VulkanWorkarounds, 1129 "Enable compressing pipeline cache in a thread.", 1130 &members, "http://anglebug.com/4722" 1131 }; 1132 1133 FeatureInfo supportsPipelineProtectedAccess = { 1134 "supportsPipelineProtectedAccess", 1135 FeatureCategory::VulkanFeatures, 1136 "VkDevice supports the VK_EXT_pipeline_protected_access extension", 1137 &members, "https://anglebug.com/7714" 1138 }; 1139 1140 FeatureInfo supportsMixedReadWriteDepthStencilLayouts = { 1141 "supportsMixedReadWriteDepthStencilLayouts", 1142 FeatureCategory::VulkanFeatures, 1143 "VkDevice supports the mixed read and write depth/stencil layouts introduced by VK_KHR_maintenance2", 1144 &members, "https://anglebug.com/7899" 1145 }; 1146 1147 FeatureInfo supportsSurfaceMaintenance1 = { 1148 "supportsSurfaceMaintenance1", 1149 FeatureCategory::VulkanFeatures, 1150 "VkDevice supports the VK_EXT_surface_maintenance1 extension", 1151 &members, "https://anglebug.com/7847" 1152 }; 1153 1154 FeatureInfo supportsSwapchainMaintenance1 = { 1155 "supportsSwapchainMaintenance1", 1156 FeatureCategory::VulkanFeatures, 1157 "VkDevice supports the VK_EXT_surface_maintenance1 and VK_EXT_swapchain_maintenance1 extensions", 1158 &members, "https://anglebug.com/7847" 1159 }; 1160 1161 FeatureInfo supportsGetMemoryRequirements2 = { 1162 "supportsGetMemoryRequirements2", 1163 FeatureCategory::VulkanFeatures, 1164 "VkDevice supports the VK_KHR_get_memory_requirements2 extension", 1165 &members, "https://anglebug.com/4830" 1166 }; 1167 1168 FeatureInfo supportsBindMemory2 = { 1169 "supportsBindMemory2", 1170 FeatureCategory::VulkanFeatures, 1171 "VkDevice supports the VK_KHR_bind_memory2 extension", 1172 &members, "https://anglebug.com/4966" 1173 }; 1174 1175 FeatureInfo supportsSamplerMirrorClampToEdge = { 1176 "supportsSamplerMirrorClampToEdge", 1177 FeatureCategory::VulkanFeatures, 1178 "VkDevice supports the VK_KHR_sampler_mirror_clamp_to_edge extension", 1179 &members, 1180 }; 1181 1182 FeatureInfo preferSubmitOnAnySamplesPassedQueryEnd = { 1183 "preferSubmitOnAnySamplesPassedQueryEnd", 1184 FeatureCategory::VulkanWorkarounds, 1185 "Submit commands to driver when last GL_ANY_SAMPLES_PASSED query is made for performance improvements.", 1186 &members, "https://issuetracker.google.com/250706693" 1187 }; 1188 1189 FeatureInfo forceWaitForSubmissionToCompleteForQueryResult = { 1190 "forceWaitForSubmissionToCompleteForQueryResult", 1191 FeatureCategory::VulkanWorkarounds, 1192 "Force wait for submission to complete before calling getQueryResult(wait).", 1193 &members, "https://issuetracker.google.com/253522366" 1194 }; 1195 1196 FeatureInfo asyncCommandBufferReset = { 1197 "asyncCommandBufferReset", 1198 FeatureCategory::VulkanFeatures, 1199 "Reset command buffer in async thread.", 1200 &members, "https://issuetracker.google.com/255411748" 1201 }; 1202 1203 FeatureInfo useResetCommandBufferBitForSecondaryPools = { 1204 "useResetCommandBufferBitForSecondaryPools", 1205 FeatureCategory::VulkanWorkarounds, 1206 "Use VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT for initializing " 1207 "SecondaryCommandPools when using VulkanSecondaryCommandBuffer. ", 1208 &members, 1209 }; 1210 1211 FeatureInfo enablePipelineCacheDataCompression = { 1212 "enablePipelineCacheDataCompression", 1213 FeatureCategory::VulkanFeatures, 1214 "enable pipeline cache data compression.", 1215 &members, "https://issuetracker.google.com/258207403" 1216 }; 1217 1218 FeatureInfo supportsLegacyDithering = { 1219 "supportsLegacyDithering", 1220 FeatureCategory::VulkanFeatures, 1221 "VkDevice supports the VK_EXT_legacy_dithering extension", 1222 &members, "https://issuetracker.google.com/284462263" 1223 }; 1224 1225 FeatureInfo limitSampleCountTo2 = { 1226 "limitSampleCountTo2", 1227 FeatureCategory::VulkanWorkarounds, 1228 "Limit sample count to 2 to save memory on low end devices.", 1229 &members, "http://anglebug.com/8162" 1230 }; 1231 1232 FeatureInfo supportsFullScreenExclusive = { 1233 "supportsFullScreenExclusive", 1234 FeatureCategory::VulkanFeatures, 1235 "VkDevice supports the VK_EXT_full_screen_exclusive extension", 1236 &members, "http://anglebug.com/8215" 1237 }; 1238 1239 FeatureInfo forceDisableFullScreenExclusive = { 1240 "forceDisableFullScreenExclusive", 1241 FeatureCategory::VulkanWorkarounds, 1242 "Device needs VK_EXT_full_screen_exclusive explicitly disabled", 1243 &members, "http://anglebug.com/8215" 1244 }; 1245 1246 FeatureInfo supportsPortabilityEnumeration = { 1247 "supportsPortabilityEnumeration", 1248 FeatureCategory::VulkanFeatures, 1249 "Vulkan supports VK_KHR_portability_enumeration extension", 1250 &members, "http://anglebug.com/8229" 1251 }; 1252 1253 FeatureInfo enablePortabilityEnumeration = { 1254 "enablePortabilityEnumeration", 1255 FeatureCategory::VulkanWorkarounds, 1256 "Enable use of VK_KHR_portability_enumeration extension", 1257 &members, "http://anglebug.com/8229" 1258 }; 1259 1260 FeatureInfo supportsTimelineSemaphore = { 1261 "supportsTimelineSemaphore", 1262 FeatureCategory::VulkanFeatures, 1263 "VkDevice supports the VK_KHR_timeline_semaphore extension", 1264 &members, 1265 }; 1266 1267 FeatureInfo supportsFormatFeatureFlags2 = { 1268 "supportsFormatFeatureFlags2", 1269 FeatureCategory::VulkanFeatures, 1270 "VkDevice supports the VK_KHR_format_feature_flags2 extension", 1271 &members, 1272 }; 1273 1274 FeatureInfo supportsHostImageCopy = { 1275 "supportsHostImageCopy", 1276 FeatureCategory::VulkanFeatures, 1277 "VkDevice supports the VK_EXT_host_image_copy extension", 1278 &members, 1279 }; 1280 1281 FeatureInfo allowHostImageCopyDespiteNonIdenticalLayout = { 1282 "allowHostImageCopyDespiteNonIdenticalLayout", 1283 FeatureCategory::VulkanFeatures, 1284 "When using VK_EXT_host_image_copy, allow VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT even if" 1285 "perf query indicates only optimalDeviceAccess, but not identicalMemoryLayout", 1286 &members, 1287 }; 1288 1289 FeatureInfo enableParallelCompileAndLink = { 1290 "enableParallelCompileAndLink", 1291 FeatureCategory::VulkanFeatures, 1292 "Expose the GL_KHR_parallel_shader_compile extension", 1293 &members, "http://anglebug.com/8297" 1294 }; 1295 1296 FeatureInfo preferHostCachedForNonStaticBufferUsage = { 1297 "preferHostCachedForNonStaticBufferUsage", 1298 FeatureCategory::VulkanFeatures, 1299 "prefer host cached memory for non static buffer usage", 1300 &members, "https://issuetracker.google.com/288119108" 1301 }; 1302 1303 FeatureInfo supportsExternalFormatResolve = { 1304 "supportsExternalFormatResolve", 1305 FeatureCategory::VulkanFeatures, 1306 "VkDevice supports the VK_ANDROID_external_format_resolve extension", 1307 &members, 1308 }; 1309 1310 FeatureInfo disableSeparateShaderObjects = { 1311 "disableSeparateShaderObjects", 1312 FeatureCategory::VulkanAppWorkarounds, 1313 "Disable GL_EXT_separate_shader_objects and cap core ES version to 3.0", 1314 &members, "https://issuetracker.google.com/309028728" 1315 }; 1316 1317 FeatureInfo forceSampleUsageForAhbBackedImages = { 1318 "forceSampleUsageForAhbBackedImages", 1319 FeatureCategory::VulkanAppWorkarounds, 1320 "Force enable VK_IMAGE_USAGE_SAMPLED_BIT usage for all AHB images", 1321 &members, "https://issuetracker.google.com/155487768" 1322 }; 1323 1324 FeatureInfo avoidOpSelectWithMismatchingRelaxedPrecision = { 1325 "avoidOpSelectWithMismatchingRelaxedPrecision", 1326 FeatureCategory::VulkanWorkarounds, 1327 "On some drivers, the OpSelect SPIR-V instruction with arguments with mismatching " 1328 "RelaxedPrecision decoration causes a crash", 1329 &members, "http://anglebug.com/8503" 1330 }; 1331 1332 FeatureInfo disableDepthStencilResolveThroughAttachment = { 1333 "disableDepthStencilResolveThroughAttachment", 1334 FeatureCategory::VulkanWorkarounds, 1335 "On some drivers, using a depth/stencil resolve attachment results in errors", 1336 &members, "http://anglebug.com/8658" 1337 }; 1338 1339 FeatureInfo limitMaxStorageBufferSize = { 1340 "limitMaxStorageBufferSize", 1341 FeatureCategory::VulkanWorkarounds, 1342 "On some drivers, a storage buffer max size limit is exposed that is incompatible with " 1343 "older hardware", 1344 &members, "http://anglebug.com/345244067" 1345 }; 1346 1347 FeatureInfo clDumpVkSpirv = { 1348 "clDumpVkSpirv", 1349 FeatureCategory::VulkanFeatures, 1350 "Enable SPIR-V dumping at runtime for OpenCL programs compiled with clspv", 1351 &members, 1352 }; 1353 1354 FeatureInfo enableAdditionalBlendFactorsForDithering = { 1355 "enableAdditionalBlendFactorsForDithering", 1356 FeatureCategory::VulkanAppWorkarounds, 1357 "Dithering darkens or brightens pixels depending on coordinates and when repeated " 1358 "sufficient numbers of times this effect becomes visible to users. Conditionally " 1359 "enable additional blend factors for dithering", 1360 &members, "https://issuetracker.google.com/328837151" 1361 }; 1362 1363 FeatureInfo enableMergeClientAttribBuffer = { 1364 "enableMergeClientAttribBuffer", 1365 FeatureCategory::VulkanFeatures, 1366 "Enable merge for client attrib buffer if possible", 1367 &members, "https://issuetracker.google.com/328301788" 1368 }; 1369 1370 FeatureInfo supportsShaderNonSemanticInfo = { 1371 "supportsShaderNonSemanticInfo", 1372 FeatureCategory::VulkanFeatures, 1373 "Enable non-semantic info inside shader module via VK_KHR_shader_non_semantic_info extension", 1374 &members, "http://anglebug.com/8549" 1375 }; 1376 1377 FeatureInfo supports8BitStorageBuffer = { 1378 "supports8BitStorageBuffer", 1379 FeatureCategory::VulkanFeatures, 1380 "VkDevice supports the VK_KHR_8bit_storage extension and has the storageBuffer8BitAccess feature", 1381 &members, "http://anglebug.com/8676" 1382 }; 1383 1384 FeatureInfo supports8BitUniformAndStorageBuffer = { 1385 "supports8BitUniformAndStorageBuffer", 1386 FeatureCategory::VulkanFeatures, 1387 "VkDevice supports the VK_KHR_8bit_storage extension and has the uniformAndStorageBuffer8BitAccess feature", 1388 &members, "http://anglebug.com/8676" 1389 }; 1390 1391 FeatureInfo supports8BitPushConstant = { 1392 "supports8BitPushConstant", 1393 FeatureCategory::VulkanFeatures, 1394 "VkDevice supports the VK_KHR_8bit_storage extension and has the storagePushConstant8 feature", 1395 &members, "http://anglebug.com/8676" 1396 }; 1397 1398 FeatureInfo supports16BitStorageBuffer = { 1399 "supports16BitStorageBuffer", 1400 FeatureCategory::VulkanFeatures, 1401 "VkDevice supports the VK_KHR_16bit_storage extension and has the storageBuffer16BitAccess feature", 1402 &members, "http://anglebug.com/8676" 1403 }; 1404 1405 FeatureInfo supports16BitUniformAndStorageBuffer = { 1406 "supports16BitUniformAndStorageBuffer", 1407 FeatureCategory::VulkanFeatures, 1408 "VkDevice supports the VK_KHR_16bit_storage extension and has the uniformAndStorageBuffer16BitAccess feature", 1409 &members, "http://anglebug.com/8676" 1410 }; 1411 1412 FeatureInfo supports16BitPushConstant = { 1413 "supports16BitPushConstant", 1414 FeatureCategory::VulkanFeatures, 1415 "VkDevice supports the VK_KHR_16bit_storage extension and has the storagePushConstant16 feature", 1416 &members, "http://anglebug.com/8676" 1417 }; 1418 1419 FeatureInfo supports16BitInputOutput = { 1420 "supports16BitInputOutput", 1421 FeatureCategory::VulkanFeatures, 1422 "VkDevice supports the VK_KHR_16bit_storage extension and has the storageInputOutput16 feature", 1423 &members, "http://anglebug.com/8676" 1424 }; 1425 1426 FeatureInfo useVkEventForImageBarrier = { 1427 "useVkEventForImageBarrier", 1428 FeatureCategory::VulkanFeatures, 1429 "Uses VkEvent instead of VkCmdPipelineBarrier for image barriers", 1430 &members, "https://issuetracker.google.com/336844257" 1431 }; 1432 1433 FeatureInfo supportsSynchronization2 = { 1434 "supportsSynchronization2", 1435 FeatureCategory::VulkanFeatures, 1436 "VkDevice supports VK_KHR_synchronization2 extension", 1437 &members, "https://issuetracker.google.com/336844257" 1438 }; 1439 1440 FeatureInfo supportsDynamicRendering = { 1441 "supportsDynamicRendering", 1442 FeatureCategory::VulkanFeatures, 1443 "VkDevice supports VK_KHR_dynamic_rendering extension", 1444 &members, "http://anglebug.com/42267038" 1445 }; 1446 1447 FeatureInfo supportsDynamicRenderingLocalRead = { 1448 "supportsDynamicRenderingLocalRead", 1449 FeatureCategory::VulkanFeatures, 1450 "VkDevice supports VK_KHR_dynamic_rendering_local_read extension", 1451 &members, "http://anglebug.com/42267038" 1452 }; 1453 1454 FeatureInfo preferDynamicRendering = { 1455 "preferDynamicRendering", 1456 FeatureCategory::VulkanFeatures, 1457 "Whether dynamic rendering should be used instead of render pass objects", 1458 &members, "http://anglebug.com/42267038" 1459 }; 1460 1461 }; 1462 1463 inline FeaturesVk::FeaturesVk() = default; 1464 inline FeaturesVk::~FeaturesVk() = default; 1465 1466 } // namespace angle 1467 1468 #endif // ANGLE_PLATFORM_AUTOGEN_FEATURESVK_H_ 1469