aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Giessen <charles@lunarg.com>2019-12-17 10:12:42 -0700
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>2019-12-17 11:21:51 -0700
commit9c5719ab7149058d452f78255c42d6083644ffca (patch)
treef1a688a6d913c1440f12c97c2f75c9424cb360dd
parent0c2618b2c31e2f216e131ff4c1c83e2c92c6ae66 (diff)
downloadusermoji-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.cpp9
-rw-r--r--vulkaninfo/vulkaninfo.h8
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;
}