Commit 46fe0e4b by Jonah Ryan-Davis Committed by Commit Bot

Cleanup Features headers.

Cleanup redundant angle:: prefix in Features headers. Cleanup workaround descriptions. Bug: angleproject:1621 Change-Id: I4325d3603877efee9c6a035cd5b5bbbbc4f5c169 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1625609Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
parent 69d04939
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
namespace angle namespace angle
{ {
struct FeaturesVk : angle::FeatureSetBase struct FeaturesVk : FeatureSetBase
{ {
FeaturesVk(); FeaturesVk();
~FeaturesVk(); ~FeaturesVk();
...@@ -23,8 +23,8 @@ struct FeaturesVk : angle::FeatureSetBase ...@@ -23,8 +23,8 @@ struct FeaturesVk : angle::FeatureSetBase
// to Bresenham's. Vulkan uses a different algorithm. This feature enables the use of pixel // to Bresenham's. Vulkan uses a different algorithm. This feature enables the use of pixel
// 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.
angle::Feature basicGLLineRasterization = { Feature basicGLLineRasterization = {
"basic_gl_line_rasterization", angle::FeatureCategory::VulkanFeatures, "basic_gl_line_rasterization", 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};
...@@ -42,13 +42,13 @@ struct FeaturesVk : angle::FeatureSetBase ...@@ -42,13 +42,13 @@ struct FeaturesVk : angle::FeatureSetBase
// -generating mipmaps // -generating mipmaps
// -Point sprites tests // -Point sprites tests
// -texStorage // -texStorage
angle::Feature flipViewportY = {"flip_viewport_y", angle::FeatureCategory::VulkanFeatures, Feature flipViewportY = {"flip_viewport_y", FeatureCategory::VulkanFeatures,
"Flips the viewport to render upside-down", &members}; "Flips the viewport to render upside-down", &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.
angle::Feature extraCopyBufferRegion = { Feature extraCopyBufferRegion = {
"extra_copy_buffer_region", angle::FeatureCategory::VulkanWorkarounds, "extra_copy_buffer_region", FeatureCategory::VulkanWorkarounds,
"Windows Intel driver seems to have a bug where the last copy region in " "Windows Intel driver seems to have a bug where the last copy region in "
"vkCmdCopyBuffer is ignored", "vkCmdCopyBuffer is ignored",
&members}; &members};
...@@ -56,72 +56,71 @@ struct FeaturesVk : angle::FeatureSetBase ...@@ -56,72 +56,71 @@ struct FeaturesVk : angle::FeatureSetBase
// 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.
angle::Feature forceFallbackFormat = { Feature forceFallbackFormat = {"force_fallback_format", FeatureCategory::VulkanWorkarounds,
"force_fallback_format", angle::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.
angle::Feature clampPointSize = { Feature clampPointSize = {
"clamp_point_size", angle::FeatureCategory::VulkanWorkarounds, "clamp_point_size", FeatureCategory::VulkanWorkarounds,
"On some NVIDIA drivers the point size range reported from the API is " "On some NVIDIA drivers, the point size range reported from the API is "
"inconsistent with the actual behavior", "inconsistent with the actual behavior",
&members, "http://anglebug.com/2970"}; &members, "http://anglebug.com/2970"};
// On some android devices, the memory barrier between the compute shader that converts vertex // On some android devices, the memory barrier between the compute shader that converts vertex
// 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
angle::Feature flushAfterVertexConversion = { Feature flushAfterVertexConversion = {
"flush_after_vertex_conversion", angle::FeatureCategory::VulkanWorkarounds, "flush_after_vertex_conversion", FeatureCategory::VulkanWorkarounds,
"On some android devices, the memory barrier between the compute shader that converts " "On some android devices, the memory barrier between the compute shader that converts "
"vertex attributes and the vertex shader that reads from it is ineffective", "vertex attributes and the vertex shader that reads from it is ineffective",
&members, "http://anglebug.com/3016"}; &members, "http://anglebug.com/3016"};
// 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.
angle::Feature supportsIncrementalPresent = { Feature supportsIncrementalPresent = {
"supports_incremental_present", angle::FeatureCategory::VulkanFeatures, "supports_incremental_present", 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.
angle::Feature forceCpuPathForCubeMapCopy = { Feature forceCpuPathForCubeMapCopy = {
"force_cpu_path_for_cube_map_copy", angle::FeatureCategory::VulkanWorkarounds, "force_cpu_path_for_cube_map_copy", FeatureCategory::VulkanWorkarounds,
"Some Intel Windows drivers have an issue with creating single-layer " "Some Intel Windows drivers have an issue with creating single-layer "
"views on cube map textures", "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.
angle::Feature supportsAndroidHardwareBuffer = { Feature supportsAndroidHardwareBuffer = {
"supports_android_hardware_buffer", angle::FeatureCategory::VulkanFeatures, "supports_android_hardware_buffer", 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_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.
angle::Feature supportsExternalMemoryFd = { Feature supportsExternalMemoryFd = {
"supports_external_memory_fd", angle::FeatureCategory::VulkanFeatures, "supports_external_memory_fd", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_external_memory_fd extension", &members}; "VkDevice supports the VK_KHR_external_memory_fd 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.
angle::Feature supportsExternalSemaphoreFd = { Feature supportsExternalSemaphoreFd = {
"supports_external_semaphore_fd", angle::FeatureCategory::VulkanFeatures, "supports_external_semaphore_fd", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_KHR_external_semaphore_fd extension", &members}; "VkDevice supports the VK_KHR_external_semaphore_fd extension", &members};
// 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
angle::Feature disableFifoPresentMode = { Feature disableFifoPresentMode = {
"disable_fifo_present_mode", angle::FeatureCategory::VulkanWorkarounds, "disable_fifo_present_mode", FeatureCategory::VulkanWorkarounds,
"On Linux Intel, VK_PRESENT_MODE_FIFO_KHR causes random timeouts", &members, "On Linux Intel, VK_PRESENT_MODE_FIFO_KHR causes random timeouts", &members,
"http://anglebug.com/3153"}; "http://anglebug.com/3153"};
// On Qualcomm, a bug is preventing us from using loadOp=Clear with inline commands in the // On Qualcomm, a bug is preventing us from using loadOp=Clear with inline commands in the
// render pass. http://anglebug.com/2361 // render pass. http://anglebug.com/2361
angle::Feature restartRenderPassAfterLoadOpClear = { Feature restartRenderPassAfterLoadOpClear = {
"restart_render_pass_after_load_op_clear", angle::FeatureCategory::VulkanWorkarounds, "restart_render_pass_after_load_op_clear", FeatureCategory::VulkanWorkarounds,
"On Qualcomm, a bug is preventing us from using loadOp=Clear with inline " "On Qualcomm, a bug is preventing us from using loadOp=Clear with inline "
"commands in the render pass", "commands in the render pass",
&members, "http://anglebug.com/2361"}; &members, "http://anglebug.com/2361"};
...@@ -130,16 +129,16 @@ struct FeaturesVk : angle::FeatureSetBase ...@@ -130,16 +129,16 @@ struct FeaturesVk : angle::FeatureSetBase
// 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
angle::Feature bindEmptyForUnusedDescriptorSets = { Feature bindEmptyForUnusedDescriptorSets = {
"bind_empty_for_unused_descriptor_sets", angle::FeatureCategory::VulkanWorkarounds, "bind_empty_for_unused_descriptor_sets", FeatureCategory::VulkanWorkarounds,
"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",
&members, "http://anglebug.com/2727"}; &members, "http://anglebug.com/2727"};
// When the scissor is (0,0,0,0) on Windows Intel, the driver acts as if the scissor was // When the scissor is (0,0,0,0) on Windows Intel, the driver acts as if the scissor was
// disabled. Work-around this by setting the scissor to just outside of the render area // disabled. Work-around this by setting the scissor to just outside of the render area
// (e.g. (renderArea.x, renderArea.y, 1, 1)). http://anglebug.com/3153 // (e.g. (renderArea.x, renderArea.y, 1, 1)). http://anglebug.com/3153
angle::Feature forceNonZeroScissor = { Feature forceNonZeroScissor = {
"force_non_zero_scissor", angle::FeatureCategory::VulkanWorkarounds, "force_non_zero_scissor", FeatureCategory::VulkanWorkarounds,
"On Windows Intel, when the scissor is (0,0,0,0), the driver acts as if the " "On Windows Intel, when the scissor is (0,0,0,0), the driver acts as if the "
"scissor was disabled", "scissor was disabled",
&members, "http://anglebug.com/3153"}; &members, "http://anglebug.com/3153"};
...@@ -149,12 +148,11 @@ struct FeaturesVk : angle::FeatureSetBase ...@@ -149,12 +148,11 @@ struct FeaturesVk : angle::FeatureSetBase
// (e.g. VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT) and some devices // (e.g. VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT) and some devices
// 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.
angle::Feature forceD16TexFilter = { Feature forceD16TexFilter = {"force_D16_texture_filter", FeatureCategory::VulkanWorkarounds,
"force_D16_texture_filter", angle::FeatureCategory::VulkanWorkarounds, "On some Android devices, VK_FORMAT_D16_UNORM does not support "
"On some Android devices, VK_FORMAT_D16_UNORM does not support " "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, "
"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"};
}; };
inline FeaturesVk::FeaturesVk() = default; inline FeaturesVk::FeaturesVk() = default;
......
...@@ -26,7 +26,7 @@ struct CompilerWorkaroundsD3D ...@@ -26,7 +26,7 @@ struct CompilerWorkaroundsD3D
bool enableIEEEStrictness = false; bool enableIEEEStrictness = false;
}; };
struct WorkaroundsD3D : angle::FeatureSetBase struct WorkaroundsD3D : FeatureSetBase
{ {
WorkaroundsD3D(); WorkaroundsD3D();
~WorkaroundsD3D(); ~WorkaroundsD3D();
...@@ -35,13 +35,13 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -35,13 +35,13 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// We can fix this by optimizing those out of the shader. At the same time, we can // We can fix this by optimizing those out of the shader. At the same time, we can
// work around a bug on some nVidia drivers that they ignore "null" render targets // work around a bug on some nVidia drivers that they ignore "null" render targets
// in D3D11, by compacting the active color attachments list to omit null entries. // in D3D11, by compacting the active color attachments list to omit null entries.
angle::Feature mrtPerfWorkaround = { Feature mrtPerfWorkaround = {
"mrt_perf_workaround", angle::FeatureCategory::D3DWorkarounds, "mrt_perf_workaround", FeatureCategory::D3DWorkarounds,
"Some NVIDIA D3D11 drivers have a bug where they ignore null render targets", &members}; "Some NVIDIA D3D11 drivers have a bug where they ignore null render targets", &members};
angle::Feature setDataFasterThanImageUpload = {"set_data_faster_than_image_upload", Feature setDataFasterThanImageUpload = {"set_data_faster_than_image_upload",
angle::FeatureCategory::D3DWorkarounds, FeatureCategory::D3DWorkarounds,
"Set data faster than image upload", &members}; "Set data faster than image upload", &members};
// Some renderers can't disable mipmaps on a mipmapped texture (i.e. solely sample from level // Some renderers can't disable mipmaps on a mipmapped texture (i.e. solely sample from level
// zero, and ignore the other levels). D3D11 Feature Level 10+ does this by setting MaxLOD to // zero, and ignore the other levels). D3D11 Feature Level 10+ does this by setting MaxLOD to
...@@ -50,15 +50,15 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -50,15 +50,15 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// application creates a mipmapped texture2D, but sets GL_TEXTURE_MIN_FILTER to GL_NEAREST // application creates a mipmapped texture2D, but sets GL_TEXTURE_MIN_FILTER to GL_NEAREST
// (i.e disables mipmaps). To work around this, D3D11 FL9_3 has to create two copies of the // (i.e disables mipmaps). To work around this, D3D11 FL9_3 has to create two copies of the
// texture. The textures' level zeros are identical, but only one texture has mips. // texture. The textures' level zeros are identical, but only one texture has mips.
angle::Feature zeroMaxLodWorkaround = { Feature zeroMaxLodWorkaround = {
"zero_max_lod", angle::FeatureCategory::D3DWorkarounds, "zero_max_lod", FeatureCategory::D3DWorkarounds,
"D3D11 is missing an option to disable mipmaps on a mipmapped texture", &members}; "D3D11 is missing an option to disable mipmaps on a mipmapped texture", &members};
// Some renderers do not support Geometry Shaders so the Geometry Shader-based PointSprite // Some renderers do not support Geometry Shaders so the Geometry Shader-based PointSprite
// emulation will not work. To work around this, D3D11 FL9_3 has to use a different pointsprite // emulation will not work. To work around this, D3D11 FL9_3 has to use a different pointsprite
// emulation that is implemented using instanced quads. // emulation that is implemented using instanced quads.
angle::Feature useInstancedPointSpriteEmulation = { Feature useInstancedPointSpriteEmulation = {
"use_instanced_point_sprite_emulation", angle::FeatureCategory::D3DWorkarounds, "use_instanced_point_sprite_emulation", FeatureCategory::D3DWorkarounds,
"Some D3D11 renderers do not support geometry shaders for pointsprite emulation", &members}; "Some D3D11 renderers do not support geometry shaders for pointsprite emulation", &members};
// A bug fixed in NVIDIA driver version 347.88 < x <= 368.81 triggers a TDR when using // A bug fixed in NVIDIA driver version 347.88 < x <= 368.81 triggers a TDR when using
...@@ -66,8 +66,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -66,8 +66,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// is to use UpdateSubresource to trigger an extra copy. We disable this workaround on newer // is to use UpdateSubresource to trigger an extra copy. We disable this workaround on newer
// NVIDIA driver versions because of a second driver bug present with the workaround enabled. // NVIDIA driver versions because of a second driver bug present with the workaround enabled.
// (See: http://anglebug.com/1452) // (See: http://anglebug.com/1452)
angle::Feature depthStencilBlitExtraCopy = { Feature depthStencilBlitExtraCopy = {
"depth_stencil_blit_extra_copy", angle::FeatureCategory::D3DWorkarounds, "depth_stencil_blit_extra_copy", FeatureCategory::D3DWorkarounds,
"Bug in NVIDIA D3D11 Driver version <=347.88 and >368.81 triggers a TDR when using " "Bug in NVIDIA D3D11 Driver version <=347.88 and >368.81 triggers a TDR when using "
"CopySubresourceRegion from a staging texture to a depth/stencil", "CopySubresourceRegion from a staging texture to a depth/stencil",
&members, "http://anglebug.com/1452"}; &members, "http://anglebug.com/1452"};
...@@ -75,24 +75,24 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -75,24 +75,24 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// The HLSL optimizer has a bug with optimizing "pow" in certain integer-valued expressions. // The HLSL optimizer has a bug with optimizing "pow" in certain integer-valued expressions.
// We can work around this by expanding the pow into a series of multiplies if we're running // We can work around this by expanding the pow into a series of multiplies if we're running
// under the affected compiler. // under the affected compiler.
angle::Feature expandIntegerPowExpressions = { Feature expandIntegerPowExpressions = {
"expand_integer_pow_expressions", angle::FeatureCategory::D3DWorkarounds, "expand_integer_pow_expressions", FeatureCategory::D3DWorkarounds,
"The HLSL optimizer has a bug with optimizing 'pow' in certain integer-valued expressions", "The HLSL optimizer has a bug with optimizing 'pow' in certain integer-valued expressions",
&members}; &members};
// NVIDIA drivers sometimes write out-of-order results to StreamOut buffers when transform // NVIDIA drivers sometimes write out-of-order results to StreamOut buffers when transform
// feedback is used to repeatedly write to the same buffer positions. // feedback is used to repeatedly write to the same buffer positions.
angle::Feature flushAfterEndingTransformFeedback = { Feature flushAfterEndingTransformFeedback = {
"flush_after_ending_transform_feedback", angle::FeatureCategory::D3DWorkarounds, "flush_after_ending_transform_feedback", FeatureCategory::D3DWorkarounds,
"NVIDIA drivers sometimes write out-of-order results to StreamOut buffers when transform " "NVIDIA drivers sometimes write out-of-order results to StreamOut buffers when transform "
"feedback is used to repeatedly write to the same buffer positions", "feedback is used to repeatedly write to the same buffer positions",
&members}; &members};
// Some drivers (NVIDIA) do not take into account the base level of the texture in the results // Some drivers (NVIDIA) do not take into account the base level of the texture in the results
// of the HLSL GetDimensions builtin. // of the HLSL GetDimensions builtin.
angle::Feature getDimensionsIgnoresBaseLevel = { Feature getDimensionsIgnoresBaseLevel = {
"get_dimensions_ignores_base_level", angle::FeatureCategory::D3DWorkarounds, "get_dimensions_ignores_base_level", FeatureCategory::D3DWorkarounds,
"Some NVIDIA drivers o not take into account the base level of the " "Some NVIDIA drivers do not take into account the base level of the "
"texture in the results of the HLSL GetDimensions builtin", "texture in the results of the HLSL GetDimensions builtin",
&members}; &members};
...@@ -102,8 +102,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -102,8 +102,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// texelFetchOffset to use negative texture coordinates as its parameter P when the sum of P // texelFetchOffset to use negative texture coordinates as its parameter P when the sum of P
// and Offset is in range. To work around this, we translate texelFetchOffset into texelFetch // and Offset is in range. To work around this, we translate texelFetchOffset into texelFetch
// by adding Offset directly to Location before reading the texture. // by adding Offset directly to Location before reading the texture.
angle::Feature preAddTexelFetchOffsets = { Feature preAddTexelFetchOffsets = {
"pre_add_texel_fetch_offsets", angle::FeatureCategory::D3DWorkarounds, "pre_add_texel_fetch_offsets", FeatureCategory::D3DWorkarounds,
"On some Intel drivers, HLSL's function texture.Load returns 0 when the parameter Location " "On some Intel drivers, HLSL's function texture.Load returns 0 when the parameter Location "
"is negative, even if the sum of Offset and Location is in range", "is negative, even if the sum of Offset and Location is in range",
&members}; &members};
...@@ -111,8 +111,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -111,8 +111,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// On some AMD drivers, 1x1 and 2x2 mips of depth/stencil textures aren't sampled correctly. // On some AMD drivers, 1x1 and 2x2 mips of depth/stencil textures aren't sampled correctly.
// We can work around this bug by doing an internal blit to a temporary single-channel texture // We can work around this bug by doing an internal blit to a temporary single-channel texture
// before we sample. // before we sample.
angle::Feature emulateTinyStencilTextures = { Feature emulateTinyStencilTextures = {
"emulate_tiny_stencil_textures", angle::FeatureCategory::D3DWorkarounds, "emulate_tiny_stencil_textures", FeatureCategory::D3DWorkarounds,
"On some AMD drivers, 1x1 and 2x2 mips of depth/stencil textures aren't sampled correctly", "On some AMD drivers, 1x1 and 2x2 mips of depth/stencil textures aren't sampled correctly",
&members}; &members};
...@@ -121,17 +121,16 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -121,17 +121,16 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// R8G8B8A8 format. This bug is fixed in version 4539 on Intel drivers. // R8G8B8A8 format. This bug is fixed in version 4539 on Intel drivers.
// On older AMD drivers, the data in DXGI_FORMAT_B5G6R5_UNORM becomes corrupted for unknown // On older AMD drivers, the data in DXGI_FORMAT_B5G6R5_UNORM becomes corrupted for unknown
// reasons. // reasons.
angle::Feature disableB5G6R5Support = {"disable_b5g6r5_support", Feature disableB5G6R5Support = {"disable_b5g6r5_support", FeatureCategory::D3DWorkarounds,
angle::FeatureCategory::D3DWorkarounds, "On Intel and AMD drivers, textures with the format "
"On Intel and AMD drivers, textures with the format " "DXGI_FORMAT_B5G6R5_UNORM have incorrect data",
"DXGI_FORMAT_B5G6R5_UNORM have incorrect data", &members};
&members};
// On some Intel drivers, evaluating unary minus operator on integer may get wrong answer in // On some Intel drivers, evaluating unary minus operator on integer may get wrong answer in
// vertex shaders. To work around this bug, we translate -(int) into ~(int)+1. // vertex shaders. To work around this bug, we translate -(int) into ~(int)+1.
// This driver bug is fixed in 20.19.15.4624. // This driver bug is fixed in 20.19.15.4624.
angle::Feature rewriteUnaryMinusOperator = { Feature rewriteUnaryMinusOperator = {
"rewrite_unary_minus_operator", angle::FeatureCategory::D3DWorkarounds, "rewrite_unary_minus_operator", FeatureCategory::D3DWorkarounds,
"On some Intel drivers, evaluating unary minus operator on integer may " "On some Intel drivers, evaluating unary minus operator on integer may "
"get wrong answer in vertex shaders", "get wrong answer in vertex shaders",
&members}; &members};
...@@ -140,24 +139,24 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -140,24 +139,24 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// this bug, we use an expression to emulate function isnan(). // this bug, we use an expression to emulate function isnan().
// Tracking bug: https://crbug.com/650547 // Tracking bug: https://crbug.com/650547
// This driver bug is fixed in 21.20.16.4542. // This driver bug is fixed in 21.20.16.4542.
angle::Feature emulateIsnanFloat = { Feature emulateIsnanFloat = {
"emulate_isnan_float", angle::FeatureCategory::D3DWorkarounds, "emulate_isnan_float", FeatureCategory::D3DWorkarounds,
"On some Intel drivers, using isnan() on highp float will get wrong answer", &members, "On some Intel drivers, using isnan() on highp float will get wrong answer", &members,
"https://crbug.com/650547"}; "https://crbug.com/650547"};
// On some Intel drivers, using clear() may not take effect. To work around this bug, we call // On some Intel drivers, using clear() may not take effect. To work around this bug, we call
// clear() twice on these platforms. // clear() twice on these platforms.
// Tracking bug: https://crbug.com/655534 // Tracking bug: https://crbug.com/655534
angle::Feature callClearTwice = {"call_clear_twice", angle::FeatureCategory::D3DWorkarounds, Feature callClearTwice = {"call_clear_twice", FeatureCategory::D3DWorkarounds,
"On some Intel drivers, using clear() may not take effect", "On some Intel drivers, using clear() may not take effect", &members,
&members, "https://crbug.com/655534"}; "https://crbug.com/655534"};
// On some Intel drivers, copying from staging storage to constant buffer storage does not // On some Intel drivers, copying from staging storage to constant buffer storage does not
// seem to work. Work around this by keeping system memory storage as a canonical reference // seem to work. Work around this by keeping system memory storage as a canonical reference
// for buffer data. // for buffer data.
// D3D11-only workaround. See http://crbug.com/593024. // D3D11-only workaround. See http://crbug.com/593024.
angle::Feature useSystemMemoryForConstantBuffers = { Feature useSystemMemoryForConstantBuffers = {
"use_system_memory_for_constant_buffers", angle::FeatureCategory::D3DWorkarounds, "use_system_memory_for_constant_buffers", FeatureCategory::D3DWorkarounds,
"On some Intel drivers, copying from staging storage to constant buffer " "On some Intel drivers, copying from staging storage to constant buffer "
"storage does not work", "storage does not work",
&members, "https://crbug.com/593024"}; &members, "https://crbug.com/593024"};
...@@ -165,9 +164,10 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -165,9 +164,10 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// This workaround is for the ANGLE_multiview extension. If enabled the viewport or render // This workaround is for the ANGLE_multiview extension. If enabled the viewport or render
// target slice will be selected in the geometry shader stage. The workaround flag is added to // target slice will be selected in the geometry shader stage. The workaround flag is added to
// make it possible to select the code path in end2end and performance tests. // make it possible to select the code path in end2end and performance tests.
angle::Feature selectViewInGeometryShader = { Feature selectViewInGeometryShader = {
"select_view_in_geometry_shader", angle::FeatureCategory::D3DWorkarounds, "select_view_in_geometry_shader", FeatureCategory::D3DWorkarounds,
"The viewport or render target slice will be selected in the geometry shader stage", "The viewport or render target slice will be selected in the geometry shader stage for "
"the ANGLE_multiview extension",
&members}; &members};
// When rendering with no render target on D3D, two bugs lead to incorrect behavior on Intel // When rendering with no render target on D3D, two bugs lead to incorrect behavior on Intel
...@@ -179,8 +179,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -179,8 +179,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// 2. If ID3D11BlendState.RenderTarget[].RenderTargetWriteMask is 0 and rendertarget is not set, // 2. If ID3D11BlendState.RenderTarget[].RenderTargetWriteMask is 0 and rendertarget is not set,
// then rendering samples also pass neglecting discard statements in pixel shader. // then rendering samples also pass neglecting discard statements in pixel shader.
// So we add a dummy texture as render target in such case. See http://anglebug.com/2152 // So we add a dummy texture as render target in such case. See http://anglebug.com/2152
angle::Feature addDummyTextureNoRenderTarget = { Feature addDummyTextureNoRenderTarget = {
"add_dummy_texture_no_render_target", angle::FeatureCategory::D3DWorkarounds, "add_dummy_texture_no_render_target", FeatureCategory::D3DWorkarounds,
"On D3D ntel drivers <4815 when rendering with no render target, two " "On D3D ntel drivers <4815 when rendering with no render target, two "
"bugs lead to incorrect behavior", "bugs lead to incorrect behavior",
&members, "http://anglebug.com/2152"}; &members, "http://anglebug.com/2152"};
...@@ -188,8 +188,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -188,8 +188,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// Don't use D3D constant register zero when allocating space for uniforms in the vertex shader. // Don't use D3D constant register zero when allocating space for uniforms in the vertex shader.
// This is targeted to work around a bug in NVIDIA D3D driver version 388.59 where in very // This is targeted to work around a bug in NVIDIA D3D driver version 388.59 where in very
// specific cases the driver would not handle constant register zero correctly. // specific cases the driver would not handle constant register zero correctly.
angle::Feature skipVSConstantRegisterZero = { Feature skipVSConstantRegisterZero = {
"skip_vs_constant_register_zero", angle::FeatureCategory::D3DWorkarounds, "skip_vs_constant_register_zero", FeatureCategory::D3DWorkarounds,
"On NVIDIA D3D driver v388.59 in specific cases the driver doesn't " "On NVIDIA D3D driver v388.59 in specific cases the driver doesn't "
"handle constant register zero correctly", "handle constant register zero correctly",
&members}; &members};
...@@ -199,8 +199,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase ...@@ -199,8 +199,8 @@ struct WorkaroundsD3D : angle::FeatureSetBase
// RWByteAddressBuffer.InterlockedAdd does not get resolved when used in the .yzw components of // RWByteAddressBuffer.InterlockedAdd does not get resolved when used in the .yzw components of
// a RWByteAddressBuffer.Store operation. Only has an effect on HLSL translation. // a RWByteAddressBuffer.Store operation. Only has an effect on HLSL translation.
// http://anglebug.com/3246 // http://anglebug.com/3246
angle::Feature forceAtomicValueResolution = { Feature forceAtomicValueResolution = {
"force_atomic_value_resolution", angle::FeatureCategory::D3DWorkarounds, "force_atomic_value_resolution", FeatureCategory::D3DWorkarounds,
"On an NVIDIA D3D driver, the return value from RWByteAddressBuffer.InterlockedAdd does " "On an NVIDIA D3D driver, the return value from RWByteAddressBuffer.InterlockedAdd does "
"not resolve when used in the .yzw components of a RWByteAddressBuffer.Store operation", "not resolve when used in the .yzw components of a RWByteAddressBuffer.Store operation",
&members, "http://anglebug.com/3246"}; &members, "http://anglebug.com/3246"};
......
...@@ -44,7 +44,7 @@ struct WorkaroundsGL : angle::FeatureSetBase ...@@ -44,7 +44,7 @@ struct WorkaroundsGL : angle::FeatureSetBase
angle::Feature doesSRGBClearsOnLinearFramebufferAttachments = { angle::Feature doesSRGBClearsOnLinearFramebufferAttachments = {
"does_srgb_clears_on_linear_framebuffer_attachments", "does_srgb_clears_on_linear_framebuffer_attachments",
angle::FeatureCategory::OpenGLWorkarounds, angle::FeatureCategory::OpenGLWorkarounds,
"Issue clearing framebuffers with linear attachments on Indel or AMD " "Issue clearing framebuffers with linear attachments on Intel or AMD "
"drivers when GL_FRAMEBUFFER_SRGB is enabled", "drivers when GL_FRAMEBUFFER_SRGB is enabled",
&members}; &members};
...@@ -57,7 +57,7 @@ struct WorkaroundsGL : angle::FeatureSetBase ...@@ -57,7 +57,7 @@ struct WorkaroundsGL : angle::FeatureSetBase
// Work around this by rewriting the do-while to use another GLSL construct (block + while) // Work around this by rewriting the do-while to use another GLSL construct (block + while)
angle::Feature doWhileGLSLCausesGPUHang = { angle::Feature doWhileGLSLCausesGPUHang = {
"do_while_glsl_causes_gpu_hang", angle::FeatureCategory::OpenGLWorkarounds, "do_while_glsl_causes_gpu_hang", angle::FeatureCategory::OpenGLWorkarounds,
"On Mac some GLSL constructs involving do-while loops cause GPU hangs", &members}; "On Mac, some GLSL constructs involving do-while loops cause GPU hangs", &members};
// Calling glFinish doesn't cause all queries to report that the result is available on some // Calling glFinish doesn't cause all queries to report that the result is available on some
// (NVIDIA) drivers. It was found that enabling GL_DEBUG_OUTPUT_SYNCHRONOUS before the finish // (NVIDIA) drivers. It was found that enabling GL_DEBUG_OUTPUT_SYNCHRONOUS before the finish
...@@ -98,7 +98,7 @@ struct WorkaroundsGL : angle::FeatureSetBase ...@@ -98,7 +98,7 @@ struct WorkaroundsGL : angle::FeatureSetBase
// Emulate abs(i) with i * sign(i). // Emulate abs(i) with i * sign(i).
angle::Feature emulateAbsIntFunction = { angle::Feature emulateAbsIntFunction = {
"emulate_abs_int_function", angle::FeatureCategory::OpenGLWorkarounds, "emulate_abs_int_function", angle::FeatureCategory::OpenGLWorkarounds,
"On Intel mac, abs(i) where i is an integer returns unexpected result", &members}; "On Intel Mac, abs(i) where i is an integer returns unexpected result", &members};
// On Intel Mac, calculation of loop conditions in for and while loop has bug. // On Intel Mac, calculation of loop conditions in for and while loop has bug.
// Add "&& true" to the end of the condition expression to work around the bug. // Add "&& true" to the end of the condition expression to work around the bug.
...@@ -144,7 +144,7 @@ struct WorkaroundsGL : angle::FeatureSetBase ...@@ -144,7 +144,7 @@ struct WorkaroundsGL : angle::FeatureSetBase
angle::Feature useUnusedBlocksWithStandardOrSharedLayout = { angle::Feature useUnusedBlocksWithStandardOrSharedLayout = {
"use_unused_blocks_with_standard_or_shared_layout", "use_unused_blocks_with_standard_or_shared_layout",
angle::FeatureCategory::OpenGLWorkarounds, angle::FeatureCategory::OpenGLWorkarounds,
"On Mac with OpenGL version 4.1, unused std140 or shared uniform blocks " "On Mac with OpenGL version 4.1 and Linux AMD, unused std140 or shared uniform blocks "
"will be treated as inactive", "will be treated as inactive",
&members}; &members};
...@@ -264,7 +264,7 @@ struct WorkaroundsGL : angle::FeatureSetBase ...@@ -264,7 +264,7 @@ struct WorkaroundsGL : angle::FeatureSetBase
// platforms. // platforms.
// http://anglebug.com/3045 // http://anglebug.com/3045
angle::Feature dontRelinkProgramsInParallel = { angle::Feature dontRelinkProgramsInParallel = {
"query_counter_bits_generates_errors", angle::FeatureCategory::OpenGLWorkarounds, "dont_relink_programs_in_parallel", angle::FeatureCategory::OpenGLWorkarounds,
"On some Intel Windows OpenGL drivers and Android, relinking a program " "On some Intel Windows OpenGL drivers and Android, relinking a program "
"in parallel is buggy", "in parallel is buggy",
&members, "http://anglebug.com/3045"}; &members, "http://anglebug.com/3045"};
......
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