diff options
author | Samuel Pitoiset <[email protected]> | 2020-04-29 13:23:22 +0200 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-05-06 06:44:21 +0000 |
commit | 8d993c9d2c23d70d48248c9a8f8bc2855e12b18f (patch) | |
tree | cdbe43d2b4fbca72be464763bb9247ae617052de | |
parent | f03abd504102fc71ec0b18704a2ea3a92542b5f8 (diff) |
radv: don't report error with other vendor DRM devices
Enumeration should just skip unsupported DRM devices.
Cc: <[email protected]>
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4806>
-rw-r--r-- | src/amd/vulkan/radv_device.c | 24 |
1 files changed, 15 insertions, 9 deletions
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; } |