From 983f86f9b5f5de9ce37349f42c38d6418218126f Mon Sep 17 00:00:00 2001 From: Charles Giessen Date: Tue, 20 Jan 2026 09:34:28 -0600 Subject: vulkaninfo: Fix string printing in VK_KHR_display Strings must be printed with the PrintString/PrintKeyString functions in order to properly escape and quote them in the JSON output. --- scripts/generators/vulkaninfo_generator.py | 16 +++++++++++----- vulkaninfo/generated/vulkaninfo.hpp | 6 +++++- vulkaninfo/vulkaninfo.cpp | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/scripts/generators/vulkaninfo_generator.py b/scripts/generators/vulkaninfo_generator.py index 86a32c48..472459ac 100644 --- a/scripts/generators/vulkaninfo_generator.py +++ b/scripts/generators/vulkaninfo_generator.py @@ -817,13 +817,19 @@ std::vector> enumerate_supported_video_profiles if max_key_len > 0: out.append(f' p.SetMinKeyWidth({max_key_len});\n') for v in struct.members: + # strings + if v.type == 'char': + if v.pointer == True: + out.append(f' if (obj.{v.name} == nullptr) {{') + out.append(f' p.PrintKeyString("{v.name}", "NULL");\n') + out.append(' } else {') + out.append(f' p.PrintKeyString("{v.name}", obj.{v.name});\n') + if v.pointer == True: + out.append(' }') # arrays - if v.length is not None: - # strings - if v.type == 'char': - out.append(f' p.PrintKeyString("{v.name}", obj.{v.name});\n') + elif v.length is not None: # uuid's - elif v.type == 'uint8_t' and (v.fixedSizeArray[0] == 'VK_LUID_SIZE' or v.fixedSizeArray[0] == 'VK_UUID_SIZE'): # VK_UUID_SIZE + if v.type == 'uint8_t' and (v.fixedSizeArray[0] == 'VK_LUID_SIZE' or v.fixedSizeArray[0] == 'VK_UUID_SIZE'): # VK_UUID_SIZE if v.fixedSizeArray[0] == 'VK_LUID_SIZE': out.append(' if (obj.deviceLUIDValid) { // special case\n') out.append(f' p.PrintKeyValue("{v.name}", obj.{v.name});\n') diff --git a/vulkaninfo/generated/vulkaninfo.hpp b/vulkaninfo/generated/vulkaninfo.hpp index d52d8001..39e4b188 100644 --- a/vulkaninfo/generated/vulkaninfo.hpp +++ b/vulkaninfo/generated/vulkaninfo.hpp @@ -5004,7 +5004,11 @@ void DumpVkDisplayPlanePropertiesKHR(Printer &p, std::string name, const VkDispl void DumpVkDisplayPropertiesKHR(Printer &p, std::string name, const VkDisplayPropertiesKHR &obj) { ObjectWrapper object{p, name}; p.SetMinKeyWidth(20); - p.PrintKeyValue("displayName", obj.displayName); + if (obj.displayName == nullptr) { + p.PrintKeyString("displayName", "NULL"); + } else { + p.PrintKeyString("displayName", obj.displayName); + } DumpVkExtent2D(p, "physicalDimensions", obj.physicalDimensions); DumpVkExtent2D(p, "physicalResolution", obj.physicalResolution); DumpVkSurfaceTransformFlagsKHR(p, "supportedTransforms", obj.supportedTransforms); diff --git a/vulkaninfo/vulkaninfo.cpp b/vulkaninfo/vulkaninfo.cpp index ba562189..2c11226a 100644 --- a/vulkaninfo/vulkaninfo.cpp +++ b/vulkaninfo/vulkaninfo.cpp @@ -884,7 +884,7 @@ void GpuDumpDisplayPlanes(Printer &p, AppGpu &gpu) { auto *current = gpu.FindDisplay(plane.properties.currentDisplay); - p.PrintKeyValue("currentDisplay", current ? current->name.c_str() : "none"); + p.PrintKeyString("currentDisplay", current ? current->name.c_str() : "none"); DumpVkDisplayPlanePropertiesKHR(p, "VkDisplayPlanePropertiesKHR", plane.properties); -- cgit v1.2.3