705 lines
30 KiB
C++
705 lines
30 KiB
C++
// GENERATED FILE - DO NOT EDIT.
|
|
// Generated by gen_features.py using data from vk_features.json.
|
|
//
|
|
// Copyright 2022 The ANGLE Project Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// FeaturesVk_autogen.h: Optional features for the Vulkan renderer.
|
|
|
|
#ifndef ANGLE_PLATFORM_FEATURESVK_H_
|
|
#define ANGLE_PLATFORM_FEATURESVK_H_
|
|
|
|
#include "platform/Feature.h"
|
|
|
|
namespace angle
|
|
{
|
|
|
|
struct FeaturesVk : FeatureSetBase
|
|
{
|
|
FeaturesVk();
|
|
~FeaturesVk();
|
|
|
|
FeatureInfo bresenhamLineRasterization = {
|
|
"bresenhamLineRasterization",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Enable Bresenham line rasterization via VK_EXT_line_rasterization extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo provokingVertex = {
|
|
"provokingVertex",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Enable provoking vertex mode via VK_EXT_provoking_vertex extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo forceFallbackFormat = {
|
|
"forceFallbackFormat",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Force a fallback format for angle_end2end_tests",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo clampPointSize = {
|
|
"clampPointSize", FeatureCategory::VulkanWorkarounds,
|
|
"The point size range reported from the API is inconsistent with the actual behavior",
|
|
&members, "http://anglebug.com/2970"};
|
|
|
|
FeatureInfo depthClamping = {
|
|
"depthClamping", FeatureCategory::VulkanWorkarounds,
|
|
"The depth value is not clamped to [0,1] for floating point depth buffers.", &members,
|
|
"http://anglebug.com/3970"};
|
|
|
|
FeatureInfo mutableMipmapTextureUpload = {
|
|
"mutableMipmapTextureUpload", FeatureCategory::VulkanFeatures,
|
|
"Enable uploading the previously defined mutable mipmap texture.", &members,
|
|
"https://anglebug.com/7308"};
|
|
|
|
FeatureInfo supportsRenderpass2 = {
|
|
"supportsRenderpass2",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_create_renderpass2 extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsIncrementalPresent = {
|
|
"supportsIncrementalPresent",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_incremental_present extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsAndroidHardwareBuffer = {
|
|
"supportsAndroidHardwareBuffer",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsGGPFrameToken = {
|
|
"supportsGGPFrameToken",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_GGP_frame_token extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsExternalMemoryFd = {
|
|
"supportsExternalMemoryFd",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_external_memory_fd extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsExternalMemoryFuchsia = {
|
|
"supportsExternalMemoryFuchsia",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_FUCHSIA_external_memory extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsFilteringPrecision = {
|
|
"supportsFilteringPrecision",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsExternalFenceCapabilities = {
|
|
"supportsExternalFenceCapabilities",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkInstance supports the VK_KHR_external_fence_capabilities extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsExternalSemaphoreCapabilities = {
|
|
"supportsExternalSemaphoreCapabilities",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkInstance supports the VK_KHR_external_semaphore_capabilities extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsExternalSemaphoreFd = {
|
|
"supportsExternalSemaphoreFd",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_external_semaphore_fd extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsExternalSemaphoreFuchsia = {
|
|
"supportsExternalSemaphoreFuchsia",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_FUCHSIA_external_semaphore extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsExternalFenceFd = {
|
|
"supportsExternalFenceFd", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_external_fence_fd extension", &members,
|
|
"http://anglebug.com/2517"};
|
|
|
|
FeatureInfo supportsAndroidNativeFenceSync = {
|
|
"supportsAndroidNativeFenceSync", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the EGL_ANDROID_native_fence_sync extension", &members,
|
|
"http://anglebug.com/2517"};
|
|
|
|
FeatureInfo supportsImageCubeArray = {"supportsImageCubeArray", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the imageCubeArray feature properly",
|
|
&members, "http://anglebug.com/3584"};
|
|
|
|
FeatureInfo supportsPipelineStatisticsQuery = {
|
|
"supportsPipelineStatisticsQuery", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the pipelineStatisticsQuery feature", &members,
|
|
"http://anglebug.com/5430"};
|
|
|
|
FeatureInfo supportsShaderStencilExport = {
|
|
"supportsShaderStencilExport",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_EXT_shader_stencil_export extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsYUVSamplerConversion = {
|
|
"supportsYUVSamplerConversion",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo emulateTransformFeedback = {
|
|
"emulateTransformFeedback", FeatureCategory::VulkanFeatures,
|
|
"Emulate transform feedback as the VK_EXT_transform_feedback is not present.", &members,
|
|
"http://anglebug.com/3205"};
|
|
|
|
FeatureInfo supportsTransformFeedbackExtension = {
|
|
"supportsTransformFeedbackExtension", FeatureCategory::VulkanFeatures,
|
|
"Transform feedback uses the VK_EXT_transform_feedback extension.", &members,
|
|
"http://anglebug.com/3206"};
|
|
|
|
FeatureInfo supportsGeometryStreamsCapability = {
|
|
"supportsGeometryStreamsCapability", FeatureCategory::VulkanFeatures,
|
|
"Implementation supports the GeometryStreams SPIR-V capability.", &members,
|
|
"http://anglebug.com/3206"};
|
|
|
|
FeatureInfo supportsIndexTypeUint8 = {"supportsIndexTypeUint8", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_EXT_index_type_uint8 extension",
|
|
&members, "http://anglebug.com/4405"};
|
|
|
|
FeatureInfo supportsCustomBorderColor = {
|
|
"supportsCustomBorderColor", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_EXT_custom_border_color extension", &members,
|
|
"http://anglebug.com/3577"};
|
|
|
|
FeatureInfo supportsMultiDrawIndirect = {
|
|
"supportsMultiDrawIndirect", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the multiDrawIndirect extension", &members, "http://anglebug.com/6439"};
|
|
|
|
FeatureInfo supportsDepthStencilResolve = {"supportsDepthStencilResolve",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_depth_stencil_resolve "
|
|
"extension with the independentResolveNone feature",
|
|
&members, "http://anglebug.com/4836"};
|
|
|
|
FeatureInfo supportsMultisampledRenderToSingleSampled = {
|
|
"supportsMultisampledRenderToSingleSampled", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_EXT_multisampled_render_to_single_sampled extension", &members,
|
|
"http://anglebug.com/4836"};
|
|
|
|
FeatureInfo supportsMultiview = {"supportsMultiview", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_multiview extension", &members,
|
|
"http://anglebug.com/6048"};
|
|
|
|
FeatureInfo disableFifoPresentMode = {
|
|
"disableFifoPresentMode", FeatureCategory::VulkanWorkarounds,
|
|
"VK_PRESENT_MODE_FIFO_KHR causes random timeouts", &members, "http://anglebug.com/3153"};
|
|
|
|
FeatureInfo forceD16TexFilter = {
|
|
"forceD16TexFilter", FeatureCategory::VulkanWorkarounds,
|
|
"VK_FORMAT_D16_UNORM does not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, "
|
|
"which prevents OES_depth_texture from being supported.",
|
|
&members, "http://anglebug.com/3452"};
|
|
|
|
FeatureInfo disableFlippingBlitWithCommand = {
|
|
"disableFlippingBlitWithCommand", FeatureCategory::VulkanWorkarounds,
|
|
"vkCmdBlitImage with flipped coordinates blits incorrectly.", &members,
|
|
"http://anglebug.com/3498"};
|
|
|
|
FeatureInfo perFrameWindowSizeQuery = {
|
|
"perFrameWindowSizeQuery", FeatureCategory::VulkanWorkarounds,
|
|
"Vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE when window resizing", &members,
|
|
"http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625"};
|
|
|
|
FeatureInfo padBuffersToMaxVertexAttribStride = {
|
|
"padBuffersToMaxVertexAttribStride", FeatureCategory::VulkanWorkarounds,
|
|
"Vulkan considers vertex attribute accesses to count up to the last multiple of the "
|
|
"stride. This additional access supports AMD's robust buffer access implementation. "
|
|
"AMDVLK in particular will return incorrect values when the vertex access extends into "
|
|
"the range that would be the stride padding and the buffer is too small. "
|
|
"This workaround limits GL_MAX_VERTEX_ATTRIB_STRIDE to a maximum value and "
|
|
"pads up every buffer allocation size to be a multiple of the maximum stride.",
|
|
&members, "http://anglebug.com/4428"};
|
|
|
|
FeatureInfo supportsExternalMemoryDmaBufAndModifiers = {
|
|
"supportsExternalMemoryDmaBufAndModifiers", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_EXT_external_memory_dma_buf and VK_EXT_image_drm_format_modifier "
|
|
"extensions",
|
|
&members, "http://anglebug.com/6248"};
|
|
|
|
FeatureInfo supportsExternalMemoryHost = {
|
|
"supportsExternalMemoryHost",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_EXT_external_memory_host extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo allocateNonZeroMemory = {
|
|
"allocateNonZeroMemory", FeatureCategory::VulkanFeatures,
|
|
"Fill new allocations with non-zero values to flush out errors.", &members,
|
|
"http://anglebug.com/4384"};
|
|
|
|
FeatureInfo logMemoryReportCallbacks = {
|
|
"logMemoryReportCallbacks",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Log each callback from VK_EXT_device_memory_report",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo logMemoryReportStats = {
|
|
"logMemoryReportStats",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Log stats from VK_EXT_device_memory_report each swap",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo shadowBuffers = {
|
|
"shadowBuffers", FeatureCategory::VulkanFeatures,
|
|
"Allocate a shadow buffer for GL buffer objects to reduce glMap* latency.", &members,
|
|
"http://anglebug.com/4339"};
|
|
|
|
FeatureInfo preferCPUForBufferSubData = {
|
|
"preferCPUForBufferSubData", FeatureCategory::VulkanFeatures,
|
|
"Prefer use CPU to do bufferSubData instead of staged update.", &members,
|
|
"http://issuetracker.google.com/200067929"};
|
|
|
|
FeatureInfo persistentlyMappedBuffers = {
|
|
"persistentlyMappedBuffers", FeatureCategory::VulkanFeatures,
|
|
"Persistently map buffer memory to reduce map/unmap IOCTL overhead.", &members,
|
|
"http://anglebug.com/2162"};
|
|
|
|
FeatureInfo extraBufferLoggingAndChecking = {
|
|
"extraBufferLoggingAndChecking", FeatureCategory::VulkanFeatures,
|
|
"Enable extra buffer logging and checking to catch rare crashes", &members,
|
|
"https://issuetracker.google.com/236098131"};
|
|
|
|
FeatureInfo enablePreRotateSurfaces = {"enablePreRotateSurfaces",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Enable Android pre-rotation for landscape applications",
|
|
&members, "http://anglebug.com/3502"};
|
|
|
|
FeatureInfo enablePrecisionQualifiers = {
|
|
"enablePrecisionQualifiers", FeatureCategory::VulkanFeatures,
|
|
"Enable precision qualifiers in shaders", &members, "http://anglebug.com/3078"};
|
|
|
|
FeatureInfo preferAggregateBarrierCalls = {
|
|
"preferAggregateBarrierCalls", FeatureCategory::VulkanWorkarounds,
|
|
"Single barrier call is preferred over multiple calls with "
|
|
"fine grained pipeline stage dependency information",
|
|
&members, "http://anglebug.com/4633"};
|
|
|
|
FeatureInfo preferSkippingInvalidateForEmulatedFormats = {
|
|
"preferSkippingInvalidateForEmulatedFormats", FeatureCategory::VulkanWorkarounds,
|
|
"Skipping invalidate is preferred for emulated formats that have extra channels over "
|
|
"re-clearing the image",
|
|
&members, "http://anglebug.com/6860"};
|
|
|
|
FeatureInfo asyncCommandQueue = {"asyncCommandQueue", FeatureCategory::VulkanFeatures,
|
|
"Use CommandQueue worker thread to dispatch work to GPU.",
|
|
&members, "http://anglebug.com/4324"};
|
|
|
|
FeatureInfo supportsShaderFloat16 = {
|
|
"supportsShaderFloat16", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_KHR_shader_float16_int8 extension "
|
|
"and has the shaderFloat16 feature",
|
|
&members, "http://anglebug.com/4551"};
|
|
|
|
FeatureInfo allowGenerateMipmapWithCompute = {
|
|
"allowGenerateMipmapWithCompute", FeatureCategory::VulkanFeatures,
|
|
"Use the compute path to generate mipmaps on devices that meet the minimum requirements, "
|
|
"and the performance is better.",
|
|
&members, "http://anglebug.com/4551"};
|
|
|
|
FeatureInfo supportsRenderPassStoreOpNone = {
|
|
"supportsRenderPassStoreOpNone", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_QCOM_render_pass_store_ops extension.", &members,
|
|
"http://anglebug.com/5055"};
|
|
|
|
FeatureInfo supportsRenderPassLoadStoreOpNone = {
|
|
"supportsRenderPassLoadStoreOpNone", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_load_store_op_none extension.", &members,
|
|
"http://anglebug.com/5371"};
|
|
|
|
FeatureInfo disallowMixedDepthStencilLoadOpNoneAndLoad = {
|
|
"disallowMixedDepthStencilLoadOpNoneAndLoad", FeatureCategory::VulkanWorkarounds,
|
|
"Disallow use of LOAD_OP_NONE for only one of the depth or stencil aspects of a "
|
|
"depth/stencil attachment",
|
|
&members, "http://anglebug.com/7370"};
|
|
|
|
FeatureInfo supportsDepthClipControl = {
|
|
"supportsDepthClipControl", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_depth_clip_control extension.", &members,
|
|
"http://anglebug.com/5421"};
|
|
|
|
FeatureInfo supportsBlendOperationAdvanced = {
|
|
"supportsBlendOperationAdvanced", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_blend_operation_advanced extension.", &members,
|
|
"http://anglebug.com/3586"};
|
|
|
|
FeatureInfo forceMaxUniformBufferSize16KB = {
|
|
"forceMaxUniformBufferSize16KB", FeatureCategory::VulkanWorkarounds,
|
|
"Force max uniform buffer size to 16K on some device due to bug", &members,
|
|
"https://issuetracker.google.com/161903006"};
|
|
|
|
FeatureInfo supportsImageFormatList = {
|
|
"supportsImageFormatList", FeatureCategory::VulkanFeatures,
|
|
"Enable VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT by default for ICDs "
|
|
"that support VK_KHR_image_format_list",
|
|
&members, "http://anglebug.com/5281"};
|
|
|
|
FeatureInfo enableMultisampledRenderToTexture = {
|
|
"enableMultisampledRenderToTexture", FeatureCategory::VulkanWorkarounds,
|
|
"Expose EXT_multisampled_render_to_texture", &members, "http://anglebug.com/4937"};
|
|
|
|
FeatureInfo deferFlushUntilEndRenderPass = {
|
|
"deferFlushUntilEndRenderPass", FeatureCategory::VulkanWorkarounds,
|
|
"Allow glFlush to be deferred until renderpass ends", &members,
|
|
"https://issuetracker.google.com/issues/166475273"};
|
|
|
|
FeatureInfo waitIdleBeforeSwapchainRecreation = {
|
|
"waitIdleBeforeSwapchainRecreation", FeatureCategory::VulkanWorkarounds,
|
|
"Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue to be idle. "
|
|
"Works around a bug on platforms which destroy oldSwapchain in vkCreateSwapchainKHR.",
|
|
&members, "http://anglebug.com/5061"};
|
|
|
|
FeatureInfo forceTextureLodOffset1 = {
|
|
"forceTextureLodOffset1",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Increase the minimum texture level-of-detail by 1 when sampling.",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo forceTextureLodOffset2 = {
|
|
"forceTextureLodOffset2",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Increase the minimum texture level-of-detail by 2 when sampling.",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo forceTextureLodOffset3 = {
|
|
"forceTextureLodOffset3",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Increase the minimum texture level-of-detail by 3 when sampling.",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo forceTextureLodOffset4 = {
|
|
"forceTextureLodOffset4",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Increase the minimum texture level-of-detail by 4 when sampling.",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo forceNearestFiltering = {
|
|
"forceNearestFiltering",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Force nearest filtering when sampling.",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo forceNearestMipFiltering = {
|
|
"forceNearestMipFiltering",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Force nearest mip filtering when sampling.",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo compressVertexData = {
|
|
"compressVertexData",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Compress vertex data to smaller data types when "
|
|
"possible. Using this feature makes ANGLE non-conformant.",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo preferDrawClearOverVkCmdClearAttachments = {
|
|
"preferDrawClearOverVkCmdClearAttachments", FeatureCategory::VulkanWorkarounds,
|
|
"On some hardware, clear using a draw call instead of vkCmdClearAttachments in the middle "
|
|
"of render pass due to bugs",
|
|
&members, "https://issuetracker.google.com/166809097"};
|
|
|
|
FeatureInfo emulatedPrerotation90 = {"emulatedPrerotation90", FeatureCategory::VulkanFeatures,
|
|
"Emulate 90-degree prerotation.", &members,
|
|
"http://anglebug.com/4901"};
|
|
|
|
FeatureInfo emulatedPrerotation180 = {"emulatedPrerotation180", FeatureCategory::VulkanFeatures,
|
|
"Emulate 180-degree prerotation.", &members,
|
|
"http://anglebug.com/4901"};
|
|
|
|
FeatureInfo emulatedPrerotation270 = {"emulatedPrerotation270", FeatureCategory::VulkanFeatures,
|
|
"Emulate 270-degree prerotation.", &members,
|
|
"http://anglebug.com/4901"};
|
|
|
|
FeatureInfo generateSPIRVThroughGlslang = {
|
|
"generateSPIRVThroughGlslang", FeatureCategory::VulkanFeatures,
|
|
"Translate SPIR-V through glslang.", &members, "http://anglebug.com/4889"};
|
|
|
|
FeatureInfo preferDriverUniformOverSpecConst = {
|
|
"preferDriverUniformOverSpecConst", FeatureCategory::VulkanFeatures,
|
|
"Prefer using driver uniforms instead of specialization constants.", &members,
|
|
"http://anglebug.com/7406"};
|
|
|
|
FeatureInfo exposeNonConformantExtensionsAndVersions = {
|
|
"exposeNonConformantExtensionsAndVersions", FeatureCategory::VulkanWorkarounds,
|
|
"Expose GLES versions and extensions that are not conformant.", &members,
|
|
"http://anglebug.com/5375"};
|
|
|
|
FeatureInfo emulateR32fImageAtomicExchange = {
|
|
"emulateR32fImageAtomicExchange", FeatureCategory::VulkanWorkarounds,
|
|
"Emulate r32f images with r32ui to support imageAtomicExchange.", &members,
|
|
"http://anglebug.com/5535"};
|
|
|
|
FeatureInfo supportsNegativeViewport = {
|
|
"supportsNegativeViewport",
|
|
FeatureCategory::VulkanFeatures,
|
|
"The driver supports inverting the viewport with a negative height.",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo forceFragmentShaderPrecisionHighpToMediump = {
|
|
"forceFragmentShaderPrecisionHighpToMediump", FeatureCategory::VulkanWorkarounds,
|
|
"Forces highp precision in fragment shader to mediump.", &members,
|
|
"https://issuetracker.google.com/184850002"};
|
|
|
|
FeatureInfo preferSubmitAtFBOBoundary = {
|
|
"preferSubmitAtFBOBoundary", FeatureCategory::VulkanWorkarounds,
|
|
"Submit commands to driver at each FBO boundary for performance improvements.", &members,
|
|
"https://issuetracker.google.com/187425444"};
|
|
|
|
FeatureInfo useMultipleDescriptorsForExternalFormats = {
|
|
"useMultipleDescriptorsForExternalFormats", FeatureCategory::VulkanWorkarounds,
|
|
"Return a default descriptor count for external formats.", &members,
|
|
"http://anglebug.com/6141"};
|
|
|
|
FeatureInfo supportsProtectedMemory = {
|
|
"supportsProtectedMemory", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports protected memory", &members, "http://anglebug.com/3965"};
|
|
|
|
FeatureInfo supportsHostQueryReset = {"supportsHostQueryReset", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_host_query_reset extension",
|
|
&members, "http://anglebug.com/6692"};
|
|
|
|
FeatureInfo supportsPipelineCreationCacheControl = {
|
|
"supportsPipelineCreationCacheControl", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_pipeline_creation_cache_control extension", &members,
|
|
"http://anglebug.com/5881"};
|
|
|
|
FeatureInfo supportsPipelineCreationFeedback = {
|
|
"supportsPipelineCreationFeedback", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_pipeline_creation_feedback extension", &members,
|
|
"http://anglebug.com/5881"};
|
|
|
|
FeatureInfo supportsPrimitivesGeneratedQuery = {
|
|
"supportsPrimitivesGeneratedQuery", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_primitives_generated_query extension", &members,
|
|
"http://anglebug.com/5430"};
|
|
|
|
FeatureInfo supportsSurfaceCapabilities2Extension = {
|
|
"supportsSurfaceCapabilities2Extension",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkInstance supports the VK_KHR_get_surface_capabilities2 extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsSurfaceProtectedCapabilitiesExtension = {
|
|
"supportsSurfaceProtectedCapabilitiesExtension",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkInstance supports the VK_KHR_surface_protected_capabilities extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsSurfacelessQueryExtension = {
|
|
"supportsSurfacelessQueryExtension",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkInstance supports the VK_GOOGLE_surfaceless_query extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsSurfaceProtectedSwapchains = {
|
|
"supportsSurfaceProtectedSwapchains",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkSurface supportsProtected for protected swapchains",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo overrideSurfaceFormatRGB8ToRGBA8 = {
|
|
"overrideSurfaceFormatRGB8ToRGBA8", FeatureCategory::VulkanWorkarounds,
|
|
"Override surface format GL_RGB8 to GL_RGBA8", &members, "http://anglebug.com/6651"};
|
|
|
|
FeatureInfo supportsSharedPresentableImageExtension = {
|
|
"supportsSharedPresentableImageExtension",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkSurface supports the VK_KHR_shared_presentable_images extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsShaderFramebufferFetch = {
|
|
"supportsShaderFramebufferFetch",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Whether the Vulkan backend supports coherent framebuffer fetch",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsShaderFramebufferFetchNonCoherent = {
|
|
"supportsShaderFramebufferFetchNonCoherent",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Whether the Vulkan backend supports non-coherent framebuffer fetch",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo permanentlySwitchToFramebufferFetchMode = {
|
|
"permanentlySwitchToFramebufferFetchMode",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Whether the context should permanently switch to framebuffer fetch mode on first"
|
|
"encounter",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsLockSurfaceExtension = {
|
|
"supportsLockSurfaceExtension",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Surface supports the EGL_KHR_lock_surface3 extension",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo swapbuffersOnFlushOrFinishWithSingleBuffer = {
|
|
"swapbuffersOnFlushOrFinishWithSingleBuffer", FeatureCategory::VulkanFeatures,
|
|
"Bypass deferredFlush with calling swapbuffers on flush or finish when in Shared "
|
|
"Present mode",
|
|
&members, "http://anglebug.com/6878"};
|
|
|
|
FeatureInfo emulateDithering = {"emulateDithering", FeatureCategory::VulkanFeatures,
|
|
"Emulate OpenGL dithering", &members,
|
|
"http://anglebug.com/6755"};
|
|
|
|
FeatureInfo roundOutputAfterDithering = {
|
|
"roundOutputAfterDithering", FeatureCategory::VulkanWorkarounds,
|
|
"Round output after dithering to workaround a driver bug that rounds the output up",
|
|
&members, "http://anglebug.com/6953"};
|
|
|
|
FeatureInfo emulateAdvancedBlendEquations = {
|
|
"emulateAdvancedBlendEquations", FeatureCategory::VulkanFeatures,
|
|
"Emulate GL_KHR_blend_equation_advanced", &members, "http://anglebug.com/3586"};
|
|
|
|
FeatureInfo precisionSafeDivision = {
|
|
"precisionSafeDivision",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"Special case handling for platforms that do not generate 1.0f even when the dividend and"
|
|
"divisor have the same value",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo bottomLeftOriginPresentRegionRectangles = {
|
|
"bottomLeftOriginPresentRegionRectangles",
|
|
FeatureCategory::VulkanWorkarounds,
|
|
"On some platforms present region rectangles are expected to have a bottom-left origin, "
|
|
"instead of top-left origin as from spec",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo forceSubmitImmutableTextureUpdates = {
|
|
"forceSubmitImmutableTextureUpdates", FeatureCategory::VulkanAppWorkarounds,
|
|
"Force submit updates to immutable textures", &members, "http://anglebug.com/6929"};
|
|
|
|
FeatureInfo retainSPIRVDebugInfo = {"retainSPIRVDebugInfo", FeatureCategory::VulkanFeatures,
|
|
"Retain debug info in SPIR-V blob.", &members,
|
|
"http://anglebug.com/5901"};
|
|
|
|
FeatureInfo warmUpPipelineCacheAtLink = {
|
|
"warmUpPipelineCacheAtLink", FeatureCategory::VulkanFeatures,
|
|
"Warm up the Vulkan pipeline cache at link time", &members, "http://anglebug.com/5881"};
|
|
|
|
FeatureInfo preferDeviceLocalMemoryHostVisible = {
|
|
"preferDeviceLocalMemoryHostVisible", FeatureCategory::VulkanFeatures,
|
|
"Prefer adding HOST_VISIBLE flag for DEVICE_LOCAL memory when picking memory types",
|
|
&members, "http://anglebug.com/7047"};
|
|
|
|
FeatureInfo supportsExtendedDynamicState = {
|
|
"supportsExtendedDynamicState", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_extended_dynamic_state extension", &members,
|
|
"http://anglebug.com/5906"};
|
|
|
|
FeatureInfo supportsExtendedDynamicState2 = {
|
|
"supportsExtendedDynamicState2", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_extended_dynamic_state2 extension", &members,
|
|
"http://anglebug.com/5906"};
|
|
|
|
FeatureInfo supportsFragmentShadingRate = {
|
|
"supportsFragmentShadingRate", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_KHR_fragment_shading_rate extension", &members,
|
|
"http://anglebug.com/7172"};
|
|
|
|
FeatureInfo supportsFragmentShaderPixelInterlock = {
|
|
"supportsFragmentShaderPixelInterlock",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports the VK_EXT_fragment_shader_interlock extension "
|
|
"and has the fragmentShaderPixelInterlock feature",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo explicitlyEnablePerSampleShading = {
|
|
"explicitlyEnablePerSampleShading", FeatureCategory::VulkanWorkarounds,
|
|
"Explicitly enable per-sample shading if the fragment shader contains the "
|
|
"sample qualifier",
|
|
&members, "http://anglebug.com/6876"};
|
|
|
|
FeatureInfo forceContinuousRefreshOnSharedPresent = {
|
|
"forceContinuousRefreshOnSharedPresent", FeatureCategory::VulkanFeatures,
|
|
"Force to create vulkan swapchain with continuous refresh on shared present", &members,
|
|
"https://issuetracker.google.com/229267970"};
|
|
|
|
FeatureInfo supportsImage2dViewOf3d = {
|
|
"supportsImage2dViewOf3d", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_EXT_image_2d_view_of_3d", &members, "https://anglebug.com/7320"};
|
|
|
|
FeatureInfo supportsImagelessFramebuffer = {
|
|
"supportsImagelessFramebuffer", FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_KHR_imageless_framebuffer extension", &members,
|
|
"http://anglebug.com/7553"};
|
|
|
|
FeatureInfo preferLinearFilterForYUV = {
|
|
"preferLinearFilterForYUV",
|
|
FeatureCategory::VulkanFeatures,
|
|
"Prefer to use VK_FILTER_LINEAR for VkSamplerYcbcrConversion",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo supportsYuvTarget = {
|
|
"supportsYuvTarget",
|
|
FeatureCategory::VulkanFeatures,
|
|
"VkDevice supports VK_ANDROID_render_to_external_format and VK_EXT_ycbcr_attachment",
|
|
&members,
|
|
};
|
|
|
|
FeatureInfo useNonZeroStencilWriteMaskStaticState = {
|
|
"useNonZeroStencilWriteMaskStaticState", FeatureCategory::VulkanWorkarounds,
|
|
"Work around a driver bug where 0 in stencil write mask static state would make the"
|
|
"corresponding dynamic state malfunction in the presence of discard or alpha to coverage",
|
|
&members, "http://anglebug.com/7556"};
|
|
};
|
|
|
|
inline FeaturesVk::FeaturesVk() = default;
|
|
inline FeaturesVk::~FeaturesVk() = default;
|
|
|
|
} // namespace angle
|
|
|
|
#endif // ANGLE_PLATFORM_FEATURESVK_H_
|