vkinfo: improve formatting
Change-Id: I30f43d730f3181c27e8f6fb5aeb8a9bae7500f22
(cherry picked from commit 43123c167e5f089196da6aaaf8230b075d95748f)
diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
index 7b8d72d..5f4253e 100644
--- a/vulkan/tools/vkinfo.cpp
+++ b/vulkan/tools/vkinfo.cpp
@@ -227,14 +227,14 @@
void PrintExtensions(const std::vector<VkExtensionProperties>& extensions,
const char* prefix) {
for (const auto& e : extensions)
- printf("%s- %s (v%u)\n", prefix, e.extensionName, e.specVersion);
+ printf("%s%s (v%u)\n", prefix, e.extensionName, e.specVersion);
}
void PrintGpuInfo(const GpuInfo& info) {
VkResult result;
std::ostringstream strbuf;
- printf(" - \"%s\" (%s) %u.%u.%u/%#x [%04x:%04x]\n",
+ printf(" \"%s\" (%s) %u.%u.%u/%#x [%04x:%04x]\n",
info.properties.deviceName,
VkPhysicalDeviceTypeStr(info.properties.deviceType),
ExtractMajorVersion(info.properties.apiVersion),
@@ -247,7 +247,8 @@
if ((info.memory.memoryHeaps[heap].flags &
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) != 0)
strbuf << "DEVICE_LOCAL";
- printf(" Heap %u: 0x%" PRIx64 " %s\n", heap,
+ printf(" Heap %u: %" PRIu64 " MiB (0x%" PRIx64 " B) %s\n", heap,
+ info.memory.memoryHeaps[heap].size / 0x1000000,
info.memory.memoryHeaps[heap].size, strbuf.str().c_str());
strbuf.str(std::string());
@@ -273,18 +274,21 @@
for (uint32_t family = 0; family < info.queue_families.size(); family++) {
const VkQueueFamilyProperties& qprops = info.queue_families[family];
- const char* sep = "";
- int bit, queue_flags = static_cast<int>(qprops.queueFlags);
- while ((bit = __builtin_ffs(queue_flags)) != 0) {
- VkQueueFlagBits flag = VkQueueFlagBits(1 << (bit - 1));
- strbuf << sep << VkQueueFlagBitStr(flag);
- queue_flags &= ~flag;
- sep = "+";
- }
- printf(" Queue Family %u: %2ux %s timestamps:%ub\n", family,
- qprops.queueCount, strbuf.str().c_str(),
- qprops.timestampValidBits);
- strbuf.str(std::string());
+ VkQueueFlags flags = qprops.queueFlags;
+ char flags_str[5];
+ flags_str[0] = (flags & VK_QUEUE_GRAPHICS_BIT) ? 'G' : '_';
+ flags_str[1] = (flags & VK_QUEUE_COMPUTE_BIT) ? 'C' : '_';
+ flags_str[2] = (flags & VK_QUEUE_TRANSFER_BIT) ? 'T' : '_';
+ flags_str[3] = (flags & VK_QUEUE_SPARSE_BINDING_BIT) ? 'S' : '_';
+ flags_str[4] = '\0';
+ printf(
+ " Queue Family %u: %ux %s\n"
+ " timestampValidBits: %ub\n"
+ " minImageTransferGranularity: (%u,%u,%u)\n",
+ family, qprops.queueCount, flags_str, qprops.timestampValidBits,
+ qprops.minImageTransferGranularity.width,
+ qprops.minImageTransferGranularity.height,
+ qprops.minImageTransferGranularity.depth);
if (!info.extensions.empty()) {
printf(" Extensions [%zu]:\n", info.extensions.size());
@@ -318,15 +322,13 @@
printf("Instance Layers [%zu]:\n", info.layers.size());
for (size_t i = 0; i < info.layers.size(); i++) {
const auto& layer = info.layers[i];
- printf(" - %s %u.%u.%u/%u \"%s\"\n", layer.layerName,
+ printf(" %s %u.%u.%u/%u \"%s\"\n", layer.layerName,
ExtractMajorVersion(layer.specVersion),
ExtractMinorVersion(layer.specVersion),
ExtractPatchVersion(layer.specVersion),
layer.implementationVersion, layer.description);
if (!info.layer_extensions[i].empty()) {
- printf(" Extensions [%zu]:\n",
- info.layer_extensions.size());
- PrintExtensions(info.layer_extensions[i], " ");
+ PrintExtensions(info.layer_extensions[i], " ");
}
}
}