vulkaninfo: Support structs from multiple extensions

VkPhysicalDeviceIDProperties can come from 1.1 but also from support for
multiple extensions. This makes the autogen properly check that one of the
required extensions is supported.
diff --git a/scripts/vulkaninfo_generator.py b/scripts/vulkaninfo_generator.py
index 8bdf9ba..99d09ad 100644
--- a/scripts/vulkaninfo_generator.py
+++ b/scripts/vulkaninfo_generator.py
@@ -213,7 +213,9 @@
         for node in self.registry.reg.find('extensions').findall('extension'):
             ext = VulkanExtension(node)
             for item in ext.vktypes:
-                self.extTypes[item] = ext
+                if item not in self.extTypes:
+                    self.extTypes[item] = []
+                self.extTypes[item].append(ext)
             for item in ext.vkfuncs:
                 self.extFuncs[item] = ext
 
@@ -386,7 +388,7 @@
     if name in generator.extFuncs:
         return generator.extFuncs[name]
     elif name in generator.extTypes:
-        return generator.extTypes[name]
+        return generator.extTypes[name][0]
     else:
         return None
 
@@ -643,15 +645,12 @@
         if s.sTypeName is None:
             continue
 
-        extNameStr = None
-        extType = None
-        for k, e in extTypes.items():
+        extEnables = {}
+        for k, elem in extTypes.items():
             if k == s.name or (s.name in aliases.keys() and k in aliases[s.name]):
-                if e.extNameStr is not None:
-                    extNameStr = e.extNameStr
-                if e.type is not None:
-                    extType = e.type
-                break
+                for e in elem:
+                    extEnables[e.extNameStr] = e.type
+                
         version = None
         oldVersionName = None
         for v in vulkan_versions:
@@ -665,18 +664,25 @@
             out += AddGuardHeader(s)
             out += f"        if (structure->sType == {s.sTypeName}"
             has_version = version is not None
-            has_extNameStr = extNameStr is not None or s.name in aliases.keys()
+            has_extNameStr = len(extEnables) > 0 or s.name in aliases.keys()
 
             if has_version or has_extNameStr:
                 out += f" && \n           ("
+                has_printed_condition = False
                 if has_extNameStr:
-                    if extType == "device":
-                        out += f"gpu.CheckPhysicalDeviceExtensionIncluded({extNameStr})"
-                    elif extType == "instance":
-                        out += f"inst.CheckExtensionEnabled({extNameStr})"
-                    if has_version and extType is not None:
-                        out += f" ||\n            "
+                    for key, value in extEnables.items():
+                        if has_printed_condition:
+                            out += f' || '
+                        has_printed_condition = True
+                        if value == "device":
+                            out += f"gpu.CheckPhysicalDeviceExtensionIncluded({key})"
+                        elif value == "instance":
+                            out += f"inst.CheckExtensionEnabled({key})"
+                        else:
+                            assert(False and "Should never get here")
                 if has_version:
+                    if has_printed_condition:
+                        out += f' ||\n            '
                     out += f"{version_desc}.minor >= {str(version)}"
                 out += f")"
             out += f") {{\n"
@@ -893,10 +899,11 @@
             self.members.append(VulkanVariable(
                 node, constants, self.name))
 
-        for k, e in extTypes.items():
+        for k, elem in extTypes.items():
             if k == self.name:
-                if e.guard is not None:
-                    self.guard = e.guard
+                for e in elem:
+                    if e.guard is not None:
+                        self.guard = e.guard
 
 
 class VulkanExtension:
diff --git a/vulkaninfo/generated/vulkaninfo.hpp b/vulkaninfo/generated/vulkaninfo.hpp
index 7d86aa4..238fb25 100644
--- a/vulkaninfo/generated/vulkaninfo.hpp
+++ b/vulkaninfo/generated/vulkaninfo.hpp
@@ -2715,7 +2715,7 @@
             p.AddNewline();
         }
         if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES && 
-           (inst.CheckExtensionEnabled(VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME) ||
+           (inst.CheckExtensionEnabled(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME) || inst.CheckExtensionEnabled(VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME) || inst.CheckExtensionEnabled(VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME) ||
             gpu.api_version.minor >= 1)) {
             VkPhysicalDeviceIDProperties* props = (VkPhysicalDeviceIDProperties*)structure;
             DumpVkPhysicalDeviceIDProperties(p, gpu.api_version.minor >= 1 ?"VkPhysicalDeviceIDProperties":"VkPhysicalDeviceIDPropertiesKHR", *props);