aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libANGLE/renderer/vulkan/vk_renderer.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/libANGLE/renderer/vulkan/vk_renderer.cpp b/src/libANGLE/renderer/vulkan/vk_renderer.cpp
index 4794abf480..da63d68870 100644
--- a/src/libANGLE/renderer/vulkan/vk_renderer.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_renderer.cpp
@@ -4675,7 +4675,12 @@ void Renderer::initFeatures(const vk::ExtensionNameList &deviceExtensionNames,
// http://issuetracker.google.com/287318431
//
// On Pixel devices, the issues have been fixed since r44, but on others since r44p1.
- const bool isArm44OrLess = isARM && armDriverVersion < ARMDriverVersion(44, 1, 0);
+ //
+ // Regressions have been detected using r46 on older architectures though
+ // http://issuetracker.google.com/336411904
+ const bool isExtendedDynamicStateBuggy =
+ (isARM && armDriverVersion < ARMDriverVersion(44, 1, 0)) ||
+ (isMaliJobManagerBasedGPU && armDriverVersion >= ARMDriverVersion(46, 0, 0));
// Vertex input binding stride is buggy for Windows/Intel drivers before 100.9684.
const bool isVertexInputBindingStrideBuggy =
@@ -4687,9 +4692,9 @@ void Renderer::initFeatures(const vk::ExtensionNameList &deviceExtensionNames,
mVertexInputDynamicStateFeatures.vertexInputDynamicState == VK_TRUE &&
!(IsWindows() && isIntel));
- ANGLE_FEATURE_CONDITION(
- &mFeatures, supportsExtendedDynamicState,
- mExtendedDynamicStateFeatures.extendedDynamicState == VK_TRUE && !isArm44OrLess);
+ ANGLE_FEATURE_CONDITION(&mFeatures, supportsExtendedDynamicState,
+ mExtendedDynamicStateFeatures.extendedDynamicState == VK_TRUE &&
+ !isExtendedDynamicStateBuggy);
// VK_EXT_vertex_input_dynamic_state enables dynamic state for the full vertex input state. As
// such, when available use supportsVertexInputDynamicState instead of
@@ -4697,15 +4702,17 @@ void Renderer::initFeatures(const vk::ExtensionNameList &deviceExtensionNames,
ANGLE_FEATURE_CONDITION(&mFeatures, useVertexInputBindingStrideDynamicState,
mFeatures.supportsExtendedDynamicState.enabled &&
!mFeatures.supportsVertexInputDynamicState.enabled &&
- !isArm44OrLess && !isVertexInputBindingStrideBuggy);
- ANGLE_FEATURE_CONDITION(&mFeatures, useCullModeDynamicState,
- mFeatures.supportsExtendedDynamicState.enabled && !isArm44OrLess);
+ !isExtendedDynamicStateBuggy && !isVertexInputBindingStrideBuggy);
+ ANGLE_FEATURE_CONDITION(
+ &mFeatures, useCullModeDynamicState,
+ mFeatures.supportsExtendedDynamicState.enabled && !isExtendedDynamicStateBuggy);
ANGLE_FEATURE_CONDITION(&mFeatures, useDepthCompareOpDynamicState,
mFeatures.supportsExtendedDynamicState.enabled);
ANGLE_FEATURE_CONDITION(&mFeatures, useDepthTestEnableDynamicState,
mFeatures.supportsExtendedDynamicState.enabled);
- ANGLE_FEATURE_CONDITION(&mFeatures, useDepthWriteEnableDynamicState,
- mFeatures.supportsExtendedDynamicState.enabled && !isArm44OrLess);
+ ANGLE_FEATURE_CONDITION(
+ &mFeatures, useDepthWriteEnableDynamicState,
+ mFeatures.supportsExtendedDynamicState.enabled && !isExtendedDynamicStateBuggy);
ANGLE_FEATURE_CONDITION(&mFeatures, useFrontFaceDynamicState,
mFeatures.supportsExtendedDynamicState.enabled);
ANGLE_FEATURE_CONDITION(&mFeatures, useStencilOpDynamicState,
@@ -4713,12 +4720,13 @@ void Renderer::initFeatures(const vk::ExtensionNameList &deviceExtensionNames,
ANGLE_FEATURE_CONDITION(&mFeatures, useStencilTestEnableDynamicState,
mFeatures.supportsExtendedDynamicState.enabled);
- ANGLE_FEATURE_CONDITION(
- &mFeatures, supportsExtendedDynamicState2,
- mExtendedDynamicState2Features.extendedDynamicState2 == VK_TRUE && !isArm44OrLess);
+ ANGLE_FEATURE_CONDITION(&mFeatures, supportsExtendedDynamicState2,
+ mExtendedDynamicState2Features.extendedDynamicState2 == VK_TRUE &&
+ !isExtendedDynamicStateBuggy);
- ANGLE_FEATURE_CONDITION(&mFeatures, usePrimitiveRestartEnableDynamicState,
- mFeatures.supportsExtendedDynamicState2.enabled && !isArm44OrLess);
+ ANGLE_FEATURE_CONDITION(
+ &mFeatures, usePrimitiveRestartEnableDynamicState,
+ mFeatures.supportsExtendedDynamicState2.enabled && !isExtendedDynamicStateBuggy);
ANGLE_FEATURE_CONDITION(&mFeatures, useRasterizerDiscardEnableDynamicState,
mFeatures.supportsExtendedDynamicState2.enabled);
ANGLE_FEATURE_CONDITION(&mFeatures, useDepthBiasEnableDynamicState,