diff options
| author | Charles Giessen <charles@lunarg.com> | 2019-12-17 10:12:42 -0700 |
|---|---|---|
| committer | Charles Giessen <46324611+charles-lunarg@users.noreply.github.com> | 2019-12-17 11:21:51 -0700 |
| commit | 9c5719ab7149058d452f78255c42d6083644ffca (patch) | |
| tree | f1a688a6d913c1440f12c97c2f75c9424cb360dd | |
| parent | 0c2618b2c31e2f216e131ff4c1c83e2c92c6ae66 (diff) | |
| download | usermoji-9c5719ab7149058d452f78255c42d6083644ffca.tar.xz | |
vulkaninfo: safely handle device groups not supported
Previously, vulkaninfo would hard crash if device groups failed
the call to vkEnumeratePhysicalDeviceGroupsKHR. If an error happens
now the GetGroups call simply returns an empty vector.
Files Modified:
vulkaninfo/vulkaninfo.cpp
vulkaninfo/vulkaninfo.h
Change-Id: I60ed002161523cede53a144be3fad1d4bb0dd1f1
| -rw-r--r-- | vulkaninfo/vulkaninfo.cpp | 9 | ||||
| -rw-r--r-- | vulkaninfo/vulkaninfo.h | 8 |
2 files changed, 14 insertions, 3 deletions
diff --git a/vulkaninfo/vulkaninfo.cpp b/vulkaninfo/vulkaninfo.cpp index 5bac3ba6..83816d15 100644 --- a/vulkaninfo/vulkaninfo.cpp +++ b/vulkaninfo/vulkaninfo.cpp @@ -231,8 +231,15 @@ void DumpPresentableSurfaces(Printer &p, AppInstance &inst, const std::vector<st void DumpGroups(Printer &p, AppInstance &inst) { if (inst.CheckExtensionEnabled(VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME)) { - p.SetHeader().ObjectStart("Groups"); auto groups = GetGroups(inst); + if (groups.size() == 0) { + p.SetHeader().ObjectStart("Groups"); + p.PrintElement("No Device Groups Found"); + p.ObjectEnd(); + p.AddNewline(); + return; + } + p.SetHeader().ObjectStart("Groups"); int group_id = 0; for (auto &group : groups) { p.ObjectStart("Device Group Properties (Group " + std::to_string(group_id) + ")"); diff --git a/vulkaninfo/vulkaninfo.h b/vulkaninfo/vulkaninfo.h index e9864ca4..eba8a9cb 100644 --- a/vulkaninfo/vulkaninfo.h +++ b/vulkaninfo/vulkaninfo.h @@ -998,11 +998,15 @@ std::vector<VkPhysicalDeviceGroupProperties> GetGroups(AppInstance &inst) { VkResult err; do { err = vkEnumeratePhysicalDeviceGroupsKHR(inst.instance, &group_count, NULL); - if (err != VK_SUCCESS && err != VK_INCOMPLETE) ERR_EXIT(err); + if (err != VK_SUCCESS && err != VK_INCOMPLETE) { + return {}; + } groups.resize(group_count); err = vkEnumeratePhysicalDeviceGroupsKHR(inst.instance, &group_count, groups.data()); - if (err != VK_SUCCESS && err != VK_INCOMPLETE) ERR_EXIT(err); + if (err != VK_SUCCESS && err != VK_INCOMPLETE) { + return {}; + } } while (err == VK_INCOMPLETE); return groups; } |
