Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32c087f2 authored by Chad Versace's avatar Chad Versace Committed by Chris Forbes
Browse files

vulkan: Fix EnumeratePhysicalDeviceGroups()

Fixes CTS failure in dEQP-VK.api.info.instance.physical_device_groups on
Eve (Pixelbook) with Pi.

The Vulkan spec requires that vkEnumeratePhysicalDeviceGroups return
VK_INCOMPLETE when (a) pPhysicalDeviceGroupProperties is not NULL and
(b) *pPhysicalDeviceGroupCount is less than the actual number of groups.

Bug libvulkan/driver.cpp:EnumeratePhysicalDeviceGroups() returned
VK_SUCCESS when (pPhysicalDeviceGroupProperties != NULL &&
*pPhysicalDeviceGroupCount == 0) regardless of the actual number of
groups.

V2: Simplify according to zzyiwei@'s suggestion

Bug: b/114614186
Test: dEQP-VK.api.info.instance.physical_device_groups on eve-arcnext
Change-Id: Ia3067e9d8125ff2b708a4fa674e8283a1f17ba0b
parent 9a55e4a1
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -1165,27 +1165,28 @@ VkResult EnumeratePhysicalDeviceGroups(
        result = EnumeratePhysicalDevices(instance, &device_count, nullptr);
        if (result < 0)
            return result;

        if (!pPhysicalDeviceGroupProperties) {
            *pPhysicalDeviceGroupCount = device_count;
            return result;
        }

        device_count = std::min(device_count, *pPhysicalDeviceGroupCount);
        if (!device_count) {
            *pPhysicalDeviceGroupCount = 0;
            return result;
        }
        device_count = std::min(device_count, *pPhysicalDeviceGroupCount);
        if (!device_count)
            return VK_INCOMPLETE;

        android::Vector<VkPhysicalDevice> devices;
        devices.resize(device_count);

        *pPhysicalDeviceGroupCount = device_count;
        result = EnumeratePhysicalDevices(instance, &device_count,
                                          devices.editArray());
        if (result < 0)
            return result;

        devices.resize(device_count);
        *pPhysicalDeviceGroupCount = device_count;
        for (uint32_t i = 0; i < device_count; ++i) {
            pPhysicalDeviceGroupProperties[i].physicalDeviceCount = 1;
            pPhysicalDeviceGroupProperties[i].physicalDevices[0] = devices[i];