From e4f64170c9c754b7c87ce138a5d7493964bd9204 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Sun, 5 Jul 2020 15:17:32 -0700 Subject: libvulkan: fix support for 1.1 vkEnumeratePhysicalDeviceGroups When the icd instance is 1.0, VK_KHR_device_group_creation will be enabled by the loader if the extension is advertised. Then we will try to use vkEnumeratePhysicalDeviceGroupsKHR as a fallback. Bug: 160276146 Test: adb shell cmd gpu vkjson Test: dEQP-VK.api.info.instance.physical_device_groups Change-Id: I9e2d9af66e80244f1d43b54ac2800316200c0d00 --- vulkan/libvulkan/driver.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'vulkan/libvulkan/driver.cpp') diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp index c48d1eebf7..f2712d1f99 100644 --- a/vulkan/libvulkan/driver.cpp +++ b/vulkan/libvulkan/driver.cpp @@ -633,6 +633,7 @@ void CreateInfoWrapper::FilterExtension(const char* name) { hook_extensions_.set(ext_bit); break; case ProcHook::KHR_get_physical_device_properties2: + case ProcHook::KHR_device_group_creation: case ProcHook::EXTENSION_UNKNOWN: // Extensions we don't need to do anything about at this level break; @@ -689,6 +690,7 @@ void CreateInfoWrapper::FilterExtension(const char* name) { case ProcHook::KHR_android_surface: case ProcHook::KHR_get_physical_device_properties2: + case ProcHook::KHR_device_group_creation: case ProcHook::KHR_get_surface_capabilities2: case ProcHook::KHR_surface: case ProcHook::EXT_debug_report: @@ -1266,7 +1268,8 @@ VkResult EnumeratePhysicalDeviceGroups( VkResult result = VK_SUCCESS; const auto& data = GetData(instance); - if (!data.driver.EnumeratePhysicalDeviceGroups) { + if (!data.driver.EnumeratePhysicalDeviceGroups && + !data.driver.EnumeratePhysicalDeviceGroupsKHR) { uint32_t device_count = 0; result = EnumeratePhysicalDevices(instance, &device_count, nullptr); if (result < 0) @@ -1298,9 +1301,15 @@ VkResult EnumeratePhysicalDeviceGroups( pPhysicalDeviceGroupProperties[i].subsetAllocation = 0; } } else { - result = data.driver.EnumeratePhysicalDeviceGroups( - instance, pPhysicalDeviceGroupCount, - pPhysicalDeviceGroupProperties); + if (data.driver.EnumeratePhysicalDeviceGroups) { + result = data.driver.EnumeratePhysicalDeviceGroups( + instance, pPhysicalDeviceGroupCount, + pPhysicalDeviceGroupProperties); + } else { + result = data.driver.EnumeratePhysicalDeviceGroupsKHR( + instance, pPhysicalDeviceGroupCount, + pPhysicalDeviceGroupProperties); + } if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && *pPhysicalDeviceGroupCount && pPhysicalDeviceGroupProperties) { for (uint32_t i = 0; i < *pPhysicalDeviceGroupCount; i++) { -- cgit v1.2.3-59-g8ed1b