diff options
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 30 | 
1 files changed, 27 insertions, 3 deletions
| diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 421e71e5a..99ca7dbda 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -485,7 +485,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR              loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME);          }      } -    if (extensions.extended_dynamic_state2 && (is_radv || is_qualcomm)) { +    if (extensions.extended_dynamic_state2 && is_radv) {          const u32 version = (properties.properties.driverVersion << 3) >> 3;          if (version < VK_MAKE_API_VERSION(0, 22, 3, 1)) {              LOG_WARNING( @@ -498,6 +498,19 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR              loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME);          }      } +    if (extensions.extended_dynamic_state2 && is_qualcomm) { +        const u32 version = (properties.properties.driverVersion << 3) >> 3; +        if (version >= VK_MAKE_API_VERSION(0, 0, 676, 0)) { +            // Qualcomm Adreno 7xx drivers do not properly support extended_dynamic_state2. +            LOG_WARNING(Render_Vulkan, +                        "Qualcomm Adreno 7xx drivers have broken VK_EXT_extended_dynamic_state2"); +            features.extended_dynamic_state2.extendedDynamicState2 = false; +            features.extended_dynamic_state2.extendedDynamicState2LogicOp = false; +            features.extended_dynamic_state2.extendedDynamicState2PatchControlPoints = false; +            extensions.extended_dynamic_state2 = false; +            loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); +        } +    }      if (extensions.extended_dynamic_state3 && is_radv) {          LOG_WARNING(Render_Vulkan, "RADV has broken extendedDynamicState3ColorBlendEquation");          features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false; @@ -512,8 +525,7 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR              dynamic_state3_enables = false;          }      } -    if (extensions.vertex_input_dynamic_state && (is_radv || is_qualcomm)) { -        // Qualcomm S8gen2 drivers do not properly support vertex_input_dynamic_state. +    if (extensions.vertex_input_dynamic_state && is_radv) {          // TODO(ameerj): Blacklist only offending driver versions          // TODO(ameerj): Confirm if RDNA1 is affected          const bool is_rdna2 = @@ -526,6 +538,18 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR              loaded_extensions.erase(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME);          }      } +    if (extensions.vertex_input_dynamic_state && is_qualcomm) { +        const u32 version = (properties.properties.driverVersion << 3) >> 3; +        if (version >= VK_MAKE_API_VERSION(0, 0, 676, 0)) { +            // Qualcomm Adreno 7xx drivers do not properly support vertex_input_dynamic_state. +            LOG_WARNING( +                Render_Vulkan, +                "Qualcomm Adreno 7xx drivers have broken VK_EXT_vertex_input_dynamic_state"); +            features.vertex_input_dynamic_state.vertexInputDynamicState = false; +            extensions.vertex_input_dynamic_state = false; +            loaded_extensions.erase(VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME); +        } +    }      sets_per_pool = 64;      if (extensions.extended_dynamic_state3 && is_amd_driver && | 
