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; }