aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Giessen <charles@lunarg.com>2022-10-27 14:11:10 -0600
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>2022-10-28 17:43:29 -0600
commitc09f4a4ee47174117e4cad075ae59ce25612fe45 (patch)
tree9b0ee83139b048a41ce004889006dea29d20c9a6
parent25fc297edb10221e321f51addc5fff40023b0dcc (diff)
downloadusermoji-c09f4a4ee47174117e4cad075ae59ce25612fe45.tar.xz
vulkaninfo: Improve array printing
Make the autogen use for loops instead of outputing printers for each array element, since its needlessly verbose. Make UUID and LUID printers use operator<< instead of to_string. This simplifies the logic and makes sure that the array is printed correctly everywhere, rather than requiring calling code to use to_string_XX() where needed.
-rw-r--r--scripts/vulkaninfo_generator.py11
-rw-r--r--vulkaninfo/generated/vulkaninfo.hpp154
-rw-r--r--vulkaninfo/outputprinter.h26
-rw-r--r--vulkaninfo/vulkaninfo.cpp6
4 files changed, 75 insertions, 122 deletions
diff --git a/scripts/vulkaninfo_generator.py b/scripts/vulkaninfo_generator.py
index 1eba3e11..4fac2cfa 100644
--- a/scripts/vulkaninfo_generator.py
+++ b/scripts/vulkaninfo_generator.py
@@ -545,11 +545,7 @@ def PrintStructure(struct, types_to_gen, structure_names, aliases):
elif v.typeID == "uint8_t" and (v.arrayLength == '8' or v.arrayLength == '16'): # VK_UUID_SIZE
if v.arrayLength == '8':
out += ' if (obj.deviceLUIDValid) { // special case\n'
- out += f''' if (p.Type() == OutputType::json) {{
- ArrayWrapper arr(p, "{v.name}");
- for (uint32_t i = 0; i < {v.arrayLength}; i++) p.PrintElement(static_cast<uint32_t>(obj.{v.name}[i]));
- }} else
- p.PrintKeyString("{v.name}", to_string_{v.arrayLength}(obj.{v.name}));\n'''
+ out += f' p.PrintKeyValue("{v.name}", obj.{v.name});\n'
if v.arrayLength == '8':
out += ' }\n'
elif struct.name == "VkQueueFamilyGlobalPriorityPropertiesKHR" and v.name == "priorities":
@@ -561,9 +557,8 @@ def PrintStructure(struct, types_to_gen, structure_names, aliases):
out += f' p.PrintString(VkQueueGlobalPriorityKHRString(obj.priorities[i]));\n'
out += f" }}\n"
elif v.arrayLength.isdigit():
- out += f' {{ ArrayWrapper arr(p,"{v.name}", ' + v.arrayLength + ');\n'
- for i in range(0, int(v.arrayLength)):
- out += f" p.PrintElement(obj.{v.name}[{str(i)}]);\n"
+ out += f' {{\n ArrayWrapper arr(p,"{v.name}", ' + v.arrayLength + ');\n'
+ out += f' for (uint32_t i = 0; i < {v.arrayLength}; i++) {{ p.PrintElement(obj.{v.name}[i]); }}\n'
out += f" }}\n"
else: # dynamic array length based on other member
out += f' ArrayWrapper arr(p,"{v.name}", obj.' + v.arrayLength + ');\n'
diff --git a/vulkaninfo/generated/vulkaninfo.hpp b/vulkaninfo/generated/vulkaninfo.hpp
index 475f7626..13bab86c 100644
--- a/vulkaninfo/generated/vulkaninfo.hpp
+++ b/vulkaninfo/generated/vulkaninfo.hpp
@@ -1703,22 +1703,10 @@ void DumpVkPhysicalDeviceHostQueryResetFeatures(Printer &p, std::string name, co
void DumpVkPhysicalDeviceIDProperties(Printer &p, std::string name, const VkPhysicalDeviceIDProperties &obj) {
ObjectWrapper object{p, name};
p.SetMinKeyWidth(15);
- if (p.Type() == OutputType::json) {
- ArrayWrapper arr(p, "deviceUUID");
- for (uint32_t i = 0; i < 16; i++) p.PrintElement(static_cast<uint32_t>(obj.deviceUUID[i]));
- } else
- p.PrintKeyString("deviceUUID", to_string_16(obj.deviceUUID));
- if (p.Type() == OutputType::json) {
- ArrayWrapper arr(p, "driverUUID");
- for (uint32_t i = 0; i < 16; i++) p.PrintElement(static_cast<uint32_t>(obj.driverUUID[i]));
- } else
- p.PrintKeyString("driverUUID", to_string_16(obj.driverUUID));
+ p.PrintKeyValue("deviceUUID", obj.deviceUUID);
+ p.PrintKeyValue("driverUUID", obj.driverUUID);
if (obj.deviceLUIDValid) { // special case
- if (p.Type() == OutputType::json) {
- ArrayWrapper arr(p, "deviceLUID");
- for (uint32_t i = 0; i < 8; i++) p.PrintElement(static_cast<uint32_t>(obj.deviceLUID[i]));
- } else
- p.PrintKeyString("deviceLUID", to_string_8(obj.deviceLUID));
+ p.PrintKeyValue("deviceLUID", obj.deviceLUID);
}
p.PrintKeyValue("deviceNodeMask", obj.deviceNodeMask);
p.PrintKeyBool("deviceLUIDValid", static_cast<bool>(obj.deviceLUIDValid));
@@ -1837,16 +1825,14 @@ void DumpVkPhysicalDeviceLimits(Printer &p, std::string name, const VkPhysicalDe
p.PrintKeyValue("maxFragmentDualSrcAttachments", obj.maxFragmentDualSrcAttachments);
p.PrintKeyValue("maxFragmentCombinedOutputResources", obj.maxFragmentCombinedOutputResources);
p.PrintKeyValue("maxComputeSharedMemorySize", obj.maxComputeSharedMemorySize);
- { ArrayWrapper arr(p,"maxComputeWorkGroupCount", 3);
- p.PrintElement(obj.maxComputeWorkGroupCount[0]);
- p.PrintElement(obj.maxComputeWorkGroupCount[1]);
- p.PrintElement(obj.maxComputeWorkGroupCount[2]);
+ {
+ ArrayWrapper arr(p,"maxComputeWorkGroupCount", 3);
+ for (uint32_t i = 0; i < 3; i++) { p.PrintElement(obj.maxComputeWorkGroupCount[i]); }
}
p.PrintKeyValue("maxComputeWorkGroupInvocations", obj.maxComputeWorkGroupInvocations);
- { ArrayWrapper arr(p,"maxComputeWorkGroupSize", 3);
- p.PrintElement(obj.maxComputeWorkGroupSize[0]);
- p.PrintElement(obj.maxComputeWorkGroupSize[1]);
- p.PrintElement(obj.maxComputeWorkGroupSize[2]);
+ {
+ ArrayWrapper arr(p,"maxComputeWorkGroupSize", 3);
+ for (uint32_t i = 0; i < 3; i++) { p.PrintElement(obj.maxComputeWorkGroupSize[i]); }
}
p.PrintKeyValue("subPixelPrecisionBits", obj.subPixelPrecisionBits);
p.PrintKeyValue("subTexelPrecisionBits", obj.subTexelPrecisionBits);
@@ -1856,13 +1842,13 @@ void DumpVkPhysicalDeviceLimits(Printer &p, std::string name, const VkPhysicalDe
p.PrintKeyValue("maxSamplerLodBias", obj.maxSamplerLodBias);
p.PrintKeyValue("maxSamplerAnisotropy", obj.maxSamplerAnisotropy);
p.PrintKeyValue("maxViewports", obj.maxViewports);
- { ArrayWrapper arr(p,"maxViewportDimensions", 2);
- p.PrintElement(obj.maxViewportDimensions[0]);
- p.PrintElement(obj.maxViewportDimensions[1]);
+ {
+ ArrayWrapper arr(p,"maxViewportDimensions", 2);
+ for (uint32_t i = 0; i < 2; i++) { p.PrintElement(obj.maxViewportDimensions[i]); }
}
- { ArrayWrapper arr(p,"viewportBoundsRange", 2);
- p.PrintElement(obj.viewportBoundsRange[0]);
- p.PrintElement(obj.viewportBoundsRange[1]);
+ {
+ ArrayWrapper arr(p,"viewportBoundsRange", 2);
+ for (uint32_t i = 0; i < 2; i++) { p.PrintElement(obj.viewportBoundsRange[i]); }
}
p.PrintKeyValue("viewportSubPixelBits", obj.viewportSubPixelBits);
p.PrintKeyValue("minMemoryMapAlignment", obj.minMemoryMapAlignment);
@@ -1896,13 +1882,13 @@ void DumpVkPhysicalDeviceLimits(Printer &p, std::string name, const VkPhysicalDe
p.PrintKeyValue("maxCullDistances", obj.maxCullDistances);
p.PrintKeyValue("maxCombinedClipAndCullDistances", obj.maxCombinedClipAndCullDistances);
p.PrintKeyValue("discreteQueuePriorities", obj.discreteQueuePriorities);
- { ArrayWrapper arr(p,"pointSizeRange", 2);
- p.PrintElement(obj.pointSizeRange[0]);
- p.PrintElement(obj.pointSizeRange[1]);
+ {
+ ArrayWrapper arr(p,"pointSizeRange", 2);
+ for (uint32_t i = 0; i < 2; i++) { p.PrintElement(obj.pointSizeRange[i]); }
}
- { ArrayWrapper arr(p,"lineWidthRange", 2);
- p.PrintElement(obj.lineWidthRange[0]);
- p.PrintElement(obj.lineWidthRange[1]);
+ {
+ ArrayWrapper arr(p,"lineWidthRange", 2);
+ for (uint32_t i = 0; i < 2; i++) { p.PrintElement(obj.lineWidthRange[i]); }
}
p.PrintKeyValue("pointSizeGranularity", obj.pointSizeGranularity);
p.PrintKeyValue("lineWidthGranularity", obj.lineWidthGranularity);
@@ -1947,41 +1933,13 @@ void DumpVkPhysicalDeviceMaintenance4Properties(Printer &p, std::string name, co
void DumpVkPhysicalDeviceMemoryBudgetPropertiesEXT(Printer &p, std::string name, const VkPhysicalDeviceMemoryBudgetPropertiesEXT &obj) {
ObjectWrapper object{p, name};
p.SetMinKeyWidth(14);
- { ArrayWrapper arr(p,"heapBudget", 16);
- p.PrintElement(obj.heapBudget[0]);
- p.PrintElement(obj.heapBudget[1]);
- p.PrintElement(obj.heapBudget[2]);
- p.PrintElement(obj.heapBudget[3]);
- p.PrintElement(obj.heapBudget[4]);
- p.PrintElement(obj.heapBudget[5]);
- p.PrintElement(obj.heapBudget[6]);
- p.PrintElement(obj.heapBudget[7]);
- p.PrintElement(obj.heapBudget[8]);
- p.PrintElement(obj.heapBudget[9]);
- p.PrintElement(obj.heapBudget[10]);
- p.PrintElement(obj.heapBudget[11]);
- p.PrintElement(obj.heapBudget[12]);
- p.PrintElement(obj.heapBudget[13]);
- p.PrintElement(obj.heapBudget[14]);
- p.PrintElement(obj.heapBudget[15]);
+ {
+ ArrayWrapper arr(p,"heapBudget", 16);
+ for (uint32_t i = 0; i < 16; i++) { p.PrintElement(obj.heapBudget[i]); }
}
- { ArrayWrapper arr(p,"heapUsage", 16);
- p.PrintElement(obj.heapUsage[0]);
- p.PrintElement(obj.heapUsage[1]);
- p.PrintElement(obj.heapUsage[2]);
- p.PrintElement(obj.heapUsage[3]);
- p.PrintElement(obj.heapUsage[4]);
- p.PrintElement(obj.heapUsage[5]);
- p.PrintElement(obj.heapUsage[6]);
- p.PrintElement(obj.heapUsage[7]);
- p.PrintElement(obj.heapUsage[8]);
- p.PrintElement(obj.heapUsage[9]);
- p.PrintElement(obj.heapUsage[10]);
- p.PrintElement(obj.heapUsage[11]);
- p.PrintElement(obj.heapUsage[12]);
- p.PrintElement(obj.heapUsage[13]);
- p.PrintElement(obj.heapUsage[14]);
- p.PrintElement(obj.heapUsage[15]);
+ {
+ ArrayWrapper arr(p,"heapUsage", 16);
+ for (uint32_t i = 0; i < 16; i++) { p.PrintElement(obj.heapUsage[i]); }
}
}
void DumpVkPhysicalDeviceMemoryPriorityFeaturesEXT(Printer &p, std::string name, const VkPhysicalDeviceMemoryPriorityFeaturesEXT &obj) {
@@ -2002,31 +1960,27 @@ void DumpVkPhysicalDeviceMeshShaderPropertiesEXT(Printer &p, std::string name, c
ObjectWrapper object{p, name};
p.SetMinKeyWidth(37);
p.PrintKeyValue("maxTaskWorkGroupTotalCount", obj.maxTaskWorkGroupTotalCount);
- { ArrayWrapper arr(p,"maxTaskWorkGroupCount", 3);
- p.PrintElement(obj.maxTaskWorkGroupCount[0]);
- p.PrintElement(obj.maxTaskWorkGroupCount[1]);
- p.PrintElement(obj.maxTaskWorkGroupCount[2]);
+ {
+ ArrayWrapper arr(p,"maxTaskWorkGroupCount", 3);
+ for (uint32_t i = 0; i < 3; i++) { p.PrintElement(obj.maxTaskWorkGroupCount[i]); }
}
p.PrintKeyValue("maxTaskWorkGroupInvocations", obj.maxTaskWorkGroupInvocations);
- { ArrayWrapper arr(p,"maxTaskWorkGroupSize", 3);
- p.PrintElement(obj.maxTaskWorkGroupSize[0]);
- p.PrintElement(obj.maxTaskWorkGroupSize[1]);
- p.PrintElement(obj.maxTaskWorkGroupSize[2]);
+ {
+ ArrayWrapper arr(p,"maxTaskWorkGroupSize", 3);
+ for (uint32_t i = 0; i < 3; i++) { p.PrintElement(obj.maxTaskWorkGroupSize[i]); }
}
p.PrintKeyValue("maxTaskPayloadSize", obj.maxTaskPayloadSize);
p.PrintKeyValue("maxTaskSharedMemorySize", obj.maxTaskSharedMemorySize);
p.PrintKeyValue("maxTaskPayloadAndSharedMemorySize", obj.maxTaskPayloadAndSharedMemorySize);
p.PrintKeyValue("maxMeshWorkGroupTotalCount", obj.maxMeshWorkGroupTotalCount);
- { ArrayWrapper arr(p,"maxMeshWorkGroupCount", 3);
- p.PrintElement(obj.maxMeshWorkGroupCount[0]);
- p.PrintElement(obj.maxMeshWorkGroupCount[1]);
- p.PrintElement(obj.maxMeshWorkGroupCount[2]);
+ {
+ ArrayWrapper arr(p,"maxMeshWorkGroupCount", 3);
+ for (uint32_t i = 0; i < 3; i++) { p.PrintElement(obj.maxMeshWorkGroupCount[i]); }
}
p.PrintKeyValue("maxMeshWorkGroupInvocations", obj.maxMeshWorkGroupInvocations);
- { ArrayWrapper arr(p,"maxMeshWorkGroupSize", 3);
- p.PrintElement(obj.maxMeshWorkGroupSize[0]);
- p.PrintElement(obj.maxMeshWorkGroupSize[1]);
- p.PrintElement(obj.maxMeshWorkGroupSize[2]);
+ {
+ ArrayWrapper arr(p,"maxMeshWorkGroupSize", 3);
+ for (uint32_t i = 0; i < 3; i++) { p.PrintElement(obj.maxMeshWorkGroupSize[i]); }
}
p.PrintKeyValue("maxMeshSharedMemorySize", obj.maxMeshSharedMemorySize);
p.PrintKeyValue("maxMeshPayloadAndSharedMemorySize", obj.maxMeshPayloadAndSharedMemorySize);
@@ -2302,9 +2256,9 @@ void DumpVkPhysicalDeviceSampleLocationsPropertiesEXT(Printer &p, std::string na
p.SetMinKeyWidth(32);
DumpVkSampleCountFlags(p, "sampleLocationSampleCounts", obj.sampleLocationSampleCounts);
DumpVkExtent2D(p, "maxSampleLocationGridSize", obj.maxSampleLocationGridSize);
- { ArrayWrapper arr(p,"sampleLocationCoordinateRange", 2);
- p.PrintElement(obj.sampleLocationCoordinateRange[0]);
- p.PrintElement(obj.sampleLocationCoordinateRange[1]);
+ {
+ ArrayWrapper arr(p,"sampleLocationCoordinateRange", 2);
+ for (uint32_t i = 0; i < 2; i++) { p.PrintElement(obj.sampleLocationCoordinateRange[i]); }
}
p.PrintKeyValue("sampleLocationSubPixelBits", obj.sampleLocationSubPixelBits);
p.PrintKeyBool("variableSampleLocations", static_cast<bool>(obj.variableSampleLocations));
@@ -2443,11 +2397,7 @@ void DumpVkPhysicalDeviceShaderModuleIdentifierFeaturesEXT(Printer &p, std::stri
void DumpVkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(Printer &p, std::string name, const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT &obj) {
ObjectWrapper object{p, name};
p.SetMinKeyWidth(39);
- if (p.Type() == OutputType::json) {
- ArrayWrapper arr(p, "shaderModuleIdentifierAlgorithmUUID");
- for (uint32_t i = 0; i < 16; i++) p.PrintElement(static_cast<uint32_t>(obj.shaderModuleIdentifierAlgorithmUUID[i]));
- } else
- p.PrintKeyString("shaderModuleIdentifierAlgorithmUUID", to_string_16(obj.shaderModuleIdentifierAlgorithmUUID));
+ p.PrintKeyValue("shaderModuleIdentifierAlgorithmUUID", obj.shaderModuleIdentifierAlgorithmUUID);
}
void DumpVkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(Printer &p, std::string name, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures &obj) {
ObjectWrapper object{p, name};
@@ -2612,22 +2562,10 @@ void DumpVkPhysicalDeviceVulkan11Features(Printer &p, std::string name, const Vk
void DumpVkPhysicalDeviceVulkan11Properties(Printer &p, std::string name, const VkPhysicalDeviceVulkan11Properties &obj) {
ObjectWrapper object{p, name};
p.SetMinKeyWidth(33);
- if (p.Type() == OutputType::json) {
- ArrayWrapper arr(p, "deviceUUID");
- for (uint32_t i = 0; i < 16; i++) p.PrintElement(static_cast<uint32_t>(obj.deviceUUID[i]));
- } else
- p.PrintKeyString("deviceUUID", to_string_16(obj.deviceUUID));
- if (p.Type() == OutputType::json) {
- ArrayWrapper arr(p, "driverUUID");
- for (uint32_t i = 0; i < 16; i++) p.PrintElement(static_cast<uint32_t>(obj.driverUUID[i]));
- } else
- p.PrintKeyString("driverUUID", to_string_16(obj.driverUUID));
+ p.PrintKeyValue("deviceUUID", obj.deviceUUID);
+ p.PrintKeyValue("driverUUID", obj.driverUUID);
if (obj.deviceLUIDValid) { // special case
- if (p.Type() == OutputType::json) {
- ArrayWrapper arr(p, "deviceLUID");
- for (uint32_t i = 0; i < 8; i++) p.PrintElement(static_cast<uint32_t>(obj.deviceLUID[i]));
- } else
- p.PrintKeyString("deviceLUID", to_string_8(obj.deviceLUID));
+ p.PrintKeyValue("deviceLUID", obj.deviceLUID);
}
p.PrintKeyValue("deviceNodeMask", obj.deviceNodeMask);
p.PrintKeyBool("deviceLUIDValid", static_cast<bool>(obj.deviceLUIDValid));
diff --git a/vulkaninfo/outputprinter.h b/vulkaninfo/outputprinter.h
index 4dc36ef2..2efd179b 100644
--- a/vulkaninfo/outputprinter.h
+++ b/vulkaninfo/outputprinter.h
@@ -32,7 +32,7 @@
std::string insert_quotes(std::string s) { return "\"" + s + "\""; }
-std::string to_string_16(const uint8_t uid[16]) {
+std::string to_string(const std::array<uint8_t, 16> &uid) {
std::stringstream ss;
ss << std::hex << std::setfill('0');
for (int i = 0; i < 16; ++i) {
@@ -41,8 +41,7 @@ std::string to_string_16(const uint8_t uid[16]) {
}
return ss.str();
}
-
-std::string to_string_8(const uint8_t uid[8]) {
+std::string to_string(const std::array<uint8_t, 8> &uid) {
std::stringstream ss;
ss << std::hex << std::setfill('0');
for (int i = 0; i < 8; ++i) {
@@ -516,6 +515,27 @@ class Printer {
}
}
+ // Need a specialization to handle C style arrays since they are implicitly converted to pointers
+ template <size_t N>
+ void PrintKeyValue(std::string key, const uint8_t (&values)[N]) {
+ switch (output_type) {
+ case (OutputType::json): {
+ ArrayStart(key, N);
+ for (uint32_t i = 0; i < N; i++) {
+ PrintElement(static_cast<uint32_t>(values[i]));
+ }
+ ArrayEnd();
+ break;
+ }
+ default: {
+ std::array<uint8_t, N> arr{};
+ std::copy(std::begin(values), std::end(values), std::begin(arr));
+ PrintKeyString(key, to_string(arr));
+ break;
+ }
+ }
+ }
+
// For printing key - string pairs (necessary because of json)
void PrintKeyString(std::string key, std::string value, std::string value_description = "") {
switch (output_type) {
diff --git a/vulkaninfo/vulkaninfo.cpp b/vulkaninfo/vulkaninfo.cpp
index af723207..cde4653b 100644
--- a/vulkaninfo/vulkaninfo.cpp
+++ b/vulkaninfo/vulkaninfo.cpp
@@ -301,7 +301,7 @@ void GpuDumpProps(Printer &p, AppGpu &gpu) {
p.PrintKeyString("deviceID", to_hex_str(props.deviceID));
p.PrintKeyString("deviceType", VkPhysicalDeviceTypeString(props.deviceType));
p.PrintKeyString("deviceName", props.deviceName);
- p.PrintKeyString("pipelineCacheUUID", to_string_16(props.pipelineCacheUUID));
+ p.PrintKeyValue("pipelineCacheUUID", props.pipelineCacheUUID);
}
p.AddNewline();
DumpVkPhysicalDeviceLimits(p, "VkPhysicalDeviceLimits", gpu.props.limits);
@@ -821,8 +821,8 @@ void DumpSummaryGPU(Printer &p, AppGpu &gpu) {
}
if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES) {
VkPhysicalDeviceIDProperties *device_id_props = reinterpret_cast<VkPhysicalDeviceIDProperties *>(structure);
- p.PrintKeyString("deviceUUID", to_string_16(device_id_props->deviceUUID));
- p.PrintKeyString("driverUUID", to_string_16(device_id_props->driverUUID));
+ p.PrintKeyValue("deviceUUID", device_id_props->deviceUUID);
+ p.PrintKeyValue("driverUUID", device_id_props->driverUUID);
}
place = structure->pNext;
}