Ver Fonte

Merge pull request #11017 from bunnei/fix-turnip-sd870

video_core: vulkan_device: Disable timeline semaphore on Turnip, fix qcom version check.
bunnei há 3 anos atrás
pai
commit
4467fd9993

+ 15 - 2
src/video_core/vulkan_common/vulkan_device.cpp

@@ -500,7 +500,8 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
     }
     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)) {
+        if (version >= VK_MAKE_API_VERSION(0, 0, 676, 0) &&
+            version < VK_MAKE_API_VERSION(0, 0, 680, 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");
@@ -540,7 +541,8 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
     }
     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)) {
+        if (version >= VK_MAKE_API_VERSION(0, 0, 676, 0) &&
+            version < VK_MAKE_API_VERSION(0, 0, 680, 0)) {
             // Qualcomm Adreno 7xx drivers do not properly support vertex_input_dynamic_state.
             LOG_WARNING(
                 Render_Vulkan,
@@ -798,6 +800,17 @@ bool Device::ShouldBoostClocks() const {
     return validated_driver && !is_steam_deck && !is_debugging;
 }
 
+bool Device::HasTimelineSemaphore() const {
+    if (GetDriverID() == VK_DRIVER_ID_QUALCOMM_PROPRIETARY ||
+        GetDriverID() == VK_DRIVER_ID_MESA_TURNIP) {
+        // Timeline semaphores do not work properly on all Qualcomm drivers.
+        // They generally work properly with Turnip drivers, but are problematic on some devices
+        // (e.g. ZTE handsets with Snapdragon 870).
+        return false;
+    }
+    return features.timeline_semaphore.timelineSemaphore;
+}
+
 bool Device::GetSuitability(bool requires_swapchain) {
     // Assume we will be suitable.
     bool suitable = true;

+ 1 - 7
src/video_core/vulkan_common/vulkan_device.h

@@ -528,13 +528,7 @@ public:
         return extensions.shader_atomic_int64;
     }
 
-    bool HasTimelineSemaphore() const {
-        if (GetDriverID() == VK_DRIVER_ID_QUALCOMM_PROPRIETARY) {
-            // Timeline semaphores do not work properly on all Qualcomm drivers.
-            return false;
-        }
-        return features.timeline_semaphore.timelineSemaphore;
-    }
+    bool HasTimelineSemaphore() const;
 
     /// Returns the minimum supported version of SPIR-V.
     u32 SupportedSpirvVersion() const {