From: Samuel Pitoiset Date: Wed, 29 Apr 2020 11:23:22 +0000 (+0200) Subject: radv: don't report error with other vendor DRM devices X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8d993c9d2c23d70d48248c9a8f8bc2855e12b18f;p=mesa.git radv: don't report error with other vendor DRM devices Enumeration should just skip unsupported DRM devices. Cc: Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index a28440e5fe3..6fd80ad16a0 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -746,7 +746,7 @@ radv_enumerate_physical_devices(struct radv_instance *instance) { /* TODO: Check for more devices ? */ drmDevicePtr devices[8]; - VkResult result = VK_ERROR_INCOMPATIBLE_DRIVER; + VkResult result = VK_SUCCESS; int max_devices; instance->physicalDeviceCount = 0; @@ -770,7 +770,7 @@ radv_enumerate_physical_devices(struct radv_instance *instance) radv_logi("Found %d drm nodes", max_devices); if (max_devices < 1) - return vk_error(instance, VK_ERROR_INCOMPATIBLE_DRIVER); + return vk_error(instance, VK_SUCCESS); for (unsigned i = 0; i < (unsigned)max_devices; i++) { if (devices[i]->available_nodes & 1 << DRM_NODE_RENDER && @@ -781,14 +781,22 @@ radv_enumerate_physical_devices(struct radv_instance *instance) instance->physicalDeviceCount, instance, devices[i]); - if (result == VK_SUCCESS) - ++instance->physicalDeviceCount; - else if (result != VK_ERROR_INCOMPATIBLE_DRIVER) + /* Incompatible DRM device, skip. */ + if (result == VK_ERROR_INCOMPATIBLE_DRIVER) { + result = VK_SUCCESS; + continue; + } + + /* Error creating the physical device, report the error. */ + if (result != VK_SUCCESS) break; + + ++instance->physicalDeviceCount; } } drmFreeDevices(devices, max_devices); + /* If we successfully enumerated any devices, call it success */ return result; } @@ -802,8 +810,7 @@ VkResult radv_EnumeratePhysicalDevices( if (instance->physicalDeviceCount < 0) { result = radv_enumerate_physical_devices(instance); - if (result != VK_SUCCESS && - result != VK_ERROR_INCOMPATIBLE_DRIVER) + if (result != VK_SUCCESS) return result; } @@ -829,8 +836,7 @@ VkResult radv_EnumeratePhysicalDeviceGroups( if (instance->physicalDeviceCount < 0) { result = radv_enumerate_physical_devices(instance); - if (result != VK_SUCCESS && - result != VK_ERROR_INCOMPATIBLE_DRIVER) + if (result != VK_SUCCESS) return result; }