loader: Prevent crash from VK_KHR_display
authorLenny Komow <lenny@lunarg.com>
Tue, 27 Apr 2021 21:25:09 +0000 (15:25 -0600)
committerLenny Komow <lenny@lunarg.com>
Tue, 27 Apr 2021 22:57:13 +0000 (16:57 -0600)
Previously, we assumed that the extension VK_KHR_display would be
available on all systems. This appears to no longer be the case. If we
get two ICDs, one which supports the extension and one which does not,
we used to get a crash if trying to call any function from the
extension on the physical device which did not support it. This solves
that crash

loader/wsi.c

index 7e877762cc162676ba6b704d94dbf99725d86f8d..ed8b27cd32499a808d7bc96fa0c38a1d2a632f99 100644 (file)
@@ -1620,9 +1620,8 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPropertiesKHR(
     }
 
     if (NULL == icd_term->dispatch.GetPhysicalDeviceDisplayPropertiesKHR) {
-        loader_log(ptr_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
-                   "ICD for selected physical device is not exporting vkGetPhysicalDeviceDisplayPropertiesKHR!\n");
-        assert(false && "loader: null GetPhysicalDeviceDisplayPropertiesKHR ICD pointer");
+        *pPropertyCount = 0;
+        return VK_SUCCESS;
     }
 
     return icd_term->dispatch.GetPhysicalDeviceDisplayPropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, pProperties);
@@ -1651,9 +1650,8 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlanePropertie
     }
 
     if (NULL == icd_term->dispatch.GetPhysicalDeviceDisplayPlanePropertiesKHR) {
-        loader_log(ptr_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
-                   "ICD for selected physical device is not exporting vkGetPhysicalDeviceDisplayPlanePropertiesKHR!\n");
-        assert(false && "loader: null GetPhysicalDeviceDisplayPlanePropertiesKHR ICD pointer");
+        *pPropertyCount = 0;
+        return VK_SUCCESS;
     }
 
     return icd_term->dispatch.GetPhysicalDeviceDisplayPlanePropertiesKHR(phys_dev_term->phys_dev, pPropertyCount, pProperties);