Commit 2e74c452 by Jamie Madill Committed by Commit Bot

Vulkan: Make feature names consistent.

This gives the features the exact same name as the member variable. It fixes a bunch of inconsistencies between the variable name and the external string identifier. Ideally these could be auto-generated from JSON. Bug: b/172704839 Change-Id: Id75c01db544672234435c3dd727c927027b9236d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2524541Reviewed-by: 's avatarCourtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 3806696c
...@@ -26,7 +26,7 @@ struct FeaturesVk : FeatureSetBase ...@@ -26,7 +26,7 @@ struct FeaturesVk : FeatureSetBase
// shader patching to implement OpenGL basic line rasterization rules. This feature will // shader patching to implement OpenGL basic line rasterization rules. This feature will
// normally always be enabled. Exposing it as an option enables performance testing. // normally always be enabled. Exposing it as an option enables performance testing.
Feature basicGLLineRasterization = { Feature basicGLLineRasterization = {
"basic_gl_line_rasterization", FeatureCategory::VulkanFeatures, "basicGLLineRasterization", FeatureCategory::VulkanFeatures,
"Enable the use of pixel shader patching to implement OpenGL basic line " "Enable the use of pixel shader patching to implement OpenGL basic line "
"rasterization rules", "rasterization rules",
&members}; &members};
...@@ -34,33 +34,33 @@ struct FeaturesVk : FeatureSetBase ...@@ -34,33 +34,33 @@ struct FeaturesVk : FeatureSetBase
// If the VK_EXT_line_rasterization extension is available we'll use it to get // If the VK_EXT_line_rasterization extension is available we'll use it to get
// Bresenham line rasterization. // Bresenham line rasterization.
Feature bresenhamLineRasterization = { Feature bresenhamLineRasterization = {
"bresenham_line_rasterization", FeatureCategory::VulkanFeatures, "bresenhamLineRasterization", FeatureCategory::VulkanFeatures,
"Enable Bresenham line rasterization via VK_EXT_line_rasterization extension", &members}; "Enable Bresenham line rasterization via VK_EXT_line_rasterization extension", &members};
// If the VK_EXT_provoking_vertex extension is available, we'll use it to set // If the VK_EXT_provoking_vertex extension is available, we'll use it to set
// the provoking vertex mode // the provoking vertex mode
Feature provokingVertex = {"provoking_vertex", FeatureCategory::VulkanFeatures, Feature provokingVertex = {"provokingVertex", FeatureCategory::VulkanFeatures,
"Enable provoking vertex mode via VK_EXT_provoking_vertex extension", "Enable provoking vertex mode via VK_EXT_provoking_vertex extension",
&members}; &members};
// Add an extra copy region when using vkCmdCopyBuffer as the Windows Intel driver seems // Add an extra copy region when using vkCmdCopyBuffer as the Windows Intel driver seems
// to have a bug where the last region is ignored. // to have a bug where the last region is ignored.
Feature extraCopyBufferRegion = { Feature extraCopyBufferRegion = {
"extra_copy_buffer_region", FeatureCategory::VulkanWorkarounds, "extraCopyBufferRegion", FeatureCategory::VulkanWorkarounds,
"Some drivers seem to have a bug where the last copy region in vkCmdCopyBuffer is ignored", "Some drivers seem to have a bug where the last copy region in vkCmdCopyBuffer is ignored",
&members}; &members};
// This flag is added for the sole purpose of end2end tests, to test the correctness // This flag is added for the sole purpose of end2end tests, to test the correctness
// of various algorithms when a fallback format is used, such as using a packed format to // of various algorithms when a fallback format is used, such as using a packed format to
// emulate a depth- or stencil-only format. // emulate a depth- or stencil-only format.
Feature forceFallbackFormat = {"force_fallback_format", FeatureCategory::VulkanWorkarounds, Feature forceFallbackFormat = {"forceFallbackFormat", FeatureCategory::VulkanWorkarounds,
"Force a fallback format for angle_end2end_tests", &members}; "Force a fallback format for angle_end2end_tests", &members};
// On some NVIDIA drivers the point size range reported from the API is inconsistent with the // On some NVIDIA drivers the point size range reported from the API is inconsistent with the
// actual behavior. Clamp the point size to the value from the API to fix this. // actual behavior. Clamp the point size to the value from the API to fix this.
// Tracked in http://anglebug.com/2970. // Tracked in http://anglebug.com/2970.
Feature clampPointSize = { Feature clampPointSize = {
"clamp_point_size", FeatureCategory::VulkanWorkarounds, "clampPointSize", FeatureCategory::VulkanWorkarounds,
"The point size range reported from the API is inconsistent with the actual behavior", "The point size range reported from the API is inconsistent with the actual behavior",
&members, "http://anglebug.com/2970"}; &members, "http://anglebug.com/2970"};
...@@ -68,95 +68,94 @@ struct FeaturesVk : FeatureSetBase ...@@ -68,95 +68,94 @@ struct FeaturesVk : FeatureSetBase
// attributes and the vertex shader that reads from it is ineffective. Only known workaround is // attributes and the vertex shader that reads from it is ineffective. Only known workaround is
// to perform a flush after the conversion. http://anglebug.com/3016 // to perform a flush after the conversion. http://anglebug.com/3016
Feature flushAfterVertexConversion = { Feature flushAfterVertexConversion = {
"flush_after_vertex_conversion", FeatureCategory::VulkanWorkarounds, "flushAfterVertexConversion", FeatureCategory::VulkanWorkarounds,
"The memory barrier between the compute shader that converts vertex attributes and the " "The memory barrier between the compute shader that converts vertex attributes and the "
"vertex shader that reads from it is ineffective", "vertex shader that reads from it is ineffective",
&members, "http://anglebug.com/3016"}; &members, "http://anglebug.com/3016"};
Feature supportsRenderpass2 = {"supports_renderpass2", FeatureCategory::VulkanFeatures, Feature supportsRenderpass2 = {"supportsRenderpass2", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_create_renderpass2 extension", "VkDevice supports the VK_KHR_create_renderpass2 extension",
&members}; &members};
// Whether the VkDevice supports the VK_KHR_incremental_present extension, on which the // Whether the VkDevice supports the VK_KHR_incremental_present extension, on which the
// EGL_KHR_swap_buffers_with_damage extension can be layered. // EGL_KHR_swap_buffers_with_damage extension can be layered.
Feature supportsIncrementalPresent = { Feature supportsIncrementalPresent = {
"supports_incremental_present", FeatureCategory::VulkanFeatures, "supportsIncrementalPresent", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_incremental_present extension", &members}; "VkDevice supports the VK_KHR_incremental_present extension", &members};
// Whether texture copies on cube map targets should be done on GPU. This is a workaround for // Whether texture copies on cube map targets should be done on GPU. This is a workaround for
// Intel drivers on windows that have an issue with creating single-layer views on cube map // Intel drivers on windows that have an issue with creating single-layer views on cube map
// textures. // textures.
Feature forceCPUPathForCubeMapCopy = { Feature forceCPUPathForCubeMapCopy = {
"force_cpu_path_for_cube_map_copy", FeatureCategory::VulkanWorkarounds, "forceCPUPathForCubeMapCopy", FeatureCategory::VulkanWorkarounds,
"Some drivers have an issue with creating single-layer views on cube map textures", "Some drivers have an issue with creating single-layer views on cube map textures",
&members}; &members};
// Whether the VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer // Whether the VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer
// extension, on which the EGL_ANDROID_image_native_buffer extension can be layered. // extension, on which the EGL_ANDROID_image_native_buffer extension can be layered.
Feature supportsAndroidHardwareBuffer = { Feature supportsAndroidHardwareBuffer = {
"supports_android_hardware_buffer", FeatureCategory::VulkanFeatures, "supportsAndroidHardwareBuffer", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension", "VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension",
&members}; &members};
// Whether the VkDevice supports the VK_GGP_frame_token extension, on which // Whether the VkDevice supports the VK_GGP_frame_token extension, on which
// the EGL_ANGLE_swap_with_frame_token extension can be layered. // the EGL_ANGLE_swap_with_frame_token extension can be layered.
Feature supportsGGPFrameToken = {"supports_ggp_frame_token", FeatureCategory::VulkanFeatures, Feature supportsGGPFrameToken = {"supportsGGPFrameToken", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_GGP_frame_token extension", "VkDevice supports the VK_GGP_frame_token extension",
&members}; &members};
// Whether the VkDevice supports the VK_KHR_external_memory_fd extension, on which the // Whether the VkDevice supports the VK_KHR_external_memory_fd extension, on which the
// GL_EXT_memory_object_fd extension can be layered. // GL_EXT_memory_object_fd extension can be layered.
Feature supportsExternalMemoryFd = { Feature supportsExternalMemoryFd = {"supportsExternalMemoryFd", FeatureCategory::VulkanFeatures,
"supports_external_memory_fd", FeatureCategory::VulkanFeatures, "VkDevice supports the VK_KHR_external_memory_fd extension",
"VkDevice supports the VK_KHR_external_memory_fd extension", &members}; &members};
// Whether the VkDevice supports the VK_FUCHSIA_external_memory // Whether the VkDevice supports the VK_FUCHSIA_external_memory
// extension, on which the GL_ANGLE_memory_object_fuchsia extension can be layered. // extension, on which the GL_ANGLE_memory_object_fuchsia extension can be layered.
Feature supportsExternalMemoryFuchsia = { Feature supportsExternalMemoryFuchsia = {
"supports_external_memory_fuchsia", FeatureCategory::VulkanFeatures, "supportsExternalMemoryFuchsia", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_FUCHSIA_external_memory extension", &members}; "VkDevice supports the VK_FUCHSIA_external_memory extension", &members};
Feature supportsFilteringPrecision = { Feature supportsFilteringPrecision = {
"supports_filtering_precision_google", FeatureCategory::VulkanFeatures, "supportsFilteringPrecision", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension", &members}; "VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension", &members};
// Whether the VkDevice supports the VK_KHR_external_fence_capabilities extension. // Whether the VkDevice supports the VK_KHR_external_fence_capabilities extension.
Feature supportsExternalFenceCapabilities = { Feature supportsExternalFenceCapabilities = {
"supports_external_fence_capabilities", FeatureCategory::VulkanFeatures, "supportsExternalFenceCapabilities", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_external_fence_capabilities extension", &members}; "VkDevice supports the VK_KHR_external_fence_capabilities extension", &members};
// Whether the VkDevice supports the VK_KHR_external_semaphore_capabilities extension. // Whether the VkDevice supports the VK_KHR_external_semaphore_capabilities extension.
Feature supportsExternalSemaphoreCapabilities = { Feature supportsExternalSemaphoreCapabilities = {
"supports_external_semaphore_capabilities", FeatureCategory::VulkanFeatures, "supportsExternalSemaphoreCapabilities", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_external_semaphore_capabilities extension", &members}; "VkDevice supports the VK_KHR_external_semaphore_capabilities extension", &members};
// Whether the VkDevice supports the VK_KHR_external_semaphore_fd extension, on which the // Whether the VkDevice supports the VK_KHR_external_semaphore_fd extension, on which the
// GL_EXT_semaphore_fd extension can be layered. // GL_EXT_semaphore_fd extension can be layered.
Feature supportsExternalSemaphoreFd = { Feature supportsExternalSemaphoreFd = {
"supports_external_semaphore_fd", FeatureCategory::VulkanFeatures, "supportsExternalSemaphoreFd", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_external_semaphore_fd extension", &members}; "VkDevice supports the VK_KHR_external_semaphore_fd extension", &members};
// Whether the VkDevice supports the VK_FUCHSIA_external_semaphore // Whether the VkDevice supports the VK_FUCHSIA_external_semaphore
// extension, on which the GL_ANGLE_semaphore_fuchsia extension can be layered. // extension, on which the GL_ANGLE_semaphore_fuchsia extension can be layered.
angle::Feature supportsExternalSemaphoreFuchsia = { angle::Feature supportsExternalSemaphoreFuchsia = {
"supports_external_semaphore_fuchsia", FeatureCategory::VulkanFeatures, "supportsExternalSemaphoreFuchsia", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_FUCHSIA_external_semaphore extension", &members}; "VkDevice supports the VK_FUCHSIA_external_semaphore extension", &members};
// Whether the VkDevice supports the VK_KHR_external_fence_fd extension, on which the // Whether the VkDevice supports the VK_KHR_external_fence_fd extension, on which the
// EGL_ANDROID_native_fence extension can be layered. // EGL_ANDROID_native_fence extension can be layered.
Feature supportsExternalFenceFd = {"supports_external_fence_fd", Feature supportsExternalFenceFd = {"supportsExternalFenceFd", FeatureCategory::VulkanFeatures,
FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_external_fence_fd extension", "VkDevice supports the VK_KHR_external_fence_fd extension",
&members, "http://anglebug.com/2517"}; &members, "http://anglebug.com/2517"};
// Whether the VkDevice can support EGL_ANDROID_native_fence_sync extension. // Whether the VkDevice can support EGL_ANDROID_native_fence_sync extension.
Feature supportsAndroidNativeFenceSync = { Feature supportsAndroidNativeFenceSync = {
"supports_android_native_fence_sync", FeatureCategory::VulkanFeatures, "supportsAndroidNativeFenceSync", FeatureCategory::VulkanFeatures,
"VkDevice supports the EGL_ANDROID_native_fence_sync extension", &members, "VkDevice supports the EGL_ANDROID_native_fence_sync extension", &members,
"http://anglebug.com/2517"}; "http://anglebug.com/2517"};
// Whether the VkDevice can support imageCubeArray feature properly. // Whether the VkDevice can support imageCubeArray feature properly.
Feature supportsImageCubeArray = {"supports_image_cube_array", FeatureCategory::VulkanFeatures, Feature supportsImageCubeArray = {"supportsImageCubeArray", FeatureCategory::VulkanFeatures,
"VkDevice supports the imageCubeArray feature properly", "VkDevice supports the imageCubeArray feature properly",
&members, "http://anglebug.com/3584"}; &members, "http://anglebug.com/3584"};
...@@ -164,55 +163,55 @@ struct FeaturesVk : FeatureSetBase ...@@ -164,55 +163,55 @@ struct FeaturesVk : FeatureSetBase
// perform multisampled resolve of stencil buffer. A multi-step workaround is used instead if // perform multisampled resolve of stencil buffer. A multi-step workaround is used instead if
// this extension is not available. // this extension is not available.
Feature supportsShaderStencilExport = { Feature supportsShaderStencilExport = {
"supports_shader_stencil_export", FeatureCategory::VulkanFeatures, "supportsShaderStencilExport", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_EXT_shader_stencil_export extension", &members}; "VkDevice supports the VK_EXT_shader_stencil_export extension", &members};
// Whether the VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension, which is needed // Whether the VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension, which is needed
// to support Ycbcr conversion with external images. // to support Ycbcr conversion with external images.
Feature supportsYUVSamplerConversion = { Feature supportsYUVSamplerConversion = {
"supports_yuv_sampler_conversion", FeatureCategory::VulkanFeatures, "supportsYUVSamplerConversion", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension", &members}; "VkDevice supports the VK_KHR_sampler_ycbcr_conversion extension", &members};
// Where VK_EXT_transform_feedback is not support, an emulation path is used. // Where VK_EXT_transform_feedback is not support, an emulation path is used.
// http://anglebug.com/3205 // http://anglebug.com/3205
Feature emulateTransformFeedback = { Feature emulateTransformFeedback = {
"emulate_transform_feedback", FeatureCategory::VulkanFeatures, "emulateTransformFeedback", FeatureCategory::VulkanFeatures,
"Emulate transform feedback as the VK_EXT_transform_feedback is not present.", &members, "Emulate transform feedback as the VK_EXT_transform_feedback is not present.", &members,
"http://anglebug.com/3205"}; "http://anglebug.com/3205"};
// Where VK_EXT_transform_feedback is supported, it's preferred over an emulation path. // Where VK_EXT_transform_feedback is supported, it's preferred over an emulation path.
// http://anglebug.com/3206 // http://anglebug.com/3206
Feature supportsTransformFeedbackExtension = { Feature supportsTransformFeedbackExtension = {
"supports_transform_feedback_extension", FeatureCategory::VulkanFeatures, "supportsTransformFeedbackExtension", FeatureCategory::VulkanFeatures,
"Transform feedback uses the VK_EXT_transform_feedback extension.", &members, "Transform feedback uses the VK_EXT_transform_feedback extension.", &members,
"http://anglebug.com/3206"}; "http://anglebug.com/3206"};
// Whether the VkDevice supports the VK_EXT_index_type_uint8 extension // Whether the VkDevice supports the VK_EXT_index_type_uint8 extension
// http://anglebug.com/4405 // http://anglebug.com/4405
Feature supportsIndexTypeUint8 = {"supports_index_type_uint8", FeatureCategory::VulkanFeatures, Feature supportsIndexTypeUint8 = {"supportsIndexTypeUint8", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_EXT_index_type_uint8 extension", "VkDevice supports the VK_EXT_index_type_uint8 extension",
&members, "http://anglebug.com/4405"}; &members, "http://anglebug.com/4405"};
// Whether the VkDevice supports the VK_KHR_depth_stencil_resolve extension with the // Whether the VkDevice supports the VK_KHR_depth_stencil_resolve extension with the
// independentResolveNone feature. // independentResolveNone feature.
// http://anglebug.com/4836 // http://anglebug.com/4836
Feature supportsDepthStencilResolve = {"supports_depth_stencil_resolve", Feature supportsDepthStencilResolve = {"supportsDepthStencilResolve",
FeatureCategory::VulkanFeatures, FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_depth_stencil_resolve " "VkDevice supports the VK_KHR_depth_stencil_resolve "
"extension with the independentResolveNone feature", "extension with the independentResolveNone feature",
&members, "http://anglebug.com/4836"}; &members, "http://anglebug.com/4836"};
// VK_PRESENT_MODE_FIFO_KHR causes random timeouts on Linux Intel. http://anglebug.com/3153 // VK_PRESENT_MODE_FIFO_KHR causes random timeouts on Linux Intel. http://anglebug.com/3153
Feature disableFifoPresentMode = { Feature disableFifoPresentMode = {"disableFifoPresentMode", FeatureCategory::VulkanWorkarounds,
"disable_fifo_present_mode", FeatureCategory::VulkanWorkarounds, "VK_PRESENT_MODE_FIFO_KHR causes random timeouts", &members,
"VK_PRESENT_MODE_FIFO_KHR causes random timeouts", &members, "http://anglebug.com/3153"}; "http://anglebug.com/3153"};
// On Qualcomm, gaps in bound descriptor set indices causes the post-gap sets to misbehave. // On Qualcomm, gaps in bound descriptor set indices causes the post-gap sets to misbehave.
// For example, binding only descriptor set 3 results in zero being read from a uniform buffer // For example, binding only descriptor set 3 results in zero being read from a uniform buffer
// object within that set. This flag results in empty descriptor sets being bound for any // object within that set. This flag results in empty descriptor sets being bound for any
// unused descriptor set to work around this issue. http://anglebug.com/2727 // unused descriptor set to work around this issue. http://anglebug.com/2727
Feature bindEmptyForUnusedDescriptorSets = { Feature bindEmptyForUnusedDescriptorSets = {
"bind_empty_for_unused_descriptor_sets", FeatureCategory::VulkanWorkarounds, "bindEmptyForUnusedDescriptorSets", FeatureCategory::VulkanWorkarounds,
"Gaps in bound descriptor set indices causes the post-gap sets to misbehave", &members, "Gaps in bound descriptor set indices causes the post-gap sets to misbehave", &members,
"http://anglebug.com/2727"}; "http://anglebug.com/2727"};
...@@ -222,7 +221,7 @@ struct FeaturesVk : FeatureSetBase ...@@ -222,7 +221,7 @@ struct FeaturesVk : FeatureSetBase
// do not. Work-around this by setting saying D16_UNORM supports filtering // do not. Work-around this by setting saying D16_UNORM supports filtering
// anyway. // anyway.
Feature forceD16TexFilter = { Feature forceD16TexFilter = {
"force_D16_texture_filter", FeatureCategory::VulkanWorkarounds, "forceD16TexFilter", FeatureCategory::VulkanWorkarounds,
"VK_FORMAT_D16_UNORM does not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, " "VK_FORMAT_D16_UNORM does not support VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, "
"which prevents OES_depth_texture from being supported.", "which prevents OES_depth_texture from being supported.",
&members, "http://anglebug.com/3452"}; &members, "http://anglebug.com/3452"};
...@@ -230,7 +229,7 @@ struct FeaturesVk : FeatureSetBase ...@@ -230,7 +229,7 @@ struct FeaturesVk : FeatureSetBase
// On some android devices, vkCmdBlitImage with flipped coordinates blits incorrectly. This // On some android devices, vkCmdBlitImage with flipped coordinates blits incorrectly. This
// workaround makes sure this path is avoided. http://anglebug.com/3498 // workaround makes sure this path is avoided. http://anglebug.com/3498
Feature disableFlippingBlitWithCommand = { Feature disableFlippingBlitWithCommand = {
"disable_flipping_blit_with_command", FeatureCategory::VulkanWorkarounds, "disableFlippingBlitWithCommand", FeatureCategory::VulkanWorkarounds,
"vkCmdBlitImage with flipped coordinates blits incorrectly.", &members, "vkCmdBlitImage with flipped coordinates blits incorrectly.", &members,
"http://anglebug.com/3498"}; "http://anglebug.com/3498"};
...@@ -239,20 +238,20 @@ struct FeaturesVk : FeatureSetBase ...@@ -239,20 +238,20 @@ struct FeaturesVk : FeatureSetBase
// every frame to detect a window resizing. // every frame to detect a window resizing.
// http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625 // http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625
Feature perFrameWindowSizeQuery = { Feature perFrameWindowSizeQuery = {
"per_frame_window_size_query", FeatureCategory::VulkanWorkarounds, "perFrameWindowSizeQuery", FeatureCategory::VulkanWorkarounds,
"Vulkan swapchain is not returning VK_ERROR_OUT_OF_DATE when window resizing", &members, "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"}; "http://anglebug.com/3623, http://anglebug.com/3624, http://anglebug.com/3625"};
// Seamful cube map emulation misbehaves on the AMD windows driver, so it's disallowed. // Seamful cube map emulation misbehaves on the AMD windows driver, so it's disallowed.
Feature disallowSeamfulCubeMapEmulation = { Feature disallowSeamfulCubeMapEmulation = {
"disallow_seamful_cube_map_emulation", FeatureCategory::VulkanWorkarounds, "disallowSeamfulCubeMapEmulation", FeatureCategory::VulkanWorkarounds,
"Seamful cube map emulation misbehaves on some drivers, so it's disallowed", &members, "Seamful cube map emulation misbehaves on some drivers, so it's disallowed", &members,
"http://anglebug.com/3243"}; "http://anglebug.com/3243"};
// Qualcomm and SwiftShader shader compiler doesn't support sampler arrays as parameters, so // Qualcomm and SwiftShader shader compiler doesn't support sampler arrays as parameters, so
// revert to old RewriteStructSamplers behavior, which produces fewer. // revert to old RewriteStructSamplers behavior, which produces fewer.
Feature forceOldRewriteStructSamplers = { Feature forceOldRewriteStructSamplers = {
"force_old_rewrite_struct_samplers", FeatureCategory::VulkanWorkarounds, "forceOldRewriteStructSamplers", FeatureCategory::VulkanWorkarounds,
"Some shader compilers don't support sampler arrays as parameters, so revert to old " "Some shader compilers don't support sampler arrays as parameters, so revert to old "
"RewriteStructSamplers behavior, which produces fewer.", "RewriteStructSamplers behavior, which produces fewer.",
&members, "http://anglebug.com/2703"}; &members, "http://anglebug.com/2703"};
...@@ -265,7 +264,7 @@ struct FeaturesVk : FeatureSetBase ...@@ -265,7 +264,7 @@ struct FeaturesVk : FeatureSetBase
// every buffer allocation size to be large enough to support a maximum vertex stride. // every buffer allocation size to be large enough to support a maximum vertex stride.
// http://anglebug.com/4428 // http://anglebug.com/4428
Feature padBuffersToMaxVertexAttribStride = { Feature padBuffersToMaxVertexAttribStride = {
"pad_buffers_to_max_vertex_attrib_stride", FeatureCategory::VulkanWorkarounds, "padBuffersToMaxVertexAttribStride", FeatureCategory::VulkanWorkarounds,
"Vulkan considers vertex attribute accesses to count up to the last multiple of the " "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. " "stride. This additional access supports AMD's robust buffer access implementation. "
"AMDVLK in particular will return incorrect values when the vertex access extends into " "AMDVLK in particular will return incorrect values when the vertex access extends into "
...@@ -277,20 +276,20 @@ struct FeaturesVk : FeatureSetBase ...@@ -277,20 +276,20 @@ struct FeaturesVk : FeatureSetBase
// Whether the VkDevice supports the VK_EXT_swapchain_colorspace extension // Whether the VkDevice supports the VK_EXT_swapchain_colorspace extension
// http://anglebug.com/2514 // http://anglebug.com/2514
Feature supportsSwapchainColorspace = { Feature supportsSwapchainColorspace = {
"supports_swapchain_colorspace", FeatureCategory::VulkanFeatures, "supportsSwapchainColorspace", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_EXT_swapchain_colorspace extension", &members, "VkDevice supports the VK_EXT_swapchain_colorspace extension", &members,
"http://anglebug.com/2514"}; "http://anglebug.com/2514"};
// Whether the VkDevice supports the VK_EXT_external_memory_host extension, on which the // Whether the VkDevice supports the VK_EXT_external_memory_host extension, on which the
// ANGLE_iosurface_client_buffer extension can be layered. // ANGLE_iosurface_client_buffer extension can be layered.
Feature supportsExternalMemoryHost = { Feature supportsExternalMemoryHost = {
"supports_external_memory_host", FeatureCategory::VulkanFeatures, "supportsExternalMemoryHost", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_EXT_external_memory_host extension", &members}; "VkDevice supports the VK_EXT_external_memory_host extension", &members};
// Whether to fill new buffers and textures with nonzero data to sanitize robust resource // Whether to fill new buffers and textures with nonzero data to sanitize robust resource
// initialization and flush out assumptions about zero init. // initialization and flush out assumptions about zero init.
Feature allocateNonZeroMemory = { Feature allocateNonZeroMemory = {
"allocate_non_zero_memory", FeatureCategory::VulkanFeatures, "allocateNonZeroMemory", FeatureCategory::VulkanFeatures,
"Fill new allocations with non-zero values to flush out errors.", &members, "Fill new allocations with non-zero values to flush out errors.", &members,
"http://anglebug.com/4384"}; "http://anglebug.com/4384"};
...@@ -298,40 +297,39 @@ struct FeaturesVk : FeatureSetBase ...@@ -298,40 +297,39 @@ struct FeaturesVk : FeatureSetBase
// glMap* latency can be reduced by maintaining a copy of the buffer which is // glMap* latency can be reduced by maintaining a copy of the buffer which is
// writeable only by the CPU. We then return this shadow buffer on glMap* calls. // writeable only by the CPU. We then return this shadow buffer on glMap* calls.
Feature shadowBuffers = { Feature shadowBuffers = {
"shadow_buffers", FeatureCategory::VulkanFeatures, "shadowBuffers", FeatureCategory::VulkanFeatures,
"Allocate a shadow buffer for GL buffer objects to reduce glMap* latency.", &members, "Allocate a shadow buffer for GL buffer objects to reduce glMap* latency.", &members,
"http://anglebug.com/4339"}; "http://anglebug.com/4339"};
// Persistently map buffer memory until destroy, saves on map/unmap IOCTL overhead // Persistently map buffer memory until destroy, saves on map/unmap IOCTL overhead
// for buffers that are updated frequently. // for buffers that are updated frequently.
Feature persistentlyMappedBuffers = { Feature persistentlyMappedBuffers = {
"persistently_mapped_buffers", FeatureCategory::VulkanFeatures, "persistentlyMappedBuffers", FeatureCategory::VulkanFeatures,
"Persistently map buffer memory to reduce map/unmap IOCTL overhead.", &members, "Persistently map buffer memory to reduce map/unmap IOCTL overhead.", &members,
"http://anglebug.com/2162"}; "http://anglebug.com/2162"};
// Android needs to pre-rotate surfaces that are not oriented per the native device's // Android needs to pre-rotate surfaces that are not oriented per the native device's
// orientation (e.g. a landscape application on a Pixel phone). This feature works for // orientation (e.g. a landscape application on a Pixel phone). This feature works for
// full-screen applications. http://anglebug.com/3502 // full-screen applications. http://anglebug.com/3502
Feature enablePreRotateSurfaces = {"enable_pre_rotation_surfaces", Feature enablePreRotateSurfaces = {"enablePreRotateSurfaces", FeatureCategory::VulkanFeatures,
FeatureCategory::VulkanFeatures,
"Enable Android pre-rotation for landscape applications", "Enable Android pre-rotation for landscape applications",
&members, "http://anglebug.com/3502"}; &members, "http://anglebug.com/3502"};
// Cache FramebufferVk objects. Currently hitting a bug on Apple: http://anglebug.com/4442 // Cache FramebufferVk objects. Currently hitting a bug on Apple: http://anglebug.com/4442
Feature enableFramebufferVkCache = { Feature enableFramebufferVkCache = {"enableFramebufferVkCache", FeatureCategory::VulkanFeatures,
"enable_framebuffer_vk_cache", FeatureCategory::VulkanFeatures, "Enable FramebufferVk objects to be cached", &members,
"Enable FramebufferVk objects to be cached", &members, "http://anglebug.com/4442"}; "http://anglebug.com/4442"};
// Enable precision qualifiers for shaders generated by Vulkan backend http://anglebug.com/3078 // Enable precision qualifiers for shaders generated by Vulkan backend http://anglebug.com/3078
Feature enablePrecisionQualifiers = { Feature enablePrecisionQualifiers = {
"enable_precision_qualifiers", FeatureCategory::VulkanFeatures, "enablePrecisionQualifiers", FeatureCategory::VulkanFeatures,
"Enable precision qualifiers in shaders", &members, "http://anglebug.com/3078"}; "Enable precision qualifiers in shaders", &members, "http://anglebug.com/3078"};
// Desktop (at least NVIDIA) drivers prefer combining barriers into one vkCmdPipelineBarrier // Desktop (at least NVIDIA) drivers prefer combining barriers into one vkCmdPipelineBarrier
// call over issuing multiple barrier calls with fine grained dependency information to have // call over issuing multiple barrier calls with fine grained dependency information to have
// better performance. http://anglebug.com/4633 // better performance. http://anglebug.com/4633
Feature preferAggregateBarrierCalls = { Feature preferAggregateBarrierCalls = {
"prefer_aggregate_barrier_calls", FeatureCategory::VulkanWorkarounds, "preferAggregateBarrierCalls", FeatureCategory::VulkanWorkarounds,
"Single barrier call is preferred over multiple calls with " "Single barrier call is preferred over multiple calls with "
"fine grained pipeline stage dependency information", "fine grained pipeline stage dependency information",
&members, "http://anglebug.com/4633"}; &members, "http://anglebug.com/4633"};
...@@ -339,20 +337,20 @@ struct FeaturesVk : FeatureSetBase ...@@ -339,20 +337,20 @@ struct FeaturesVk : FeatureSetBase
// Tell Vulkan back-end to use CommandProcessor class to dispatch work to the GPU. The work will // Tell Vulkan back-end to use CommandProcessor class to dispatch work to the GPU. The work will
// happen asynchronously in a different thread if asynchronousCommandProcessing is true. // happen asynchronously in a different thread if asynchronousCommandProcessing is true.
// Otherwise use Renderer::CommandQueue to dispatch work. // Otherwise use Renderer::CommandQueue to dispatch work.
Feature commandProcessor = {"command_processor", FeatureCategory::VulkanFeatures, Feature commandProcessor = {"commandProcessor", FeatureCategory::VulkanFeatures,
"Use CommandProcessor class to dispatch work to GPU.", &members, "Use CommandProcessor class to dispatch work to GPU.", &members,
"http://anglebug.com/4324"}; "http://anglebug.com/4324"};
// Enable parallel thread execution when commandProcessor is enabled. // Enable parallel thread execution when commandProcessor is enabled.
// Currently off by default. // Currently off by default.
Feature asynchronousCommandProcessing = {"asynchronous_command_processing", Feature asynchronousCommandProcessing = {"asynchronousCommandProcessing",
FeatureCategory::VulkanFeatures, FeatureCategory::VulkanFeatures,
"Enable/Disable parallel processing of worker thread", "Enable/Disable parallel processing of worker thread",
&members, "http://anglebug.com/4324"}; &members, "http://anglebug.com/4324"};
// Whether the VkDevice supports the VK_KHR_shader_float16_int8 extension and has the // Whether the VkDevice supports the VK_KHR_shader_float16_int8 extension and has the
// shaderFloat16 feature. // shaderFloat16 feature.
Feature supportsShaderFloat16 = {"supports_shader_float16", FeatureCategory::VulkanFeatures, Feature supportsShaderFloat16 = {"supportsShaderFloat16", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_shader_float16_int8 extension " "VkDevice supports the VK_KHR_shader_float16_int8 extension "
"and has the shaderFloat16 feature", "and has the shaderFloat16 feature",
&members, "http://anglebug.com/4551"}; &members, "http://anglebug.com/4551"};
...@@ -360,7 +358,7 @@ struct FeaturesVk : FeatureSetBase ...@@ -360,7 +358,7 @@ struct FeaturesVk : FeatureSetBase
// Whether the VkDevice supports the VK_EXT_shader_atomic_flat extension and has the // Whether the VkDevice supports the VK_EXT_shader_atomic_flat extension and has the
// shaderImageFloat32Atomics feature // shaderImageFloat32Atomics feature
Feature supportsShaderImageFloat32Atomics = { Feature supportsShaderImageFloat32Atomics = {
"shaderImageFloat32Atomics", FeatureCategory::VulkanFeatures, "supportsShaderImageFloat32Atomics", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_EXT_shader_atomic_float extension and has the " "VkDevice supports the VK_EXT_shader_atomic_float extension and has the "
"shaderImageFloat32Atomics feature.", "shaderImageFloat32Atomics feature.",
&members, "http://anglebug.com/3578"}; &members, "http://anglebug.com/3578"};
...@@ -369,7 +367,7 @@ struct FeaturesVk : FeatureSetBase ...@@ -369,7 +367,7 @@ struct FeaturesVk : FeatureSetBase
// compute shader. On some other devices, VK_IMAGE_USAGE_STORAGE_BIT is detrimental to // compute shader. On some other devices, VK_IMAGE_USAGE_STORAGE_BIT is detrimental to
// performance, making this solution impractical. // performance, making this solution impractical.
Feature allowGenerateMipmapWithCompute = { Feature allowGenerateMipmapWithCompute = {
"allow_generate_mipmap_with_compute", FeatureCategory::VulkanFeatures, "allowGenerateMipmapWithCompute", FeatureCategory::VulkanFeatures,
"Use the compute path to generate mipmaps on devices that meet the minimum requirements, " "Use the compute path to generate mipmaps on devices that meet the minimum requirements, "
"and the performance is better.", "and the performance is better.",
&members, "http://anglebug.com/4551"}; &members, "http://anglebug.com/4551"};
...@@ -377,7 +375,7 @@ struct FeaturesVk : FeatureSetBase ...@@ -377,7 +375,7 @@ struct FeaturesVk : FeatureSetBase
// Whether the VkDevice supports the VK_QCOM_render_pass_store_ops extension // Whether the VkDevice supports the VK_QCOM_render_pass_store_ops extension
// http://anglebug.com/5505 // http://anglebug.com/5505
Feature supportsRenderPassStoreOpNoneQCOM = { Feature supportsRenderPassStoreOpNoneQCOM = {
"supports_render_pass_store_ops_none_qcom", FeatureCategory::VulkanFeatures, "supportsRenderPassStoreOpNoneQCOM", FeatureCategory::VulkanFeatures,
"VkDevice supports VK_QCOM_render_pass_store_ops extension.", &members, "VkDevice supports VK_QCOM_render_pass_store_ops extension.", &members,
"http://anglebug.com/5055"}; "http://anglebug.com/5055"};
...@@ -386,7 +384,7 @@ struct FeaturesVk : FeatureSetBase ...@@ -386,7 +384,7 @@ struct FeaturesVk : FeatureSetBase
// device, we set to 16k for now which is known to pass all tests. // device, we set to 16k for now which is known to pass all tests.
// https://issuetracker.google.com/161903006 // https://issuetracker.google.com/161903006
Feature forceMaxUniformBufferSize16KB = { Feature forceMaxUniformBufferSize16KB = {
"force_max_uniform_buffer_size_16K", FeatureCategory::VulkanWorkarounds, "forceMaxUniformBufferSize16KB", FeatureCategory::VulkanWorkarounds,
"Force max uniform buffer size to 16K on some device due to bug", &members, "Force max uniform buffer size to 16K on some device due to bug", &members,
"https://issuetracker.google.com/161903006"}; "https://issuetracker.google.com/161903006"};
...@@ -402,13 +400,13 @@ struct FeaturesVk : FeatureSetBase ...@@ -402,13 +400,13 @@ struct FeaturesVk : FeatureSetBase
// is used by Chromium. // is used by Chromium.
// http://anglebug.com/4937 // http://anglebug.com/4937
Feature enableMultisampledRenderToTexture = { Feature enableMultisampledRenderToTexture = {
"enable_multisampled_render_to_texture", FeatureCategory::VulkanWorkarounds, "enableMultisampledRenderToTexture", FeatureCategory::VulkanWorkarounds,
"Expose EXT_multisampled_render_to_texture", &members, "http://anglebug.com/4937"}; "Expose EXT_multisampled_render_to_texture", &members, "http://anglebug.com/4937"};
// Qualcomm fails some tests when reducing the preferred block size to 4M. // Qualcomm fails some tests when reducing the preferred block size to 4M.
// http://anglebug.com/4995 // http://anglebug.com/4995
Feature preferredLargeHeapBlockSize4MB = { Feature preferredLargeHeapBlockSize4MB = {
"preferred_large_heap_block_size_4M", FeatureCategory::VulkanWorkarounds, "preferredLargeHeapBlockSize4MB", FeatureCategory::VulkanWorkarounds,
"Use 4 MB preferred large heap block size with AMD allocator", &members, "Use 4 MB preferred large heap block size with AMD allocator", &members,
"http://anglebug.com/4995"}; "http://anglebug.com/4995"};
...@@ -417,44 +415,44 @@ struct FeaturesVk : FeatureSetBase ...@@ -417,44 +415,44 @@ struct FeaturesVk : FeatureSetBase
// the middle of renderpass to the end of renderpass. // the middle of renderpass to the end of renderpass.
// https://issuetracker.google.com/issues/166475273 // https://issuetracker.google.com/issues/166475273
Feature deferFlushUntilEndRenderPass = { Feature deferFlushUntilEndRenderPass = {
"defer_flush_until_endrenderpass", FeatureCategory::VulkanWorkarounds, "deferFlushUntilEndRenderPass", FeatureCategory::VulkanWorkarounds,
"Allow glFlush to be deferred until renderpass ends", &members, "Allow glFlush to be deferred until renderpass ends", &members,
"https://issuetracker.google.com/issues/166475273"}; "https://issuetracker.google.com/issues/166475273"};
// Android mistakenly destroys oldSwapchain passed to vkCreateSwapchainKHR, causing crashes on // Android mistakenly destroys oldSwapchain passed to vkCreateSwapchainKHR, causing crashes on
// certain drivers. http://anglebug.com/5061 // certain drivers. http://anglebug.com/5061
Feature waitIdleBeforeSwapchainRecreation = { Feature waitIdleBeforeSwapchainRecreation = {
"wait_idle_before_swapchain_recreation", FeatureCategory::VulkanWorkarounds, "waitIdleBeforeSwapchainRecreation", FeatureCategory::VulkanWorkarounds,
"Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue to be idle. " "Before passing an oldSwapchain to VkSwapchainCreateInfoKHR, wait for queue to be idle. "
"Works around a bug on platforms which destroy oldSwapchain in vkCreateSwapchainKHR.", "Works around a bug on platforms which destroy oldSwapchain in vkCreateSwapchainKHR.",
&members, "http://anglebug.com/5061"}; &members, "http://anglebug.com/5061"};
// Translate non-nearest mip filtering modes to nearest mip for all samplers for performance // Translate non-nearest mip filtering modes to nearest mip for all samplers for performance
// comparisons. ANGLE is non-conformant if this feature is enabled. // comparisons. ANGLE is non-conformant if this feature is enabled.
Feature forceNearestMipFiltering = {"force_nearest_mip_filtering", Feature forceNearestMipFiltering = {"forceNearestMipFiltering",
FeatureCategory::VulkanWorkarounds, FeatureCategory::VulkanWorkarounds,
"Force nearest mip filtering when sampling.", &members}; "Force nearest mip filtering when sampling.", &members};
// Qualcomm missynchronizes vkCmdClearAttachments in the middle of render pass. // Qualcomm missynchronizes vkCmdClearAttachments in the middle of render pass.
// https://issuetracker.google.com/166809097 // https://issuetracker.google.com/166809097
Feature preferDrawClearOverVkCmdClearAttachments = { Feature preferDrawClearOverVkCmdClearAttachments = {
"prefer_draw_clear_over_vkCmdClearAttachments", FeatureCategory::VulkanWorkarounds, "preferDrawClearOverVkCmdClearAttachments", FeatureCategory::VulkanWorkarounds,
"On some hardware, clear using a draw call instead of vkCmdClearAttachments in the middle " "On some hardware, clear using a draw call instead of vkCmdClearAttachments in the middle "
"of render pass due to bugs", "of render pass due to bugs",
&members, "https://issuetracker.google.com/166809097"}; &members, "https://issuetracker.google.com/166809097"};
// Whether prerotation is being emulated for testing. 90 degree rotation. // Whether prerotation is being emulated for testing. 90 degree rotation.
Feature emulatedPrerotation90 = {"emulated_prerotation_90", FeatureCategory::VulkanFeatures, Feature emulatedPrerotation90 = {"emulatedPrerotation90", FeatureCategory::VulkanFeatures,
"Emulate 90-degree prerotation.", &members, "Emulate 90-degree prerotation.", &members,
"http://anglebug.com/4901"}; "http://anglebug.com/4901"};
// Whether prerotation is being emulated for testing. 180 degree rotation. // Whether prerotation is being emulated for testing. 180 degree rotation.
Feature emulatedPrerotation180 = {"emulated_prerotation_180", FeatureCategory::VulkanFeatures, Feature emulatedPrerotation180 = {"emulatedPrerotation180", FeatureCategory::VulkanFeatures,
"Emulate 180-degree prerotation.", &members, "Emulate 180-degree prerotation.", &members,
"http://anglebug.com/4901"}; "http://anglebug.com/4901"};
// Whether prerotation is being emulated for testing. 270 degree rotation. // Whether prerotation is being emulated for testing. 270 degree rotation.
Feature emulatedPrerotation270 = {"emulated_prerotation_270", FeatureCategory::VulkanFeatures, Feature emulatedPrerotation270 = {"emulatedPrerotation270", FeatureCategory::VulkanFeatures,
"Emulate 270-degree prerotation.", &members, "Emulate 270-degree prerotation.", &members,
"http://anglebug.com/4901"}; "http://anglebug.com/4901"};
}; };
......
...@@ -178,17 +178,17 @@ bool EGLWindow::initializeDisplay(OSWindow *osWindow, ...@@ -178,17 +178,17 @@ bool EGLWindow::initializeDisplay(OSWindow *osWindow,
if (params.transformFeedbackFeature == EGL_FALSE) if (params.transformFeedbackFeature == EGL_FALSE)
{ {
disabledFeatureOverrides.push_back("supports_transform_feedback_extension"); disabledFeatureOverrides.push_back("supportsTransformFeedbackExtension");
disabledFeatureOverrides.push_back("emulate_transform_feedback"); disabledFeatureOverrides.push_back("emulateTransformFeedback");
} }
if (params.allocateNonZeroMemoryFeature == EGL_TRUE) if (params.allocateNonZeroMemoryFeature == EGL_TRUE)
{ {
enabledFeatureOverrides.push_back("allocate_non_zero_memory"); enabledFeatureOverrides.push_back("allocateNonZeroMemory");
} }
else if (params.allocateNonZeroMemoryFeature == EGL_FALSE) else if (params.allocateNonZeroMemoryFeature == EGL_FALSE)
{ {
disabledFeatureOverrides.push_back("allocate_non_zero_memory"); disabledFeatureOverrides.push_back("allocateNonZeroMemory");
} }
if (params.emulateCopyTexImage2DFromRenderbuffers == EGL_TRUE) if (params.emulateCopyTexImage2DFromRenderbuffers == EGL_TRUE)
...@@ -209,13 +209,13 @@ bool EGLWindow::initializeDisplay(OSWindow *osWindow, ...@@ -209,13 +209,13 @@ bool EGLWindow::initializeDisplay(OSWindow *osWindow,
switch (params.emulatedPrerotation) switch (params.emulatedPrerotation)
{ {
case 90: case 90:
enabledFeatureOverrides.push_back("emulated_prerotation_90"); enabledFeatureOverrides.push_back("emulatedPrerotation90");
break; break;
case 180: case 180:
enabledFeatureOverrides.push_back("emulated_prerotation_180"); enabledFeatureOverrides.push_back("emulatedPrerotation180");
break; break;
case 270: case 270:
enabledFeatureOverrides.push_back("emulated_prerotation_270"); enabledFeatureOverrides.push_back("emulatedPrerotation270");
break; break;
default: default:
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment