diff --git a/vulkan/vkjson/vkjson.cc b/vulkan/vkjson/vkjson.cc
index 18fef2b..531a623 100644
--- a/vulkan/vkjson/vkjson.cc
+++ b/vulkan/vkjson/vkjson.cc
@@ -56,13 +56,15 @@
 // Floating point fields of Vulkan structure use single precision. The string
 // output of max double value in c++ will be larger than Java double's infinity
 // value. Below fake double max/min values are only to serve the safe json text
-// parsing in between C++ and Java, becasue Java json library simply cannot
+// parsing in between C++ and Java, because Java json library simply cannot
 // handle infinity.
 static const double SAFE_DOUBLE_MAX = 0.99 * std::numeric_limits<double>::max();
 static const double SAFE_DOUBLE_MIN = -SAFE_DOUBLE_MAX;
 
-template <typename T> struct EnumTraits;
-template <> struct EnumTraits<VkPhysicalDeviceType> {
+template <typename T>
+struct EnumTraits;
+template <>
+struct EnumTraits<VkPhysicalDeviceType> {
   static bool exist(uint32_t e) {
     switch (e) {
       case VK_PHYSICAL_DEVICE_TYPE_OTHER:
@@ -76,7 +78,8 @@
   }
 };
 
-template <> struct EnumTraits<VkFormat> {
+template <>
+struct EnumTraits<VkFormat> {
   static bool exist(uint32_t e) {
     switch (e) {
       case VK_FORMAT_UNDEFINED:
@@ -482,495 +485,13 @@
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor, VkExtent3D* extents) {
-  return
-    visitor->Visit("width", &extents->width) &&
-    visitor->Visit("height", &extents->height) &&
-    visitor->Visit("depth", &extents->depth);
+  return visitor->Visit("width", &extents->width) &&
+         visitor->Visit("height", &extents->height) &&
+         visitor->Visit("depth", &extents->depth);
 }
 
 template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkImageFormatProperties* properties) {
-  return
-    visitor->Visit("maxExtent", &properties->maxExtent) &&
-    visitor->Visit("maxMipLevels", &properties->maxMipLevels) &&
-    visitor->Visit("maxArrayLayers", &properties->maxArrayLayers) &&
-    visitor->Visit("sampleCounts", &properties->sampleCounts) &&
-    visitor->Visit("maxResourceSize", &properties->maxResourceSize);
-}
-
-// clang-format off
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceLimits* limits) {
-  return
-    visitor->Visit("maxImageDimension1D", &limits->maxImageDimension1D) &&
-    visitor->Visit("maxImageDimension2D", &limits->maxImageDimension2D) &&
-    visitor->Visit("maxImageDimension3D", &limits->maxImageDimension3D) &&
-    visitor->Visit("maxImageDimensionCube", &limits->maxImageDimensionCube) &&
-    visitor->Visit("maxImageArrayLayers", &limits->maxImageArrayLayers) &&
-    visitor->Visit("maxTexelBufferElements", &limits->maxTexelBufferElements) &&
-    visitor->Visit("maxUniformBufferRange", &limits->maxUniformBufferRange) &&
-    visitor->Visit("maxStorageBufferRange", &limits->maxStorageBufferRange) &&
-    visitor->Visit("maxPushConstantsSize", &limits->maxPushConstantsSize) &&
-    visitor->Visit("maxMemoryAllocationCount", &limits->maxMemoryAllocationCount) &&
-    visitor->Visit("maxSamplerAllocationCount", &limits->maxSamplerAllocationCount) &&
-    visitor->Visit("bufferImageGranularity", &limits->bufferImageGranularity) &&
-    visitor->Visit("sparseAddressSpaceSize", &limits->sparseAddressSpaceSize) &&
-    visitor->Visit("maxBoundDescriptorSets", &limits->maxBoundDescriptorSets) &&
-    visitor->Visit("maxPerStageDescriptorSamplers", &limits->maxPerStageDescriptorSamplers) &&
-    visitor->Visit("maxPerStageDescriptorUniformBuffers", &limits->maxPerStageDescriptorUniformBuffers) &&
-    visitor->Visit("maxPerStageDescriptorStorageBuffers", &limits->maxPerStageDescriptorStorageBuffers) &&
-    visitor->Visit("maxPerStageDescriptorSampledImages", &limits->maxPerStageDescriptorSampledImages) &&
-    visitor->Visit("maxPerStageDescriptorStorageImages", &limits->maxPerStageDescriptorStorageImages) &&
-    visitor->Visit("maxPerStageDescriptorInputAttachments", &limits->maxPerStageDescriptorInputAttachments) &&
-    visitor->Visit("maxPerStageResources", &limits->maxPerStageResources) &&
-    visitor->Visit("maxDescriptorSetSamplers", &limits->maxDescriptorSetSamplers) &&
-    visitor->Visit("maxDescriptorSetUniformBuffers", &limits->maxDescriptorSetUniformBuffers) &&
-    visitor->Visit("maxDescriptorSetUniformBuffersDynamic", &limits->maxDescriptorSetUniformBuffersDynamic) &&
-    visitor->Visit("maxDescriptorSetStorageBuffers", &limits->maxDescriptorSetStorageBuffers) &&
-    visitor->Visit("maxDescriptorSetStorageBuffersDynamic", &limits->maxDescriptorSetStorageBuffersDynamic) &&
-    visitor->Visit("maxDescriptorSetSampledImages", &limits->maxDescriptorSetSampledImages) &&
-    visitor->Visit("maxDescriptorSetStorageImages", &limits->maxDescriptorSetStorageImages) &&
-    visitor->Visit("maxDescriptorSetInputAttachments", &limits->maxDescriptorSetInputAttachments) &&
-    visitor->Visit("maxVertexInputAttributes", &limits->maxVertexInputAttributes) &&
-    visitor->Visit("maxVertexInputBindings", &limits->maxVertexInputBindings) &&
-    visitor->Visit("maxVertexInputAttributeOffset", &limits->maxVertexInputAttributeOffset) &&
-    visitor->Visit("maxVertexInputBindingStride", &limits->maxVertexInputBindingStride) &&
-    visitor->Visit("maxVertexOutputComponents", &limits->maxVertexOutputComponents) &&
-    visitor->Visit("maxTessellationGenerationLevel", &limits->maxTessellationGenerationLevel) &&
-    visitor->Visit("maxTessellationPatchSize", &limits->maxTessellationPatchSize) &&
-    visitor->Visit("maxTessellationControlPerVertexInputComponents", &limits->maxTessellationControlPerVertexInputComponents) &&
-    visitor->Visit("maxTessellationControlPerVertexOutputComponents", &limits->maxTessellationControlPerVertexOutputComponents) &&
-    visitor->Visit("maxTessellationControlPerPatchOutputComponents", &limits->maxTessellationControlPerPatchOutputComponents) &&
-    visitor->Visit("maxTessellationControlTotalOutputComponents", &limits->maxTessellationControlTotalOutputComponents) &&
-    visitor->Visit("maxTessellationEvaluationInputComponents", &limits->maxTessellationEvaluationInputComponents) &&
-    visitor->Visit("maxTessellationEvaluationOutputComponents", &limits->maxTessellationEvaluationOutputComponents) &&
-    visitor->Visit("maxGeometryShaderInvocations", &limits->maxGeometryShaderInvocations) &&
-    visitor->Visit("maxGeometryInputComponents", &limits->maxGeometryInputComponents) &&
-    visitor->Visit("maxGeometryOutputComponents", &limits->maxGeometryOutputComponents) &&
-    visitor->Visit("maxGeometryOutputVertices", &limits->maxGeometryOutputVertices) &&
-    visitor->Visit("maxGeometryTotalOutputComponents", &limits->maxGeometryTotalOutputComponents) &&
-    visitor->Visit("maxFragmentInputComponents", &limits->maxFragmentInputComponents) &&
-    visitor->Visit("maxFragmentOutputAttachments", &limits->maxFragmentOutputAttachments) &&
-    visitor->Visit("maxFragmentDualSrcAttachments", &limits->maxFragmentDualSrcAttachments) &&
-    visitor->Visit("maxFragmentCombinedOutputResources", &limits->maxFragmentCombinedOutputResources) &&
-    visitor->Visit("maxComputeSharedMemorySize", &limits->maxComputeSharedMemorySize) &&
-    visitor->Visit("maxComputeWorkGroupCount", &limits->maxComputeWorkGroupCount) &&
-    visitor->Visit("maxComputeWorkGroupInvocations", &limits->maxComputeWorkGroupInvocations) &&
-    visitor->Visit("maxComputeWorkGroupSize", &limits->maxComputeWorkGroupSize) &&
-    visitor->Visit("subPixelPrecisionBits", &limits->subPixelPrecisionBits) &&
-    visitor->Visit("subTexelPrecisionBits", &limits->subTexelPrecisionBits) &&
-    visitor->Visit("mipmapPrecisionBits", &limits->mipmapPrecisionBits) &&
-    visitor->Visit("maxDrawIndexedIndexValue", &limits->maxDrawIndexedIndexValue) &&
-    visitor->Visit("maxDrawIndirectCount", &limits->maxDrawIndirectCount) &&
-    visitor->Visit("maxSamplerLodBias", &limits->maxSamplerLodBias) &&
-    visitor->Visit("maxSamplerAnisotropy", &limits->maxSamplerAnisotropy) &&
-    visitor->Visit("maxViewports", &limits->maxViewports) &&
-    visitor->Visit("maxViewportDimensions", &limits->maxViewportDimensions) &&
-    visitor->Visit("viewportBoundsRange", &limits->viewportBoundsRange) &&
-    visitor->Visit("viewportSubPixelBits", &limits->viewportSubPixelBits) &&
-    visitor->Visit("minMemoryMapAlignment", &limits->minMemoryMapAlignment) &&
-    visitor->Visit("minTexelBufferOffsetAlignment", &limits->minTexelBufferOffsetAlignment) &&
-    visitor->Visit("minUniformBufferOffsetAlignment", &limits->minUniformBufferOffsetAlignment) &&
-    visitor->Visit("minStorageBufferOffsetAlignment", &limits->minStorageBufferOffsetAlignment) &&
-    visitor->Visit("minTexelOffset", &limits->minTexelOffset) &&
-    visitor->Visit("maxTexelOffset", &limits->maxTexelOffset) &&
-    visitor->Visit("minTexelGatherOffset", &limits->minTexelGatherOffset) &&
-    visitor->Visit("maxTexelGatherOffset", &limits->maxTexelGatherOffset) &&
-    visitor->Visit("minInterpolationOffset", &limits->minInterpolationOffset) &&
-    visitor->Visit("maxInterpolationOffset", &limits->maxInterpolationOffset) &&
-    visitor->Visit("subPixelInterpolationOffsetBits", &limits->subPixelInterpolationOffsetBits) &&
-    visitor->Visit("maxFramebufferWidth", &limits->maxFramebufferWidth) &&
-    visitor->Visit("maxFramebufferHeight", &limits->maxFramebufferHeight) &&
-    visitor->Visit("maxFramebufferLayers", &limits->maxFramebufferLayers) &&
-    visitor->Visit("framebufferColorSampleCounts", &limits->framebufferColorSampleCounts) &&
-    visitor->Visit("framebufferDepthSampleCounts", &limits->framebufferDepthSampleCounts) &&
-    visitor->Visit("framebufferStencilSampleCounts", &limits->framebufferStencilSampleCounts) &&
-    visitor->Visit("framebufferNoAttachmentsSampleCounts", &limits->framebufferNoAttachmentsSampleCounts) &&
-    visitor->Visit("maxColorAttachments", &limits->maxColorAttachments) &&
-    visitor->Visit("sampledImageColorSampleCounts", &limits->sampledImageColorSampleCounts) &&
-    visitor->Visit("sampledImageIntegerSampleCounts", &limits->sampledImageIntegerSampleCounts) &&
-    visitor->Visit("sampledImageDepthSampleCounts", &limits->sampledImageDepthSampleCounts) &&
-    visitor->Visit("sampledImageStencilSampleCounts", &limits->sampledImageStencilSampleCounts) &&
-    visitor->Visit("storageImageSampleCounts", &limits->storageImageSampleCounts) &&
-    visitor->Visit("maxSampleMaskWords", &limits->maxSampleMaskWords) &&
-    visitor->Visit("timestampComputeAndGraphics", &limits->timestampComputeAndGraphics) &&
-    visitor->Visit("timestampPeriod", &limits->timestampPeriod) &&
-    visitor->Visit("maxClipDistances", &limits->maxClipDistances) &&
-    visitor->Visit("maxCullDistances", &limits->maxCullDistances) &&
-    visitor->Visit("maxCombinedClipAndCullDistances", &limits->maxCombinedClipAndCullDistances) &&
-    visitor->Visit("discreteQueuePriorities", &limits->discreteQueuePriorities) &&
-    visitor->Visit("pointSizeRange", &limits->pointSizeRange) &&
-    visitor->Visit("lineWidthRange", &limits->lineWidthRange) &&
-    visitor->Visit("pointSizeGranularity", &limits->pointSizeGranularity) &&
-    visitor->Visit("lineWidthGranularity", &limits->lineWidthGranularity) &&
-    visitor->Visit("strictLines", &limits->strictLines) &&
-    visitor->Visit("standardSampleLocations", &limits->standardSampleLocations) &&
-    visitor->Visit("optimalBufferCopyOffsetAlignment", &limits->optimalBufferCopyOffsetAlignment) &&
-    visitor->Visit("optimalBufferCopyRowPitchAlignment", &limits->optimalBufferCopyRowPitchAlignment) &&
-    visitor->Visit("nonCoherentAtomSize", &limits->nonCoherentAtomSize);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor,
-                    VkPhysicalDeviceSparseProperties* properties) {
-  return
-    visitor->Visit("residencyStandard2DBlockShape", &properties->residencyStandard2DBlockShape) &&
-    visitor->Visit("residencyStandard2DMultisampleBlockShape", &properties->residencyStandard2DMultisampleBlockShape) &&
-    visitor->Visit("residencyStandard3DBlockShape", &properties->residencyStandard3DBlockShape) &&
-    visitor->Visit("residencyAlignedMipSize", &properties->residencyAlignedMipSize) &&
-    visitor->Visit("residencyNonResidentStrict", &properties->residencyNonResidentStrict);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor,
-                    VkPhysicalDeviceProperties* properties) {
-  return
-    visitor->Visit("apiVersion", &properties->apiVersion) &&
-    visitor->Visit("driverVersion", &properties->driverVersion) &&
-    visitor->Visit("vendorID", &properties->vendorID) &&
-    visitor->Visit("deviceID", &properties->deviceID) &&
-    visitor->Visit("deviceType", &properties->deviceType) &&
-    visitor->Visit("deviceName", &properties->deviceName) &&
-    visitor->Visit("pipelineCacheUUID", &properties->pipelineCacheUUID) &&
-    visitor->Visit("limits", &properties->limits) &&
-    visitor->Visit("sparseProperties", &properties->sparseProperties);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceFeatures* features) {
-  return
-    visitor->Visit("robustBufferAccess", &features->robustBufferAccess) &&
-    visitor->Visit("fullDrawIndexUint32", &features->fullDrawIndexUint32) &&
-    visitor->Visit("imageCubeArray", &features->imageCubeArray) &&
-    visitor->Visit("independentBlend", &features->independentBlend) &&
-    visitor->Visit("geometryShader", &features->geometryShader) &&
-    visitor->Visit("tessellationShader", &features->tessellationShader) &&
-    visitor->Visit("sampleRateShading", &features->sampleRateShading) &&
-    visitor->Visit("dualSrcBlend", &features->dualSrcBlend) &&
-    visitor->Visit("logicOp", &features->logicOp) &&
-    visitor->Visit("multiDrawIndirect", &features->multiDrawIndirect) &&
-    visitor->Visit("drawIndirectFirstInstance", &features->drawIndirectFirstInstance) &&
-    visitor->Visit("depthClamp", &features->depthClamp) &&
-    visitor->Visit("depthBiasClamp", &features->depthBiasClamp) &&
-    visitor->Visit("fillModeNonSolid", &features->fillModeNonSolid) &&
-    visitor->Visit("depthBounds", &features->depthBounds) &&
-    visitor->Visit("wideLines", &features->wideLines) &&
-    visitor->Visit("largePoints", &features->largePoints) &&
-    visitor->Visit("alphaToOne", &features->alphaToOne) &&
-    visitor->Visit("multiViewport", &features->multiViewport) &&
-    visitor->Visit("samplerAnisotropy", &features->samplerAnisotropy) &&
-    visitor->Visit("textureCompressionETC2", &features->textureCompressionETC2) &&
-    visitor->Visit("textureCompressionASTC_LDR", &features->textureCompressionASTC_LDR) &&
-    visitor->Visit("textureCompressionBC", &features->textureCompressionBC) &&
-    visitor->Visit("occlusionQueryPrecise", &features->occlusionQueryPrecise) &&
-    visitor->Visit("pipelineStatisticsQuery", &features->pipelineStatisticsQuery) &&
-    visitor->Visit("vertexPipelineStoresAndAtomics", &features->vertexPipelineStoresAndAtomics) &&
-    visitor->Visit("fragmentStoresAndAtomics", &features->fragmentStoresAndAtomics) &&
-    visitor->Visit("shaderTessellationAndGeometryPointSize", &features->shaderTessellationAndGeometryPointSize) &&
-    visitor->Visit("shaderImageGatherExtended", &features->shaderImageGatherExtended) &&
-    visitor->Visit("shaderStorageImageExtendedFormats", &features->shaderStorageImageExtendedFormats) &&
-    visitor->Visit("shaderStorageImageMultisample", &features->shaderStorageImageMultisample) &&
-    visitor->Visit("shaderStorageImageReadWithoutFormat", &features->shaderStorageImageReadWithoutFormat) &&
-    visitor->Visit("shaderStorageImageWriteWithoutFormat", &features->shaderStorageImageWriteWithoutFormat) &&
-    visitor->Visit("shaderUniformBufferArrayDynamicIndexing", &features->shaderUniformBufferArrayDynamicIndexing) &&
-    visitor->Visit("shaderSampledImageArrayDynamicIndexing", &features->shaderSampledImageArrayDynamicIndexing) &&
-    visitor->Visit("shaderStorageBufferArrayDynamicIndexing", &features->shaderStorageBufferArrayDynamicIndexing) &&
-    visitor->Visit("shaderStorageImageArrayDynamicIndexing", &features->shaderStorageImageArrayDynamicIndexing) &&
-    visitor->Visit("shaderClipDistance", &features->shaderClipDistance) &&
-    visitor->Visit("shaderCullDistance", &features->shaderCullDistance) &&
-    visitor->Visit("shaderFloat64", &features->shaderFloat64) &&
-    visitor->Visit("shaderInt64", &features->shaderInt64) &&
-    visitor->Visit("shaderInt16", &features->shaderInt16) &&
-    visitor->Visit("shaderResourceResidency", &features->shaderResourceResidency) &&
-    visitor->Visit("shaderResourceMinLod", &features->shaderResourceMinLod) &&
-    visitor->Visit("sparseBinding", &features->sparseBinding) &&
-    visitor->Visit("sparseResidencyBuffer", &features->sparseResidencyBuffer) &&
-    visitor->Visit("sparseResidencyImage2D", &features->sparseResidencyImage2D) &&
-    visitor->Visit("sparseResidencyImage3D", &features->sparseResidencyImage3D) &&
-    visitor->Visit("sparseResidency2Samples", &features->sparseResidency2Samples) &&
-    visitor->Visit("sparseResidency4Samples", &features->sparseResidency4Samples) &&
-    visitor->Visit("sparseResidency8Samples", &features->sparseResidency8Samples) &&
-    visitor->Visit("sparseResidency16Samples", &features->sparseResidency16Samples) &&
-    visitor->Visit("sparseResidencyAliased", &features->sparseResidencyAliased) &&
-    visitor->Visit("variableMultisampleRate", &features->variableMultisampleRate) &&
-    visitor->Visit("inheritedQueries", &features->inheritedQueries);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkJsonCore12* core) {
-  return
-    visitor->Visit("features", &core->features) &&
-    visitor->Visit("properties", &core->properties);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan12Properties* properties) {
-  return
-    visitor->Visit("driverID", &properties->driverID) &&
-    visitor->Visit("driverName", &properties->driverName) &&
-    visitor->Visit("driverInfo", &properties->driverInfo) &&
-    visitor->Visit("conformanceVersion", &properties->conformanceVersion) &&
-    visitor->Visit("denormBehaviorIndependence", &properties->denormBehaviorIndependence) &&
-    visitor->Visit("roundingModeIndependence", &properties->roundingModeIndependence) &&
-    visitor->Visit("shaderSignedZeroInfNanPreserveFloat16", &properties->shaderSignedZeroInfNanPreserveFloat16) &&
-    visitor->Visit("shaderSignedZeroInfNanPreserveFloat32", &properties->shaderSignedZeroInfNanPreserveFloat32) &&
-    visitor->Visit("shaderSignedZeroInfNanPreserveFloat64", &properties->shaderSignedZeroInfNanPreserveFloat64) &&
-    visitor->Visit("shaderDenormPreserveFloat16", &properties->shaderDenormPreserveFloat16) &&
-    visitor->Visit("shaderDenormPreserveFloat32", &properties->shaderDenormPreserveFloat32) &&
-    visitor->Visit("shaderDenormPreserveFloat64", &properties->shaderDenormPreserveFloat64) &&
-    visitor->Visit("shaderDenormFlushToZeroFloat16", &properties->shaderDenormFlushToZeroFloat16) &&
-    visitor->Visit("shaderDenormFlushToZeroFloat32", &properties->shaderDenormFlushToZeroFloat32) &&
-    visitor->Visit("shaderDenormFlushToZeroFloat64", &properties->shaderDenormFlushToZeroFloat64) &&
-    visitor->Visit("shaderRoundingModeRTEFloat16", &properties->shaderRoundingModeRTEFloat16) &&
-    visitor->Visit("shaderRoundingModeRTEFloat32", &properties->shaderRoundingModeRTEFloat32) &&
-    visitor->Visit("shaderRoundingModeRTEFloat64", &properties->shaderRoundingModeRTEFloat64) &&
-    visitor->Visit("shaderRoundingModeRTZFloat16", &properties->shaderRoundingModeRTZFloat16) &&
-    visitor->Visit("shaderRoundingModeRTZFloat32", &properties->shaderRoundingModeRTZFloat32) &&
-    visitor->Visit("shaderRoundingModeRTZFloat64", &properties->shaderRoundingModeRTZFloat64) &&
-    visitor->Visit("maxUpdateAfterBindDescriptorsInAllPools", &properties->maxUpdateAfterBindDescriptorsInAllPools) &&
-    visitor->Visit("shaderUniformBufferArrayNonUniformIndexingNative", &properties->shaderUniformBufferArrayNonUniformIndexingNative) &&
-    visitor->Visit("shaderSampledImageArrayNonUniformIndexingNative", &properties->shaderSampledImageArrayNonUniformIndexingNative) &&
-    visitor->Visit("shaderStorageBufferArrayNonUniformIndexingNative", &properties->shaderStorageBufferArrayNonUniformIndexingNative) &&
-    visitor->Visit("shaderStorageImageArrayNonUniformIndexingNative", &properties->shaderStorageImageArrayNonUniformIndexingNative) &&
-    visitor->Visit("shaderInputAttachmentArrayNonUniformIndexingNative", &properties->shaderInputAttachmentArrayNonUniformIndexingNative) &&
-    visitor->Visit("robustBufferAccessUpdateAfterBind", &properties->robustBufferAccessUpdateAfterBind) &&
-    visitor->Visit("quadDivergentImplicitLod", &properties->quadDivergentImplicitLod) &&
-    visitor->Visit("maxPerStageDescriptorUpdateAfterBindSamplers", &properties->maxPerStageDescriptorUpdateAfterBindSamplers) &&
-    visitor->Visit("maxPerStageDescriptorUpdateAfterBindUniformBuffers", &properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers) &&
-    visitor->Visit("maxPerStageDescriptorUpdateAfterBindStorageBuffers", &properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers) &&
-    visitor->Visit("maxPerStageDescriptorUpdateAfterBindSampledImages", &properties->maxPerStageDescriptorUpdateAfterBindSampledImages) &&
-    visitor->Visit("maxPerStageDescriptorUpdateAfterBindStorageImages", &properties->maxPerStageDescriptorUpdateAfterBindStorageImages) &&
-    visitor->Visit("maxPerStageDescriptorUpdateAfterBindInputAttachments", &properties->maxPerStageDescriptorUpdateAfterBindInputAttachments) &&
-    visitor->Visit("maxPerStageUpdateAfterBindResources", &properties->maxPerStageUpdateAfterBindResources) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindSamplers", &properties->maxDescriptorSetUpdateAfterBindSamplers) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindUniformBuffers", &properties->maxDescriptorSetUpdateAfterBindUniformBuffers) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindUniformBuffersDynamic", &properties->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindStorageBuffers", &properties->maxDescriptorSetUpdateAfterBindStorageBuffers) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindStorageBuffersDynamic", &properties->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindSampledImages", &properties->maxDescriptorSetUpdateAfterBindSampledImages) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindStorageImages", &properties->maxDescriptorSetUpdateAfterBindStorageImages) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindInputAttachments", &properties->maxDescriptorSetUpdateAfterBindInputAttachments) &&
-    visitor->Visit("supportedDepthResolveModes", &properties->supportedDepthResolveModes) &&
-    visitor->Visit("supportedStencilResolveModes", &properties->supportedStencilResolveModes) &&
-    visitor->Visit("independentResolveNone", &properties->independentResolveNone) &&
-    visitor->Visit("independentResolve", &properties->independentResolve) &&
-    visitor->Visit("filterMinmaxSingleComponentFormats", &properties->filterMinmaxSingleComponentFormats) &&
-    visitor->Visit("filterMinmaxImageComponentMapping", &properties->filterMinmaxImageComponentMapping) &&
-    visitor->Visit("maxTimelineSemaphoreValueDifference", &properties->maxTimelineSemaphoreValueDifference) &&
-    visitor->Visit("framebufferIntegerColorSampleCounts", &properties->framebufferIntegerColorSampleCounts);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan12Features* features) {
-  return
-    visitor->Visit("samplerMirrorClampToEdge", &features->samplerMirrorClampToEdge) &&
-    visitor->Visit("drawIndirectCount", &features->drawIndirectCount) &&
-    visitor->Visit("storageBuffer8BitAccess", &features->storageBuffer8BitAccess) &&
-    visitor->Visit("uniformAndStorageBuffer8BitAccess", &features->uniformAndStorageBuffer8BitAccess) &&
-    visitor->Visit("storagePushConstant8", &features->storagePushConstant8) &&
-    visitor->Visit("shaderBufferInt64Atomics", &features->shaderBufferInt64Atomics) &&
-    visitor->Visit("shaderSharedInt64Atomics", &features->shaderSharedInt64Atomics) &&
-    visitor->Visit("shaderFloat16", &features->shaderFloat16) &&
-    visitor->Visit("shaderInt8", &features->shaderInt8) &&
-    visitor->Visit("descriptorIndexing", &features->descriptorIndexing) &&
-    visitor->Visit("shaderInputAttachmentArrayDynamicIndexing", &features->shaderInputAttachmentArrayDynamicIndexing) &&
-    visitor->Visit("shaderUniformTexelBufferArrayDynamicIndexing", &features->shaderUniformTexelBufferArrayDynamicIndexing) &&
-    visitor->Visit("shaderStorageTexelBufferArrayDynamicIndexing", &features->shaderStorageTexelBufferArrayDynamicIndexing) &&
-    visitor->Visit("shaderUniformBufferArrayNonUniformIndexing", &features->shaderUniformBufferArrayNonUniformIndexing) &&
-    visitor->Visit("shaderSampledImageArrayNonUniformIndexing", &features->shaderSampledImageArrayNonUniformIndexing) &&
-    visitor->Visit("shaderStorageBufferArrayNonUniformIndexing", &features->shaderStorageBufferArrayNonUniformIndexing) &&
-    visitor->Visit("shaderStorageImageArrayNonUniformIndexing", &features->shaderStorageImageArrayNonUniformIndexing) &&
-    visitor->Visit("shaderInputAttachmentArrayNonUniformIndexing", &features->shaderInputAttachmentArrayNonUniformIndexing) &&
-    visitor->Visit("shaderUniformTexelBufferArrayNonUniformIndexing", &features->shaderUniformTexelBufferArrayNonUniformIndexing) &&
-    visitor->Visit("shaderStorageTexelBufferArrayNonUniformIndexing", &features->shaderStorageTexelBufferArrayNonUniformIndexing) &&
-    visitor->Visit("descriptorBindingUniformBufferUpdateAfterBind", &features->descriptorBindingUniformBufferUpdateAfterBind) &&
-    visitor->Visit("descriptorBindingSampledImageUpdateAfterBind", &features->descriptorBindingSampledImageUpdateAfterBind) &&
-    visitor->Visit("descriptorBindingStorageImageUpdateAfterBind", &features->descriptorBindingStorageImageUpdateAfterBind) &&
-    visitor->Visit("descriptorBindingStorageBufferUpdateAfterBind", &features->descriptorBindingStorageBufferUpdateAfterBind) &&
-    visitor->Visit("descriptorBindingUniformTexelBufferUpdateAfterBind", &features->descriptorBindingUniformTexelBufferUpdateAfterBind) &&
-    visitor->Visit("descriptorBindingStorageTexelBufferUpdateAfterBind", &features->descriptorBindingStorageTexelBufferUpdateAfterBind) &&
-    visitor->Visit("descriptorBindingUpdateUnusedWhilePending", &features->descriptorBindingUpdateUnusedWhilePending) &&
-    visitor->Visit("descriptorBindingPartiallyBound", &features->descriptorBindingPartiallyBound) &&
-    visitor->Visit("descriptorBindingVariableDescriptorCount", &features->descriptorBindingVariableDescriptorCount) &&
-    visitor->Visit("runtimeDescriptorArray", &features->runtimeDescriptorArray) &&
-    visitor->Visit("samplerFilterMinmax", &features->samplerFilterMinmax) &&
-    visitor->Visit("scalarBlockLayout", &features->scalarBlockLayout) &&
-    visitor->Visit("imagelessFramebuffer", &features->imagelessFramebuffer) &&
-    visitor->Visit("uniformBufferStandardLayout", &features->uniformBufferStandardLayout) &&
-    visitor->Visit("shaderSubgroupExtendedTypes", &features->shaderSubgroupExtendedTypes) &&
-    visitor->Visit("separateDepthStencilLayouts", &features->separateDepthStencilLayouts) &&
-    visitor->Visit("hostQueryReset", &features->hostQueryReset) &&
-    visitor->Visit("timelineSemaphore", &features->timelineSemaphore) &&
-    visitor->Visit("bufferDeviceAddress", &features->bufferDeviceAddress) &&
-    visitor->Visit("bufferDeviceAddressCaptureReplay", &features->bufferDeviceAddressCaptureReplay) &&
-    visitor->Visit("bufferDeviceAddressMultiDevice", &features->bufferDeviceAddressMultiDevice) &&
-    visitor->Visit("vulkanMemoryModel", &features->vulkanMemoryModel) &&
-    visitor->Visit("vulkanMemoryModelDeviceScope", &features->vulkanMemoryModelDeviceScope) &&
-    visitor->Visit("vulkanMemoryModelAvailabilityVisibilityChains", &features->vulkanMemoryModelAvailabilityVisibilityChains) &&
-    visitor->Visit("shaderOutputViewportIndex", &features->shaderOutputViewportIndex) &&
-    visitor->Visit("shaderOutputLayer", &features->shaderOutputLayer) &&
-    visitor->Visit("subgroupBroadcastDynamicId", &features->subgroupBroadcastDynamicId);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkJsonCore13* core) {
-  return
-    visitor->Visit("features", &core->features) &&
-    visitor->Visit("properties", &core->properties);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan13Properties* properties) {
-  return
-    visitor->Visit("minSubgroupSize", &properties->minSubgroupSize) &&
-    visitor->Visit("maxSubgroupSize", &properties->maxSubgroupSize) &&
-    visitor->Visit("maxComputeWorkgroupSubgroups", &properties->maxComputeWorkgroupSubgroups) &&
-    visitor->Visit("requiredSubgroupSizeStages", &properties->requiredSubgroupSizeStages) &&
-    visitor->Visit("maxInlineUniformBlockSize", &properties->maxInlineUniformBlockSize) &&
-    visitor->Visit("maxPerStageDescriptorInlineUniformBlocks", &properties->maxPerStageDescriptorInlineUniformBlocks) &&
-    visitor->Visit("maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks", &properties->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks) &&
-    visitor->Visit("maxDescriptorSetInlineUniformBlocks", &properties->maxDescriptorSetInlineUniformBlocks) &&
-    visitor->Visit("maxDescriptorSetUpdateAfterBindInlineUniformBlocks", &properties->maxDescriptorSetUpdateAfterBindInlineUniformBlocks) &&
-    visitor->Visit("maxInlineUniformTotalSize", &properties->maxInlineUniformTotalSize) &&
-    visitor->Visit("integerDotProduct8BitUnsignedAccelerated", &properties->integerDotProduct8BitUnsignedAccelerated) &&
-    visitor->Visit("integerDotProduct8BitSignedAccelerated", &properties->integerDotProduct8BitSignedAccelerated) &&
-    visitor->Visit("integerDotProduct8BitMixedSignednessAccelerated", &properties->integerDotProduct8BitMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProduct4x8BitPackedUnsignedAccelerated", &properties->integerDotProduct4x8BitPackedUnsignedAccelerated) &&
-    visitor->Visit("integerDotProduct4x8BitPackedSignedAccelerated", &properties->integerDotProduct4x8BitPackedSignedAccelerated) &&
-    visitor->Visit("integerDotProduct4x8BitPackedMixedSignednessAccelerated", &properties->integerDotProduct4x8BitPackedMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProduct16BitUnsignedAccelerated", &properties->integerDotProduct16BitUnsignedAccelerated) &&
-    visitor->Visit("integerDotProduct16BitSignedAccelerated", &properties->integerDotProduct16BitSignedAccelerated) &&
-    visitor->Visit("integerDotProduct16BitMixedSignednessAccelerated", &properties->integerDotProduct16BitMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProduct32BitUnsignedAccelerated", &properties->integerDotProduct32BitUnsignedAccelerated) &&
-    visitor->Visit("integerDotProduct32BitSignedAccelerated", &properties->integerDotProduct32BitSignedAccelerated) &&
-    visitor->Visit("integerDotProduct32BitMixedSignednessAccelerated", &properties->integerDotProduct32BitMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProduct64BitUnsignedAccelerated", &properties->integerDotProduct64BitUnsignedAccelerated) &&
-    visitor->Visit("integerDotProduct64BitSignedAccelerated", &properties->integerDotProduct64BitSignedAccelerated) &&
-    visitor->Visit("integerDotProduct64BitMixedSignednessAccelerated", &properties->integerDotProduct64BitMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating8BitUnsignedAccelerated", &properties->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating8BitSignedAccelerated", &properties->integerDotProductAccumulatingSaturating8BitSignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated", &properties->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated", &properties->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated", &properties->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated", &properties->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating16BitUnsignedAccelerated", &properties->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating16BitSignedAccelerated", &properties->integerDotProductAccumulatingSaturating16BitSignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated", &properties->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating32BitUnsignedAccelerated", &properties->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating32BitSignedAccelerated", &properties->integerDotProductAccumulatingSaturating32BitSignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated", &properties->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating64BitUnsignedAccelerated", &properties->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating64BitSignedAccelerated", &properties->integerDotProductAccumulatingSaturating64BitSignedAccelerated) &&
-    visitor->Visit("integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated", &properties->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated) &&
-    visitor->Visit("storageTexelBufferOffsetAlignmentBytes", &properties->storageTexelBufferOffsetAlignmentBytes) &&
-    visitor->Visit("storageTexelBufferOffsetSingleTexelAlignment", &properties->storageTexelBufferOffsetSingleTexelAlignment) &&
-    visitor->Visit("uniformTexelBufferOffsetAlignmentBytes", &properties->uniformTexelBufferOffsetAlignmentBytes) &&
-    visitor->Visit("uniformTexelBufferOffsetSingleTexelAlignment", &properties->uniformTexelBufferOffsetSingleTexelAlignment) &&
-    visitor->Visit("maxBufferSize", &properties->maxBufferSize);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan13Features* features) {
-  return
-    visitor->Visit("robustImageAccess", &features->robustImageAccess) &&
-    visitor->Visit("inlineUniformBlock", &features->inlineUniformBlock) &&
-    visitor->Visit("descriptorBindingInlineUniformBlockUpdateAfterBind", &features->descriptorBindingInlineUniformBlockUpdateAfterBind) &&
-    visitor->Visit("pipelineCreationCacheControl", &features->pipelineCreationCacheControl) &&
-    visitor->Visit("privateData", &features->privateData) &&
-    visitor->Visit("shaderDemoteToHelperInvocation", &features->shaderDemoteToHelperInvocation) &&
-    visitor->Visit("shaderTerminateInvocation", &features->shaderTerminateInvocation) &&
-    visitor->Visit("subgroupSizeControl", &features->subgroupSizeControl) &&
-    visitor->Visit("computeFullSubgroups", &features->computeFullSubgroups) &&
-    visitor->Visit("synchronization2", &features->synchronization2) &&
-    visitor->Visit("textureCompressionASTC_HDR", &features->textureCompressionASTC_HDR) &&
-    visitor->Visit("shaderZeroInitializeWorkgroupMemory", &features->shaderZeroInitializeWorkgroupMemory) &&
-    visitor->Visit("dynamicRendering", &features->dynamicRendering) &&
-    visitor->Visit("shaderIntegerDotProduct", &features->shaderIntegerDotProduct) &&
-    visitor->Visit("maintenance4", &features->maintenance4);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkJsonCore14* core) {
-  return
-    visitor->Visit("features", &core->features) &&
-    visitor->Visit("properties", &core->properties);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan14Properties* properties) {
-  return
-    visitor->Visit("lineSubPixelPrecisionBits", &properties->lineSubPixelPrecisionBits) &&
-    visitor->Visit("maxVertexAttribDivisor", &properties->maxVertexAttribDivisor) &&
-    visitor->Visit("supportsNonZeroFirstInstance", &properties->supportsNonZeroFirstInstance) &&
-    visitor->Visit("maxPushDescriptors", &properties->maxPushDescriptors) &&
-    visitor->Visit("dynamicRenderingLocalReadDepthStencilAttachments", &properties->dynamicRenderingLocalReadDepthStencilAttachments) &&
-    visitor->Visit("dynamicRenderingLocalReadMultisampledAttachments", &properties->dynamicRenderingLocalReadMultisampledAttachments) &&
-    visitor->Visit("earlyFragmentMultisampleCoverageAfterSampleCounting", &properties->earlyFragmentMultisampleCoverageAfterSampleCounting) &&
-    visitor->Visit("earlyFragmentSampleMaskTestBeforeSampleCounting", &properties->earlyFragmentSampleMaskTestBeforeSampleCounting) &&
-    visitor->Visit("depthStencilSwizzleOneSupport", &properties->depthStencilSwizzleOneSupport) &&
-    visitor->Visit("polygonModePointSize", &properties->polygonModePointSize) &&
-    visitor->Visit("nonStrictSinglePixelWideLinesUseParallelogram", &properties->nonStrictSinglePixelWideLinesUseParallelogram) &&
-    visitor->Visit("nonStrictWideLinesUseParallelogram", &properties->nonStrictWideLinesUseParallelogram) &&
-    visitor->Visit("blockTexelViewCompatibleMultipleLayers", &properties->blockTexelViewCompatibleMultipleLayers) &&
-    visitor->Visit("maxCombinedImageSamplerDescriptorCount", &properties->maxCombinedImageSamplerDescriptorCount) &&
-    visitor->Visit("fragmentShadingRateClampCombinerInputs", &properties->fragmentShadingRateClampCombinerInputs) &&
-    visitor->Visit("defaultRobustnessStorageBuffers", &properties->defaultRobustnessStorageBuffers) &&
-    visitor->Visit("defaultRobustnessUniformBuffers", &properties->defaultRobustnessUniformBuffers) &&
-    visitor->Visit("defaultRobustnessVertexInputs", &properties->defaultRobustnessVertexInputs) &&
-    visitor->Visit("defaultRobustnessImages", &properties->defaultRobustnessImages) &&
-    visitor->Visit("copySrcLayoutCount", &properties->copySrcLayoutCount) &&
-    visitor->VisitArray("pCopySrcLayouts", properties->copySrcLayoutCount, &properties->pCopySrcLayouts) &&
-    visitor->Visit("copyDstLayoutCount", &properties->copyDstLayoutCount) &&
-    visitor->VisitArray("pCopyDstLayouts", properties->copyDstLayoutCount, &properties->pCopyDstLayouts) &&
-    visitor->Visit("optimalTilingLayoutUUID", &properties->optimalTilingLayoutUUID) &&
-    visitor->Visit("identicalMemoryTypeRequirements", &properties->identicalMemoryTypeRequirements);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceVulkan14Features* features) {
-  return
-    visitor->Visit("globalPriorityQuery", &features->globalPriorityQuery) &&
-    visitor->Visit("shaderSubgroupRotate", &features->shaderSubgroupRotate) &&
-    visitor->Visit("shaderSubgroupRotateClustered", &features->shaderSubgroupRotateClustered) &&
-    visitor->Visit("shaderFloatControls2", &features->shaderFloatControls2) &&
-    visitor->Visit("shaderExpectAssume", &features->shaderExpectAssume) &&
-    visitor->Visit("rectangularLines", &features->rectangularLines) &&
-    visitor->Visit("bresenhamLines", &features->bresenhamLines) &&
-    visitor->Visit("smoothLines", &features->smoothLines) &&
-    visitor->Visit("stippledRectangularLines", &features->stippledRectangularLines) &&
-    visitor->Visit("stippledBresenhamLines", &features->stippledBresenhamLines) &&
-    visitor->Visit("stippledSmoothLines", &features->stippledSmoothLines) &&
-    visitor->Visit("vertexAttributeInstanceRateDivisor", &features->vertexAttributeInstanceRateDivisor) &&
-    visitor->Visit("vertexAttributeInstanceRateZeroDivisor", &features->vertexAttributeInstanceRateZeroDivisor) &&
-    visitor->Visit("indexTypeUint8", &features->indexTypeUint8) &&
-    visitor->Visit("dynamicRenderingLocalRead", &features->dynamicRenderingLocalRead) &&
-    visitor->Visit("maintenance5", &features->maintenance5) &&
-    visitor->Visit("maintenance6", &features->maintenance6) &&
-    visitor->Visit("pipelineProtectedAccess", &features->pipelineProtectedAccess) &&
-    visitor->Visit("pipelineRobustness", &features->pipelineRobustness) &&
-    visitor->Visit("hostImageCopy", &features->hostImageCopy);
-}
-// clang-format on
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor,
-                    VkJsonExtDriverProperties* properties) {
-  return visitor->Visit("driverPropertiesKHR",
-                        &properties->driver_properties_khr);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor,
-                    VkPhysicalDeviceDriverPropertiesKHR* properties) {
-  return visitor->Visit("driverID", &properties->driverID) &&
-         visitor->Visit("driverName", &properties->driverName) &&
-         visitor->Visit("driverInfo", &properties->driverInfo) &&
-         visitor->Visit("conformanceVersion", &properties->conformanceVersion);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor,
-                    VkConformanceVersionKHR* version) {
+inline bool Iterate(Visitor* visitor, VkConformanceVersionKHR* version) {
   return visitor->Visit("major", &version->major) &&
          visitor->Visit("minor", &version->minor) &&
          visitor->Visit("subminor", &version->subminor) &&
@@ -978,158 +499,1412 @@
 }
 
 template <typename Visitor>
-inline bool Iterate(Visitor* visitor,
-                    VkJsonExtVariablePointerFeatures* features) {
-  return visitor->Visit("variablePointerFeaturesKHR",
-                        &features->variable_pointer_features_khr);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor,
-                    VkJsonExtImage2DViewOf3DFeatures* features) {
-  return visitor->Visit("image2DViewOf3DFeaturesEXT",
-                        &features->image_2D_view_of_3D_features_EXT);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor,
-                    VkJsonExtShaderFloat16Int8Features* features) {
-  return visitor->Visit("shaderFloat16Int8FeaturesKHR",
-                        &features->shader_float16_int8_features_khr);
-}
-
-template <typename Visitor>
 inline bool Iterate(Visitor* visitor, VkMemoryType* type) {
-  return
-    visitor->Visit("propertyFlags", &type->propertyFlags) &&
-    visitor->Visit("heapIndex", &type->heapIndex);
+  return visitor->Visit("propertyFlags", &type->propertyFlags) &&
+         visitor->Visit("heapIndex", &type->heapIndex);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor, VkMemoryHeap* heap) {
-  return
-    visitor->Visit("size", &heap->size) &&
-    visitor->Visit("flags", &heap->flags);
+  return visitor->Visit("size", &heap->size) &&
+         visitor->Visit("flags", &heap->flags);
 }
 
 template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkPhysicalDeviceMemoryProperties* properties) {
+inline bool Iterate(Visitor* visitor, VkJsonCore11* core) {
+  return visitor->Visit("properties", &core->properties) &&
+         visitor->Visit("features", &core->features);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonCore12* core) {
+  return visitor->Visit("properties", &core->properties) &&
+         visitor->Visit("features", &core->features);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonCore13* core) {
+  return visitor->Visit("properties", &core->properties) &&
+         visitor->Visit("features", &core->features);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonCore14* core) {
+  return visitor->Visit("properties", &core->properties) &&
+         visitor->Visit("features", &core->features);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonKHRVariablePointers* structs) {
+  return visitor->Visit("variablePointerFeaturesKHR",
+                        &structs->variable_pointer_features_khr) &&
+         visitor->Visit("variablePointersFeaturesKHR",
+                        &structs->variable_pointers_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonKHRShaderFloat16Int8* structs) {
+  return visitor->Visit("shaderFloat16Int8FeaturesKHR",
+                        &structs->shader_float16_int8_features_khr) &&
+         visitor->Visit("float16Int8FeaturesKHR",
+                        &structs->float16_int8_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonExtImage2dViewOf3d* structs) {
+  return visitor->Visit("image2DViewOf3DFeaturesEXT",
+                        &structs->image_2d_view_of_3d_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonExtCustomBorderColor* structs) {
+  return visitor->Visit("customBorderColorFeaturesEXT",
+                        &structs->custom_border_color_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkJsonExtPrimitiveTopologyListRestart* structs) {
+  return visitor->Visit("primitiveTopologyListRestartFeaturesEXT",
+                        &structs->primitive_topology_list_restart_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonExtProvokingVertex* structs) {
+  return visitor->Visit("provokingVertexFeaturesEXT",
+                        &structs->provoking_vertex_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonKHRIndexTypeUint8* structs) {
+  return visitor->Visit("indexTypeUint8FeaturesKHR",
+                        &structs->index_type_uint8_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonExtIndexTypeUint8* structs) {
+  return visitor->Visit("indexTypeUint8FeaturesEXT",
+                        &structs->index_type_uint8_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkJsonKHRVertexAttributeDivisor* structs) {
+  return visitor->Visit("vertexAttributeDivisorFeaturesKHR",
+                        &structs->vertex_attribute_divisor_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkJsonExtVertexAttributeDivisor* structs) {
+  return visitor->Visit("vertexAttributeDivisorFeaturesEXT",
+                        &structs->vertex_attribute_divisor_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonExtTransformFeedback* structs) {
+  return visitor->Visit("transformFeedbackFeaturesEXT",
+                        &structs->transform_feedback_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkJsonKHRShaderSubgroupUniformControlFlow* structs) {
+  return visitor->Visit(
+      "shaderSubgroupUniformControlFlowFeaturesKHR",
+      &structs->shader_subgroup_uniform_control_flow_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkJsonKHRShaderSubgroupExtendedTypes* structs) {
+  return visitor->Visit("shaderSubgroupExtendedTypesFeaturesKHR",
+                        &structs->shader_subgroup_extended_types_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonKHR8bitStorage* structs) {
+  return visitor->Visit("bit8StorageFeaturesKHR",
+                        &structs->bit8_storage_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkJsonKHRShaderIntegerDotProduct* structs) {
+  return visitor->Visit("shaderIntegerDotProductFeaturesKHR",
+                        &structs->shader_integer_dot_product_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkJsonIMGRelaxedLineRasterization* structs) {
+  return visitor->Visit("relaxedLineRasterizationFeaturesIMG",
+                        &structs->relaxed_line_rasterization_features_img);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonKHRLineRasterization* structs) {
+  return visitor->Visit("lineRasterizationFeaturesKHR",
+                        &structs->line_rasterization_features_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonExtLineRasterization* structs) {
+  return visitor->Visit("lineRasterizationFeaturesEXT",
+                        &structs->line_rasterization_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkJsonExtPrimitivesGeneratedQuery* structs) {
+  return visitor->Visit("primitivesGeneratedQueryFeaturesEXT",
+                        &structs->primitives_generated_query_features_ext);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonKHRShaderFloatControls* structs) {
+  return visitor->Visit("floatControlsPropertiesKHR",
+                        &structs->float_controls_properties_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkJsonKHRDriverProperties* structs) {
+  return visitor->Visit("driverPropertiesKHR", &structs->driver_properties_khr);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceFloatControlsProperties* properties) {
   return
-    visitor->Visit("memoryTypeCount", &properties->memoryTypeCount) &&
-    visitor->VisitArray("memoryTypes", properties->memoryTypeCount, &properties->memoryTypes) &&
-    visitor->Visit("memoryHeapCount", &properties->memoryHeapCount) &&
-    visitor->VisitArray("memoryHeaps", properties->memoryHeapCount, &properties->memoryHeaps);
+
+      visitor->Visit("denormBehaviorIndependence",
+                     &properties->denormBehaviorIndependence) &&
+      visitor->Visit("roundingModeIndependence",
+                     &properties->roundingModeIndependence) &&
+      visitor->Visit("shaderSignedZeroInfNanPreserveFloat16",
+                     &properties->shaderSignedZeroInfNanPreserveFloat16) &&
+      visitor->Visit("shaderSignedZeroInfNanPreserveFloat32",
+                     &properties->shaderSignedZeroInfNanPreserveFloat32) &&
+      visitor->Visit("shaderSignedZeroInfNanPreserveFloat64",
+                     &properties->shaderSignedZeroInfNanPreserveFloat64) &&
+      visitor->Visit("shaderDenormPreserveFloat16",
+                     &properties->shaderDenormPreserveFloat16) &&
+      visitor->Visit("shaderDenormPreserveFloat32",
+                     &properties->shaderDenormPreserveFloat32) &&
+      visitor->Visit("shaderDenormPreserveFloat64",
+                     &properties->shaderDenormPreserveFloat64) &&
+      visitor->Visit("shaderDenormFlushToZeroFloat16",
+                     &properties->shaderDenormFlushToZeroFloat16) &&
+      visitor->Visit("shaderDenormFlushToZeroFloat32",
+                     &properties->shaderDenormFlushToZeroFloat32) &&
+      visitor->Visit("shaderDenormFlushToZeroFloat64",
+                     &properties->shaderDenormFlushToZeroFloat64) &&
+      visitor->Visit("shaderRoundingModeRTEFloat16",
+                     &properties->shaderRoundingModeRTEFloat16) &&
+      visitor->Visit("shaderRoundingModeRTEFloat32",
+                     &properties->shaderRoundingModeRTEFloat32) &&
+      visitor->Visit("shaderRoundingModeRTEFloat64",
+                     &properties->shaderRoundingModeRTEFloat64) &&
+      visitor->Visit("shaderRoundingModeRTZFloat16",
+                     &properties->shaderRoundingModeRTZFloat16) &&
+      visitor->Visit("shaderRoundingModeRTZFloat32",
+                     &properties->shaderRoundingModeRTZFloat32) &&
+      visitor->Visit("shaderRoundingModeRTZFloat64",
+                     &properties->shaderRoundingModeRTZFloat64);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkPhysicalDeviceProperties* properties) {
+  return
+
+      visitor->Visit("apiVersion", &properties->apiVersion) &&
+      visitor->Visit("driverVersion", &properties->driverVersion) &&
+      visitor->Visit("vendorID", &properties->vendorID) &&
+      visitor->Visit("deviceID", &properties->deviceID) &&
+      visitor->Visit("deviceType", &properties->deviceType) &&
+      visitor->Visit("deviceName", &properties->deviceName) &&
+      visitor->Visit("pipelineCacheUUID", &properties->pipelineCacheUUID) &&
+      visitor->Visit("limits", &properties->limits) &&
+      visitor->Visit("sparseProperties", &properties->sparseProperties);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceMemoryProperties* properties) {
+  return
+
+      visitor->Visit("memoryTypeCount", &properties->memoryTypeCount) &&
+      visitor->VisitArray("memoryTypes", properties->memoryTypeCount,
+                          &properties->memoryTypes) &&
+      visitor->Visit("memoryHeapCount", &properties->memoryHeapCount) &&
+      visitor->VisitArray("memoryHeaps", properties->memoryHeapCount,
+                          &properties->memoryHeaps);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDeviceSubgroupProperties* properties) {
-  return visitor->Visit("subgroupSize", &properties->subgroupSize) &&
-         visitor->Visit("supportedStages", &properties->supportedStages) &&
-         visitor->Visit("supportedOperations",
-                        &properties->supportedOperations) &&
-         visitor->Visit("quadOperationsInAllStages",
-                        &properties->quadOperationsInAllStages);
+  return
+
+      visitor->Visit("subgroupSize", &properties->subgroupSize) &&
+      visitor->Visit("supportedStages", &properties->supportedStages) &&
+      visitor->Visit("supportedOperations", &properties->supportedOperations) &&
+      visitor->Visit("quadOperationsInAllStages",
+                     &properties->quadOperationsInAllStages);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDevicePointClippingProperties* properties) {
-  return visitor->Visit("pointClippingBehavior",
-                        &properties->pointClippingBehavior);
+  return
+
+      visitor->Visit("pointClippingBehavior",
+                     &properties->pointClippingBehavior);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDeviceMultiviewProperties* properties) {
-  return visitor->Visit("maxMultiviewViewCount",
-                        &properties->maxMultiviewViewCount) &&
-         visitor->Visit("maxMultiviewInstanceIndex",
-                        &properties->maxMultiviewInstanceIndex);
+  return
+
+      visitor->Visit("maxMultiviewViewCount",
+                     &properties->maxMultiviewViewCount) &&
+      visitor->Visit("maxMultiviewInstanceIndex",
+                     &properties->maxMultiviewInstanceIndex);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDeviceIDProperties* properties) {
-  return visitor->Visit("deviceUUID", &properties->deviceUUID) &&
-         visitor->Visit("driverUUID", &properties->driverUUID) &&
-         visitor->Visit("deviceLUID", &properties->deviceLUID) &&
-         visitor->Visit("deviceNodeMask", &properties->deviceNodeMask) &&
-         visitor->Visit("deviceLUIDValid", &properties->deviceLUIDValid);
+  return
+
+      visitor->Visit("deviceUUID", &properties->deviceUUID) &&
+      visitor->Visit("driverUUID", &properties->driverUUID) &&
+      visitor->Visit("deviceLUID", &properties->deviceLUID) &&
+      visitor->Visit("deviceNodeMask", &properties->deviceNodeMask) &&
+      visitor->Visit("deviceLUIDValid", &properties->deviceLUIDValid);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDeviceMaintenance3Properties* properties) {
-  return visitor->Visit("maxPerSetDescriptors",
-                        &properties->maxPerSetDescriptors) &&
-         visitor->Visit("maxMemoryAllocationSize",
-                        &properties->maxMemoryAllocationSize);
+  return
+
+      visitor->Visit("maxPerSetDescriptors",
+                     &properties->maxPerSetDescriptors) &&
+      visitor->Visit("maxMemoryAllocationSize",
+                     &properties->maxMemoryAllocationSize);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
-                    VkPhysicalDevice16BitStorageFeatures* features) {
-  return visitor->Visit("storageBuffer16BitAccess",
-                        &features->storageBuffer16BitAccess) &&
-         visitor->Visit("uniformAndStorageBuffer16BitAccess",
-                        &features->uniformAndStorageBuffer16BitAccess) &&
-         visitor->Visit("storagePushConstant16",
-                        &features->storagePushConstant16) &&
-         visitor->Visit("storageInputOutput16",
-                        &features->storageInputOutput16);
+                    VkPhysicalDeviceSparseProperties* properties) {
+  return
+
+      visitor->Visit("residencyStandard2DBlockShape",
+                     &properties->residencyStandard2DBlockShape) &&
+      visitor->Visit("residencyStandard2DMultisampleBlockShape",
+                     &properties->residencyStandard2DMultisampleBlockShape) &&
+      visitor->Visit("residencyStandard3DBlockShape",
+                     &properties->residencyStandard3DBlockShape) &&
+      visitor->Visit("residencyAlignedMipSize",
+                     &properties->residencyAlignedMipSize) &&
+      visitor->Visit("residencyNonResidentStrict",
+                     &properties->residencyNonResidentStrict);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkImageFormatProperties* properties) {
+  return
+
+      visitor->Visit("maxExtent", &properties->maxExtent) &&
+      visitor->Visit("maxMipLevels", &properties->maxMipLevels) &&
+      visitor->Visit("maxArrayLayers", &properties->maxArrayLayers) &&
+      visitor->Visit("sampleCounts", &properties->sampleCounts) &&
+      visitor->Visit("maxResourceSize", &properties->maxResourceSize);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkQueueFamilyProperties* properties) {
+  return
+
+      visitor->Visit("queueFlags", &properties->queueFlags) &&
+      visitor->Visit("queueCount", &properties->queueCount) &&
+      visitor->Visit("timestampValidBits", &properties->timestampValidBits) &&
+      visitor->Visit("minImageTransferGranularity",
+                     &properties->minImageTransferGranularity);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkExtensionProperties* properties) {
+  return
+
+      visitor->Visit("extensionName", &properties->extensionName) &&
+      visitor->Visit("specVersion", &properties->specVersion);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkLayerProperties* properties) {
+  return
+
+      visitor->Visit("layerName", &properties->layerName) &&
+      visitor->Visit("specVersion", &properties->specVersion) &&
+      visitor->Visit("implementationVersion",
+                     &properties->implementationVersion) &&
+      visitor->Visit("description", &properties->description);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkFormatProperties* properties) {
+  return
+
+      visitor->Visit("linearTilingFeatures",
+                     &properties->linearTilingFeatures) &&
+      visitor->Visit("optimalTilingFeatures",
+                     &properties->optimalTilingFeatures) &&
+      visitor->Visit("bufferFeatures", &properties->bufferFeatures);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
-                    VkPhysicalDeviceMultiviewFeatures* features) {
-  return visitor->Visit("multiview", &features->multiview) &&
-         visitor->Visit("multiviewGeometryShader",
-                        &features->multiviewGeometryShader) &&
-         visitor->Visit("multiviewTessellationShader",
-                        &features->multiviewTessellationShader);
+                    VkPhysicalDeviceVariablePointersFeatures* features) {
+  return
+
+      visitor->Visit("variablePointersStorageBuffer",
+                     &features->variablePointersStorageBuffer) &&
+      visitor->Visit("variablePointers", &features->variablePointers);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
-                    VkPhysicalDeviceVariablePointerFeatures* features) {
-  return visitor->Visit("variablePointersStorageBuffer",
-                        &features->variablePointersStorageBuffer) &&
-         visitor->Visit("variablePointers", &features->variablePointers);
+                    VkPhysicalDeviceShaderFloat16Int8Features* features) {
+  return
+
+      visitor->Visit("shaderFloat16", &features->shaderFloat16) &&
+      visitor->Visit("shaderInt8", &features->shaderInt8);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* features) {
-  return visitor->Visit("image2DViewOf3D", &features->image2DViewOf3D) &&
-         visitor->Visit("sampler2DViewOf3D", &features->sampler2DViewOf3D);
+  return
+
+      visitor->Visit("image2DViewOf3D", &features->image2DViewOf3D) &&
+      visitor->Visit("sampler2DViewOf3D", &features->sampler2DViewOf3D);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
-                    VkPhysicalDeviceShaderFloat16Int8FeaturesKHR* features) {
-  return visitor->Visit("shaderFloat16", &features->shaderFloat16) &&
-         visitor->Visit("shaderInt8", &features->shaderInt8);
+                    VkPhysicalDeviceCustomBorderColorFeaturesEXT* features) {
+  return
+
+      visitor->Visit("customBorderColors", &features->customBorderColors) &&
+      visitor->Visit("customBorderColorWithoutFormat",
+                     &features->customBorderColorWithoutFormat);
+}
+
+template <typename Visitor>
+inline bool Iterate(
+    Visitor* visitor,
+    VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* features) {
+  return
+
+      visitor->Visit("primitiveTopologyListRestart",
+                     &features->primitiveTopologyListRestart) &&
+      visitor->Visit("primitiveTopologyPatchListRestart",
+                     &features->primitiveTopologyPatchListRestart);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceProvokingVertexFeaturesEXT* features) {
+  return
+
+      visitor->Visit("provokingVertexLast", &features->provokingVertexLast) &&
+      visitor->Visit("transformFeedbackPreservesProvokingVertex",
+                     &features->transformFeedbackPreservesProvokingVertex);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceIndexTypeUint8Features* features) {
+  return
+
+      visitor->Visit("indexTypeUint8", &features->indexTypeUint8);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVertexAttributeDivisorFeatures* features) {
+  return
+
+      visitor->Visit("vertexAttributeInstanceRateDivisor",
+                     &features->vertexAttributeInstanceRateDivisor) &&
+      visitor->Visit("vertexAttributeInstanceRateZeroDivisor",
+                     &features->vertexAttributeInstanceRateZeroDivisor);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceTransformFeedbackFeaturesEXT* features) {
+  return
+
+      visitor->Visit("transformFeedback", &features->transformFeedback) &&
+      visitor->Visit("geometryStreams", &features->geometryStreams);
+}
+
+template <typename Visitor>
+inline bool Iterate(
+    Visitor* visitor,
+    VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* features) {
+  return
+
+      visitor->Visit("shaderSubgroupUniformControlFlow",
+                     &features->shaderSubgroupUniformControlFlow);
+}
+
+template <typename Visitor>
+inline bool Iterate(
+    Visitor* visitor,
+    VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* features) {
+  return
+
+      visitor->Visit("shaderSubgroupExtendedTypes",
+                     &features->shaderSubgroupExtendedTypes);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDevice8BitStorageFeatures* features) {
+  return
+
+      visitor->Visit("storageBuffer8BitAccess",
+                     &features->storageBuffer8BitAccess) &&
+      visitor->Visit("uniformAndStorageBuffer8BitAccess",
+                     &features->uniformAndStorageBuffer8BitAccess) &&
+      visitor->Visit("storagePushConstant8", &features->storagePushConstant8);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceShaderIntegerDotProductFeatures* features) {
+  return
+
+      visitor->Visit("shaderIntegerDotProduct",
+                     &features->shaderIntegerDotProduct);
+}
+
+template <typename Visitor>
+inline bool Iterate(
+    Visitor* visitor,
+    VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* features) {
+  return
+
+      visitor->Visit("relaxedLineRasterization",
+                     &features->relaxedLineRasterization);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceLineRasterizationFeatures* features) {
+  return
+
+      visitor->Visit("rectangularLines", &features->rectangularLines) &&
+      visitor->Visit("bresenhamLines", &features->bresenhamLines) &&
+      visitor->Visit("smoothLines", &features->smoothLines) &&
+      visitor->Visit("stippledRectangularLines",
+                     &features->stippledRectangularLines) &&
+      visitor->Visit("stippledBresenhamLines",
+                     &features->stippledBresenhamLines) &&
+      visitor->Visit("stippledSmoothLines", &features->stippledSmoothLines);
+}
+
+template <typename Visitor>
+inline bool Iterate(
+    Visitor* visitor,
+    VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* features) {
+  return
+
+      visitor->Visit("primitivesGeneratedQuery",
+                     &features->primitivesGeneratedQuery) &&
+      visitor->Visit(
+          "primitivesGeneratedQueryWithRasterizerDiscard",
+          &features->primitivesGeneratedQueryWithRasterizerDiscard) &&
+      visitor->Visit("primitivesGeneratedQueryWithNonZeroStreams",
+                     &features->primitivesGeneratedQueryWithNonZeroStreams);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDevice16BitStorageFeatures* features) {
+  return
+
+      visitor->Visit("storageBuffer16BitAccess",
+                     &features->storageBuffer16BitAccess) &&
+      visitor->Visit("uniformAndStorageBuffer16BitAccess",
+                     &features->uniformAndStorageBuffer16BitAccess) &&
+      visitor->Visit("storagePushConstant16",
+                     &features->storagePushConstant16) &&
+      visitor->Visit("storageInputOutput16", &features->storageInputOutput16);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceMultiviewFeatures* features) {
+  return
+
+      visitor->Visit("multiview", &features->multiview) &&
+      visitor->Visit("multiviewGeometryShader",
+                     &features->multiviewGeometryShader) &&
+      visitor->Visit("multiviewTessellationShader",
+                     &features->multiviewTessellationShader);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDeviceProtectedMemoryFeatures* features) {
-  return visitor->Visit("protectedMemory", &features->protectedMemory);
+  return
+
+      visitor->Visit("protectedMemory", &features->protectedMemory);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDeviceSamplerYcbcrConversionFeatures* features) {
-  return visitor->Visit("samplerYcbcrConversion",
-                        &features->samplerYcbcrConversion);
+  return
+
+      visitor->Visit("samplerYcbcrConversion",
+                     &features->samplerYcbcrConversion);
 }
 
 template <typename Visitor>
 inline bool Iterate(Visitor* visitor,
                     VkPhysicalDeviceShaderDrawParameterFeatures* features) {
-  return visitor->Visit("shaderDrawParameters",
-                        &features->shaderDrawParameters);
+  return
+
+      visitor->Visit("shaderDrawParameters", &features->shaderDrawParameters);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkPhysicalDeviceLimits* limits) {
+  return
+
+      visitor->Visit("maxImageDimension1D", &limits->maxImageDimension1D) &&
+      visitor->Visit("maxImageDimension2D", &limits->maxImageDimension2D) &&
+      visitor->Visit("maxImageDimension3D", &limits->maxImageDimension3D) &&
+      visitor->Visit("maxImageDimensionCube", &limits->maxImageDimensionCube) &&
+      visitor->Visit("maxImageArrayLayers", &limits->maxImageArrayLayers) &&
+      visitor->Visit("maxTexelBufferElements",
+                     &limits->maxTexelBufferElements) &&
+      visitor->Visit("maxUniformBufferRange", &limits->maxUniformBufferRange) &&
+      visitor->Visit("maxStorageBufferRange", &limits->maxStorageBufferRange) &&
+      visitor->Visit("maxPushConstantsSize", &limits->maxPushConstantsSize) &&
+      visitor->Visit("maxMemoryAllocationCount",
+                     &limits->maxMemoryAllocationCount) &&
+      visitor->Visit("maxSamplerAllocationCount",
+                     &limits->maxSamplerAllocationCount) &&
+      visitor->Visit("bufferImageGranularity",
+                     &limits->bufferImageGranularity) &&
+      visitor->Visit("sparseAddressSpaceSize",
+                     &limits->sparseAddressSpaceSize) &&
+      visitor->Visit("maxBoundDescriptorSets",
+                     &limits->maxBoundDescriptorSets) &&
+      visitor->Visit("maxPerStageDescriptorSamplers",
+                     &limits->maxPerStageDescriptorSamplers) &&
+      visitor->Visit("maxPerStageDescriptorUniformBuffers",
+                     &limits->maxPerStageDescriptorUniformBuffers) &&
+      visitor->Visit("maxPerStageDescriptorStorageBuffers",
+                     &limits->maxPerStageDescriptorStorageBuffers) &&
+      visitor->Visit("maxPerStageDescriptorSampledImages",
+                     &limits->maxPerStageDescriptorSampledImages) &&
+      visitor->Visit("maxPerStageDescriptorStorageImages",
+                     &limits->maxPerStageDescriptorStorageImages) &&
+      visitor->Visit("maxPerStageDescriptorInputAttachments",
+                     &limits->maxPerStageDescriptorInputAttachments) &&
+      visitor->Visit("maxPerStageResources", &limits->maxPerStageResources) &&
+      visitor->Visit("maxDescriptorSetSamplers",
+                     &limits->maxDescriptorSetSamplers) &&
+      visitor->Visit("maxDescriptorSetUniformBuffers",
+                     &limits->maxDescriptorSetUniformBuffers) &&
+      visitor->Visit("maxDescriptorSetUniformBuffersDynamic",
+                     &limits->maxDescriptorSetUniformBuffersDynamic) &&
+      visitor->Visit("maxDescriptorSetStorageBuffers",
+                     &limits->maxDescriptorSetStorageBuffers) &&
+      visitor->Visit("maxDescriptorSetStorageBuffersDynamic",
+                     &limits->maxDescriptorSetStorageBuffersDynamic) &&
+      visitor->Visit("maxDescriptorSetSampledImages",
+                     &limits->maxDescriptorSetSampledImages) &&
+      visitor->Visit("maxDescriptorSetStorageImages",
+                     &limits->maxDescriptorSetStorageImages) &&
+      visitor->Visit("maxDescriptorSetInputAttachments",
+                     &limits->maxDescriptorSetInputAttachments) &&
+      visitor->Visit("maxVertexInputAttributes",
+                     &limits->maxVertexInputAttributes) &&
+      visitor->Visit("maxVertexInputBindings",
+                     &limits->maxVertexInputBindings) &&
+      visitor->Visit("maxVertexInputAttributeOffset",
+                     &limits->maxVertexInputAttributeOffset) &&
+      visitor->Visit("maxVertexInputBindingStride",
+                     &limits->maxVertexInputBindingStride) &&
+      visitor->Visit("maxVertexOutputComponents",
+                     &limits->maxVertexOutputComponents) &&
+      visitor->Visit("maxTessellationGenerationLevel",
+                     &limits->maxTessellationGenerationLevel) &&
+      visitor->Visit("maxTessellationPatchSize",
+                     &limits->maxTessellationPatchSize) &&
+      visitor->Visit("maxTessellationControlPerVertexInputComponents",
+                     &limits->maxTessellationControlPerVertexInputComponents) &&
+      visitor->Visit(
+          "maxTessellationControlPerVertexOutputComponents",
+          &limits->maxTessellationControlPerVertexOutputComponents) &&
+      visitor->Visit("maxTessellationControlPerPatchOutputComponents",
+                     &limits->maxTessellationControlPerPatchOutputComponents) &&
+      visitor->Visit("maxTessellationControlTotalOutputComponents",
+                     &limits->maxTessellationControlTotalOutputComponents) &&
+      visitor->Visit("maxTessellationEvaluationInputComponents",
+                     &limits->maxTessellationEvaluationInputComponents) &&
+      visitor->Visit("maxTessellationEvaluationOutputComponents",
+                     &limits->maxTessellationEvaluationOutputComponents) &&
+      visitor->Visit("maxGeometryShaderInvocations",
+                     &limits->maxGeometryShaderInvocations) &&
+      visitor->Visit("maxGeometryInputComponents",
+                     &limits->maxGeometryInputComponents) &&
+      visitor->Visit("maxGeometryOutputComponents",
+                     &limits->maxGeometryOutputComponents) &&
+      visitor->Visit("maxGeometryOutputVertices",
+                     &limits->maxGeometryOutputVertices) &&
+      visitor->Visit("maxGeometryTotalOutputComponents",
+                     &limits->maxGeometryTotalOutputComponents) &&
+      visitor->Visit("maxFragmentInputComponents",
+                     &limits->maxFragmentInputComponents) &&
+      visitor->Visit("maxFragmentOutputAttachments",
+                     &limits->maxFragmentOutputAttachments) &&
+      visitor->Visit("maxFragmentDualSrcAttachments",
+                     &limits->maxFragmentDualSrcAttachments) &&
+      visitor->Visit("maxFragmentCombinedOutputResources",
+                     &limits->maxFragmentCombinedOutputResources) &&
+      visitor->Visit("maxComputeSharedMemorySize",
+                     &limits->maxComputeSharedMemorySize) &&
+      visitor->Visit("maxComputeWorkGroupCount",
+                     &limits->maxComputeWorkGroupCount) &&
+      visitor->Visit("maxComputeWorkGroupInvocations",
+                     &limits->maxComputeWorkGroupInvocations) &&
+      visitor->Visit("maxComputeWorkGroupSize",
+                     &limits->maxComputeWorkGroupSize) &&
+      visitor->Visit("subPixelPrecisionBits", &limits->subPixelPrecisionBits) &&
+      visitor->Visit("subTexelPrecisionBits", &limits->subTexelPrecisionBits) &&
+      visitor->Visit("mipmapPrecisionBits", &limits->mipmapPrecisionBits) &&
+      visitor->Visit("maxDrawIndexedIndexValue",
+                     &limits->maxDrawIndexedIndexValue) &&
+      visitor->Visit("maxDrawIndirectCount", &limits->maxDrawIndirectCount) &&
+      visitor->Visit("maxSamplerLodBias", &limits->maxSamplerLodBias) &&
+      visitor->Visit("maxSamplerAnisotropy", &limits->maxSamplerAnisotropy) &&
+      visitor->Visit("maxViewports", &limits->maxViewports) &&
+      visitor->Visit("maxViewportDimensions", &limits->maxViewportDimensions) &&
+      visitor->Visit("viewportBoundsRange", &limits->viewportBoundsRange) &&
+      visitor->Visit("viewportSubPixelBits", &limits->viewportSubPixelBits) &&
+      visitor->Visit("minMemoryMapAlignment", &limits->minMemoryMapAlignment) &&
+      visitor->Visit("minTexelBufferOffsetAlignment",
+                     &limits->minTexelBufferOffsetAlignment) &&
+      visitor->Visit("minUniformBufferOffsetAlignment",
+                     &limits->minUniformBufferOffsetAlignment) &&
+      visitor->Visit("minStorageBufferOffsetAlignment",
+                     &limits->minStorageBufferOffsetAlignment) &&
+      visitor->Visit("minTexelOffset", &limits->minTexelOffset) &&
+      visitor->Visit("maxTexelOffset", &limits->maxTexelOffset) &&
+      visitor->Visit("minTexelGatherOffset", &limits->minTexelGatherOffset) &&
+      visitor->Visit("maxTexelGatherOffset", &limits->maxTexelGatherOffset) &&
+      visitor->Visit("minInterpolationOffset",
+                     &limits->minInterpolationOffset) &&
+      visitor->Visit("maxInterpolationOffset",
+                     &limits->maxInterpolationOffset) &&
+      visitor->Visit("subPixelInterpolationOffsetBits",
+                     &limits->subPixelInterpolationOffsetBits) &&
+      visitor->Visit("maxFramebufferWidth", &limits->maxFramebufferWidth) &&
+      visitor->Visit("maxFramebufferHeight", &limits->maxFramebufferHeight) &&
+      visitor->Visit("maxFramebufferLayers", &limits->maxFramebufferLayers) &&
+      visitor->Visit("framebufferColorSampleCounts",
+                     &limits->framebufferColorSampleCounts) &&
+      visitor->Visit("framebufferDepthSampleCounts",
+                     &limits->framebufferDepthSampleCounts) &&
+      visitor->Visit("framebufferStencilSampleCounts",
+                     &limits->framebufferStencilSampleCounts) &&
+      visitor->Visit("framebufferNoAttachmentsSampleCounts",
+                     &limits->framebufferNoAttachmentsSampleCounts) &&
+      visitor->Visit("maxColorAttachments", &limits->maxColorAttachments) &&
+      visitor->Visit("sampledImageColorSampleCounts",
+                     &limits->sampledImageColorSampleCounts) &&
+      visitor->Visit("sampledImageIntegerSampleCounts",
+                     &limits->sampledImageIntegerSampleCounts) &&
+      visitor->Visit("sampledImageDepthSampleCounts",
+                     &limits->sampledImageDepthSampleCounts) &&
+      visitor->Visit("sampledImageStencilSampleCounts",
+                     &limits->sampledImageStencilSampleCounts) &&
+      visitor->Visit("storageImageSampleCounts",
+                     &limits->storageImageSampleCounts) &&
+      visitor->Visit("maxSampleMaskWords", &limits->maxSampleMaskWords) &&
+      visitor->Visit("timestampComputeAndGraphics",
+                     &limits->timestampComputeAndGraphics) &&
+      visitor->Visit("timestampPeriod", &limits->timestampPeriod) &&
+      visitor->Visit("maxClipDistances", &limits->maxClipDistances) &&
+      visitor->Visit("maxCullDistances", &limits->maxCullDistances) &&
+      visitor->Visit("maxCombinedClipAndCullDistances",
+                     &limits->maxCombinedClipAndCullDistances) &&
+      visitor->Visit("discreteQueuePriorities",
+                     &limits->discreteQueuePriorities) &&
+      visitor->Visit("pointSizeRange", &limits->pointSizeRange) &&
+      visitor->Visit("lineWidthRange", &limits->lineWidthRange) &&
+      visitor->Visit("pointSizeGranularity", &limits->pointSizeGranularity) &&
+      visitor->Visit("lineWidthGranularity", &limits->lineWidthGranularity) &&
+      visitor->Visit("strictLines", &limits->strictLines) &&
+      visitor->Visit("standardSampleLocations",
+                     &limits->standardSampleLocations) &&
+      visitor->Visit("optimalBufferCopyOffsetAlignment",
+                     &limits->optimalBufferCopyOffsetAlignment) &&
+      visitor->Visit("optimalBufferCopyRowPitchAlignment",
+                     &limits->optimalBufferCopyRowPitchAlignment) &&
+      visitor->Visit("nonCoherentAtomSize", &limits->nonCoherentAtomSize);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor, VkPhysicalDeviceFeatures* features) {
+  return
+
+      visitor->Visit("robustBufferAccess", &features->robustBufferAccess) &&
+      visitor->Visit("fullDrawIndexUint32", &features->fullDrawIndexUint32) &&
+      visitor->Visit("imageCubeArray", &features->imageCubeArray) &&
+      visitor->Visit("independentBlend", &features->independentBlend) &&
+      visitor->Visit("geometryShader", &features->geometryShader) &&
+      visitor->Visit("tessellationShader", &features->tessellationShader) &&
+      visitor->Visit("sampleRateShading", &features->sampleRateShading) &&
+      visitor->Visit("dualSrcBlend", &features->dualSrcBlend) &&
+      visitor->Visit("logicOp", &features->logicOp) &&
+      visitor->Visit("multiDrawIndirect", &features->multiDrawIndirect) &&
+      visitor->Visit("drawIndirectFirstInstance",
+                     &features->drawIndirectFirstInstance) &&
+      visitor->Visit("depthClamp", &features->depthClamp) &&
+      visitor->Visit("depthBiasClamp", &features->depthBiasClamp) &&
+      visitor->Visit("fillModeNonSolid", &features->fillModeNonSolid) &&
+      visitor->Visit("depthBounds", &features->depthBounds) &&
+      visitor->Visit("wideLines", &features->wideLines) &&
+      visitor->Visit("largePoints", &features->largePoints) &&
+      visitor->Visit("alphaToOne", &features->alphaToOne) &&
+      visitor->Visit("multiViewport", &features->multiViewport) &&
+      visitor->Visit("samplerAnisotropy", &features->samplerAnisotropy) &&
+      visitor->Visit("textureCompressionETC2",
+                     &features->textureCompressionETC2) &&
+      visitor->Visit("textureCompressionASTC_LDR",
+                     &features->textureCompressionASTC_LDR) &&
+      visitor->Visit("textureCompressionBC", &features->textureCompressionBC) &&
+      visitor->Visit("occlusionQueryPrecise",
+                     &features->occlusionQueryPrecise) &&
+      visitor->Visit("pipelineStatisticsQuery",
+                     &features->pipelineStatisticsQuery) &&
+      visitor->Visit("vertexPipelineStoresAndAtomics",
+                     &features->vertexPipelineStoresAndAtomics) &&
+      visitor->Visit("fragmentStoresAndAtomics",
+                     &features->fragmentStoresAndAtomics) &&
+      visitor->Visit("shaderTessellationAndGeometryPointSize",
+                     &features->shaderTessellationAndGeometryPointSize) &&
+      visitor->Visit("shaderImageGatherExtended",
+                     &features->shaderImageGatherExtended) &&
+      visitor->Visit("shaderStorageImageExtendedFormats",
+                     &features->shaderStorageImageExtendedFormats) &&
+      visitor->Visit("shaderStorageImageMultisample",
+                     &features->shaderStorageImageMultisample) &&
+      visitor->Visit("shaderStorageImageReadWithoutFormat",
+                     &features->shaderStorageImageReadWithoutFormat) &&
+      visitor->Visit("shaderStorageImageWriteWithoutFormat",
+                     &features->shaderStorageImageWriteWithoutFormat) &&
+      visitor->Visit("shaderUniformBufferArrayDynamicIndexing",
+                     &features->shaderUniformBufferArrayDynamicIndexing) &&
+      visitor->Visit("shaderSampledImageArrayDynamicIndexing",
+                     &features->shaderSampledImageArrayDynamicIndexing) &&
+      visitor->Visit("shaderStorageBufferArrayDynamicIndexing",
+                     &features->shaderStorageBufferArrayDynamicIndexing) &&
+      visitor->Visit("shaderStorageImageArrayDynamicIndexing",
+                     &features->shaderStorageImageArrayDynamicIndexing) &&
+      visitor->Visit("shaderClipDistance", &features->shaderClipDistance) &&
+      visitor->Visit("shaderCullDistance", &features->shaderCullDistance) &&
+      visitor->Visit("shaderFloat64", &features->shaderFloat64) &&
+      visitor->Visit("shaderInt64", &features->shaderInt64) &&
+      visitor->Visit("shaderInt16", &features->shaderInt16) &&
+      visitor->Visit("shaderResourceResidency",
+                     &features->shaderResourceResidency) &&
+      visitor->Visit("shaderResourceMinLod", &features->shaderResourceMinLod) &&
+      visitor->Visit("sparseBinding", &features->sparseBinding) &&
+      visitor->Visit("sparseResidencyBuffer",
+                     &features->sparseResidencyBuffer) &&
+      visitor->Visit("sparseResidencyImage2D",
+                     &features->sparseResidencyImage2D) &&
+      visitor->Visit("sparseResidencyImage3D",
+                     &features->sparseResidencyImage3D) &&
+      visitor->Visit("sparseResidency2Samples",
+                     &features->sparseResidency2Samples) &&
+      visitor->Visit("sparseResidency4Samples",
+                     &features->sparseResidency4Samples) &&
+      visitor->Visit("sparseResidency8Samples",
+                     &features->sparseResidency8Samples) &&
+      visitor->Visit("sparseResidency16Samples",
+                     &features->sparseResidency16Samples) &&
+      visitor->Visit("sparseResidencyAliased",
+                     &features->sparseResidencyAliased) &&
+      visitor->Visit("variableMultisampleRate",
+                     &features->variableMultisampleRate) &&
+      visitor->Visit("inheritedQueries", &features->inheritedQueries);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVulkan11Properties* properties) {
+  return
+
+      visitor->Visit("deviceUUID", &properties->deviceUUID) &&
+      visitor->Visit("driverUUID", &properties->driverUUID) &&
+      visitor->Visit("deviceLUID", &properties->deviceLUID) &&
+      visitor->Visit("deviceNodeMask", &properties->deviceNodeMask) &&
+      visitor->Visit("deviceLUIDValid", &properties->deviceLUIDValid) &&
+      visitor->Visit("subgroupSize", &properties->subgroupSize) &&
+      visitor->Visit("subgroupSupportedStages",
+                     &properties->subgroupSupportedStages) &&
+      visitor->Visit("subgroupSupportedOperations",
+                     &properties->subgroupSupportedOperations) &&
+      visitor->Visit("subgroupQuadOperationsInAllStages",
+                     &properties->subgroupQuadOperationsInAllStages) &&
+      visitor->Visit("pointClippingBehavior",
+                     &properties->pointClippingBehavior) &&
+      visitor->Visit("maxMultiviewViewCount",
+                     &properties->maxMultiviewViewCount) &&
+      visitor->Visit("maxMultiviewInstanceIndex",
+                     &properties->maxMultiviewInstanceIndex) &&
+      visitor->Visit("protectedNoFault", &properties->protectedNoFault) &&
+      visitor->Visit("maxPerSetDescriptors",
+                     &properties->maxPerSetDescriptors) &&
+      visitor->Visit("maxMemoryAllocationSize",
+                     &properties->maxMemoryAllocationSize);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVulkan11Features* features) {
+  return
+
+      visitor->Visit("storageBuffer16BitAccess",
+                     &features->storageBuffer16BitAccess) &&
+      visitor->Visit("uniformAndStorageBuffer16BitAccess",
+                     &features->uniformAndStorageBuffer16BitAccess) &&
+      visitor->Visit("storagePushConstant16",
+                     &features->storagePushConstant16) &&
+      visitor->Visit("storageInputOutput16", &features->storageInputOutput16) &&
+      visitor->Visit("multiview", &features->multiview) &&
+      visitor->Visit("multiviewGeometryShader",
+                     &features->multiviewGeometryShader) &&
+      visitor->Visit("multiviewTessellationShader",
+                     &features->multiviewTessellationShader) &&
+      visitor->Visit("variablePointersStorageBuffer",
+                     &features->variablePointersStorageBuffer) &&
+      visitor->Visit("variablePointers", &features->variablePointers) &&
+      visitor->Visit("protectedMemory", &features->protectedMemory) &&
+      visitor->Visit("samplerYcbcrConversion",
+                     &features->samplerYcbcrConversion) &&
+      visitor->Visit("shaderDrawParameters", &features->shaderDrawParameters);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVulkan12Properties* properties) {
+  return
+
+      visitor->Visit("driverID", &properties->driverID) &&
+      visitor->Visit("driverName", &properties->driverName) &&
+      visitor->Visit("driverInfo", &properties->driverInfo) &&
+      visitor->Visit("conformanceVersion", &properties->conformanceVersion) &&
+      visitor->Visit("denormBehaviorIndependence",
+                     &properties->denormBehaviorIndependence) &&
+      visitor->Visit("roundingModeIndependence",
+                     &properties->roundingModeIndependence) &&
+      visitor->Visit("shaderSignedZeroInfNanPreserveFloat16",
+                     &properties->shaderSignedZeroInfNanPreserveFloat16) &&
+      visitor->Visit("shaderSignedZeroInfNanPreserveFloat32",
+                     &properties->shaderSignedZeroInfNanPreserveFloat32) &&
+      visitor->Visit("shaderSignedZeroInfNanPreserveFloat64",
+                     &properties->shaderSignedZeroInfNanPreserveFloat64) &&
+      visitor->Visit("shaderDenormPreserveFloat16",
+                     &properties->shaderDenormPreserveFloat16) &&
+      visitor->Visit("shaderDenormPreserveFloat32",
+                     &properties->shaderDenormPreserveFloat32) &&
+      visitor->Visit("shaderDenormPreserveFloat64",
+                     &properties->shaderDenormPreserveFloat64) &&
+      visitor->Visit("shaderDenormFlushToZeroFloat16",
+                     &properties->shaderDenormFlushToZeroFloat16) &&
+      visitor->Visit("shaderDenormFlushToZeroFloat32",
+                     &properties->shaderDenormFlushToZeroFloat32) &&
+      visitor->Visit("shaderDenormFlushToZeroFloat64",
+                     &properties->shaderDenormFlushToZeroFloat64) &&
+      visitor->Visit("shaderRoundingModeRTEFloat16",
+                     &properties->shaderRoundingModeRTEFloat16) &&
+      visitor->Visit("shaderRoundingModeRTEFloat32",
+                     &properties->shaderRoundingModeRTEFloat32) &&
+      visitor->Visit("shaderRoundingModeRTEFloat64",
+                     &properties->shaderRoundingModeRTEFloat64) &&
+      visitor->Visit("shaderRoundingModeRTZFloat16",
+                     &properties->shaderRoundingModeRTZFloat16) &&
+      visitor->Visit("shaderRoundingModeRTZFloat32",
+                     &properties->shaderRoundingModeRTZFloat32) &&
+      visitor->Visit("shaderRoundingModeRTZFloat64",
+                     &properties->shaderRoundingModeRTZFloat64) &&
+      visitor->Visit("maxUpdateAfterBindDescriptorsInAllPools",
+                     &properties->maxUpdateAfterBindDescriptorsInAllPools) &&
+      visitor->Visit(
+          "shaderUniformBufferArrayNonUniformIndexingNative",
+          &properties->shaderUniformBufferArrayNonUniformIndexingNative) &&
+      visitor->Visit(
+          "shaderSampledImageArrayNonUniformIndexingNative",
+          &properties->shaderSampledImageArrayNonUniformIndexingNative) &&
+      visitor->Visit(
+          "shaderStorageBufferArrayNonUniformIndexingNative",
+          &properties->shaderStorageBufferArrayNonUniformIndexingNative) &&
+      visitor->Visit(
+          "shaderStorageImageArrayNonUniformIndexingNative",
+          &properties->shaderStorageImageArrayNonUniformIndexingNative) &&
+      visitor->Visit(
+          "shaderInputAttachmentArrayNonUniformIndexingNative",
+          &properties->shaderInputAttachmentArrayNonUniformIndexingNative) &&
+      visitor->Visit("robustBufferAccessUpdateAfterBind",
+                     &properties->robustBufferAccessUpdateAfterBind) &&
+      visitor->Visit("quadDivergentImplicitLod",
+                     &properties->quadDivergentImplicitLod) &&
+      visitor->Visit(
+          "maxPerStageDescriptorUpdateAfterBindSamplers",
+          &properties->maxPerStageDescriptorUpdateAfterBindSamplers) &&
+      visitor->Visit(
+          "maxPerStageDescriptorUpdateAfterBindUniformBuffers",
+          &properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers) &&
+      visitor->Visit(
+          "maxPerStageDescriptorUpdateAfterBindStorageBuffers",
+          &properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers) &&
+      visitor->Visit(
+          "maxPerStageDescriptorUpdateAfterBindSampledImages",
+          &properties->maxPerStageDescriptorUpdateAfterBindSampledImages) &&
+      visitor->Visit(
+          "maxPerStageDescriptorUpdateAfterBindStorageImages",
+          &properties->maxPerStageDescriptorUpdateAfterBindStorageImages) &&
+      visitor->Visit(
+          "maxPerStageDescriptorUpdateAfterBindInputAttachments",
+          &properties->maxPerStageDescriptorUpdateAfterBindInputAttachments) &&
+      visitor->Visit("maxPerStageUpdateAfterBindResources",
+                     &properties->maxPerStageUpdateAfterBindResources) &&
+      visitor->Visit("maxDescriptorSetUpdateAfterBindSamplers",
+                     &properties->maxDescriptorSetUpdateAfterBindSamplers) &&
+      visitor->Visit(
+          "maxDescriptorSetUpdateAfterBindUniformBuffers",
+          &properties->maxDescriptorSetUpdateAfterBindUniformBuffers) &&
+      visitor->Visit(
+          "maxDescriptorSetUpdateAfterBindUniformBuffersDynamic",
+          &properties->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic) &&
+      visitor->Visit(
+          "maxDescriptorSetUpdateAfterBindStorageBuffers",
+          &properties->maxDescriptorSetUpdateAfterBindStorageBuffers) &&
+      visitor->Visit(
+          "maxDescriptorSetUpdateAfterBindStorageBuffersDynamic",
+          &properties->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic) &&
+      visitor->Visit(
+          "maxDescriptorSetUpdateAfterBindSampledImages",
+          &properties->maxDescriptorSetUpdateAfterBindSampledImages) &&
+      visitor->Visit(
+          "maxDescriptorSetUpdateAfterBindStorageImages",
+          &properties->maxDescriptorSetUpdateAfterBindStorageImages) &&
+      visitor->Visit(
+          "maxDescriptorSetUpdateAfterBindInputAttachments",
+          &properties->maxDescriptorSetUpdateAfterBindInputAttachments) &&
+      visitor->Visit("supportedDepthResolveModes",
+                     &properties->supportedDepthResolveModes) &&
+      visitor->Visit("supportedStencilResolveModes",
+                     &properties->supportedStencilResolveModes) &&
+      visitor->Visit("independentResolveNone",
+                     &properties->independentResolveNone) &&
+      visitor->Visit("independentResolve", &properties->independentResolve) &&
+      visitor->Visit("filterMinmaxSingleComponentFormats",
+                     &properties->filterMinmaxSingleComponentFormats) &&
+      visitor->Visit("filterMinmaxImageComponentMapping",
+                     &properties->filterMinmaxImageComponentMapping) &&
+      visitor->Visit("maxTimelineSemaphoreValueDifference",
+                     &properties->maxTimelineSemaphoreValueDifference) &&
+      visitor->Visit("framebufferIntegerColorSampleCounts",
+                     &properties->framebufferIntegerColorSampleCounts);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVulkan12Features* features) {
+  return
+
+      visitor->Visit("samplerMirrorClampToEdge",
+                     &features->samplerMirrorClampToEdge) &&
+      visitor->Visit("drawIndirectCount", &features->drawIndirectCount) &&
+      visitor->Visit("storageBuffer8BitAccess",
+                     &features->storageBuffer8BitAccess) &&
+      visitor->Visit("uniformAndStorageBuffer8BitAccess",
+                     &features->uniformAndStorageBuffer8BitAccess) &&
+      visitor->Visit("storagePushConstant8", &features->storagePushConstant8) &&
+      visitor->Visit("shaderBufferInt64Atomics",
+                     &features->shaderBufferInt64Atomics) &&
+      visitor->Visit("shaderSharedInt64Atomics",
+                     &features->shaderSharedInt64Atomics) &&
+      visitor->Visit("shaderFloat16", &features->shaderFloat16) &&
+      visitor->Visit("shaderInt8", &features->shaderInt8) &&
+      visitor->Visit("descriptorIndexing", &features->descriptorIndexing) &&
+      visitor->Visit("shaderInputAttachmentArrayDynamicIndexing",
+                     &features->shaderInputAttachmentArrayDynamicIndexing) &&
+      visitor->Visit("shaderUniformTexelBufferArrayDynamicIndexing",
+                     &features->shaderUniformTexelBufferArrayDynamicIndexing) &&
+      visitor->Visit("shaderStorageTexelBufferArrayDynamicIndexing",
+                     &features->shaderStorageTexelBufferArrayDynamicIndexing) &&
+      visitor->Visit("shaderUniformBufferArrayNonUniformIndexing",
+                     &features->shaderUniformBufferArrayNonUniformIndexing) &&
+      visitor->Visit("shaderSampledImageArrayNonUniformIndexing",
+                     &features->shaderSampledImageArrayNonUniformIndexing) &&
+      visitor->Visit("shaderStorageBufferArrayNonUniformIndexing",
+                     &features->shaderStorageBufferArrayNonUniformIndexing) &&
+      visitor->Visit("shaderStorageImageArrayNonUniformIndexing",
+                     &features->shaderStorageImageArrayNonUniformIndexing) &&
+      visitor->Visit("shaderInputAttachmentArrayNonUniformIndexing",
+                     &features->shaderInputAttachmentArrayNonUniformIndexing) &&
+      visitor->Visit(
+          "shaderUniformTexelBufferArrayNonUniformIndexing",
+          &features->shaderUniformTexelBufferArrayNonUniformIndexing) &&
+      visitor->Visit(
+          "shaderStorageTexelBufferArrayNonUniformIndexing",
+          &features->shaderStorageTexelBufferArrayNonUniformIndexing) &&
+      visitor->Visit(
+          "descriptorBindingUniformBufferUpdateAfterBind",
+          &features->descriptorBindingUniformBufferUpdateAfterBind) &&
+      visitor->Visit("descriptorBindingSampledImageUpdateAfterBind",
+                     &features->descriptorBindingSampledImageUpdateAfterBind) &&
+      visitor->Visit("descriptorBindingStorageImageUpdateAfterBind",
+                     &features->descriptorBindingStorageImageUpdateAfterBind) &&
+      visitor->Visit(
+          "descriptorBindingStorageBufferUpdateAfterBind",
+          &features->descriptorBindingStorageBufferUpdateAfterBind) &&
+      visitor->Visit(
+          "descriptorBindingUniformTexelBufferUpdateAfterBind",
+          &features->descriptorBindingUniformTexelBufferUpdateAfterBind) &&
+      visitor->Visit(
+          "descriptorBindingStorageTexelBufferUpdateAfterBind",
+          &features->descriptorBindingStorageTexelBufferUpdateAfterBind) &&
+      visitor->Visit("descriptorBindingUpdateUnusedWhilePending",
+                     &features->descriptorBindingUpdateUnusedWhilePending) &&
+      visitor->Visit("descriptorBindingPartiallyBound",
+                     &features->descriptorBindingPartiallyBound) &&
+      visitor->Visit("descriptorBindingVariableDescriptorCount",
+                     &features->descriptorBindingVariableDescriptorCount) &&
+      visitor->Visit("runtimeDescriptorArray",
+                     &features->runtimeDescriptorArray) &&
+      visitor->Visit("samplerFilterMinmax", &features->samplerFilterMinmax) &&
+      visitor->Visit("scalarBlockLayout", &features->scalarBlockLayout) &&
+      visitor->Visit("imagelessFramebuffer", &features->imagelessFramebuffer) &&
+      visitor->Visit("uniformBufferStandardLayout",
+                     &features->uniformBufferStandardLayout) &&
+      visitor->Visit("shaderSubgroupExtendedTypes",
+                     &features->shaderSubgroupExtendedTypes) &&
+      visitor->Visit("separateDepthStencilLayouts",
+                     &features->separateDepthStencilLayouts) &&
+      visitor->Visit("hostQueryReset", &features->hostQueryReset) &&
+      visitor->Visit("timelineSemaphore", &features->timelineSemaphore) &&
+      visitor->Visit("bufferDeviceAddress", &features->bufferDeviceAddress) &&
+      visitor->Visit("bufferDeviceAddressCaptureReplay",
+                     &features->bufferDeviceAddressCaptureReplay) &&
+      visitor->Visit("bufferDeviceAddressMultiDevice",
+                     &features->bufferDeviceAddressMultiDevice) &&
+      visitor->Visit("vulkanMemoryModel", &features->vulkanMemoryModel) &&
+      visitor->Visit("vulkanMemoryModelDeviceScope",
+                     &features->vulkanMemoryModelDeviceScope) &&
+      visitor->Visit(
+          "vulkanMemoryModelAvailabilityVisibilityChains",
+          &features->vulkanMemoryModelAvailabilityVisibilityChains) &&
+      visitor->Visit("shaderOutputViewportIndex",
+                     &features->shaderOutputViewportIndex) &&
+      visitor->Visit("shaderOutputLayer", &features->shaderOutputLayer) &&
+      visitor->Visit("subgroupBroadcastDynamicId",
+                     &features->subgroupBroadcastDynamicId);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVulkan13Properties* properties) {
+  return
+
+      visitor->Visit("minSubgroupSize", &properties->minSubgroupSize) &&
+      visitor->Visit("maxSubgroupSize", &properties->maxSubgroupSize) &&
+      visitor->Visit("maxComputeWorkgroupSubgroups",
+                     &properties->maxComputeWorkgroupSubgroups) &&
+      visitor->Visit("requiredSubgroupSizeStages",
+                     &properties->requiredSubgroupSizeStages) &&
+      visitor->Visit("maxInlineUniformBlockSize",
+                     &properties->maxInlineUniformBlockSize) &&
+      visitor->Visit("maxPerStageDescriptorInlineUniformBlocks",
+                     &properties->maxPerStageDescriptorInlineUniformBlocks) &&
+      visitor->Visit(
+          "maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks",
+          &properties
+               ->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks) &&
+      visitor->Visit("maxDescriptorSetInlineUniformBlocks",
+                     &properties->maxDescriptorSetInlineUniformBlocks) &&
+      visitor->Visit(
+          "maxDescriptorSetUpdateAfterBindInlineUniformBlocks",
+          &properties->maxDescriptorSetUpdateAfterBindInlineUniformBlocks) &&
+      visitor->Visit("maxInlineUniformTotalSize",
+                     &properties->maxInlineUniformTotalSize) &&
+      visitor->Visit("integerDotProduct8BitUnsignedAccelerated",
+                     &properties->integerDotProduct8BitUnsignedAccelerated) &&
+      visitor->Visit("integerDotProduct8BitSignedAccelerated",
+                     &properties->integerDotProduct8BitSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProduct8BitMixedSignednessAccelerated",
+          &properties->integerDotProduct8BitMixedSignednessAccelerated) &&
+      visitor->Visit(
+          "integerDotProduct4x8BitPackedUnsignedAccelerated",
+          &properties->integerDotProduct4x8BitPackedUnsignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProduct4x8BitPackedSignedAccelerated",
+          &properties->integerDotProduct4x8BitPackedSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProduct4x8BitPackedMixedSignednessAccelerated",
+          &properties
+               ->integerDotProduct4x8BitPackedMixedSignednessAccelerated) &&
+      visitor->Visit("integerDotProduct16BitUnsignedAccelerated",
+                     &properties->integerDotProduct16BitUnsignedAccelerated) &&
+      visitor->Visit("integerDotProduct16BitSignedAccelerated",
+                     &properties->integerDotProduct16BitSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProduct16BitMixedSignednessAccelerated",
+          &properties->integerDotProduct16BitMixedSignednessAccelerated) &&
+      visitor->Visit("integerDotProduct32BitUnsignedAccelerated",
+                     &properties->integerDotProduct32BitUnsignedAccelerated) &&
+      visitor->Visit("integerDotProduct32BitSignedAccelerated",
+                     &properties->integerDotProduct32BitSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProduct32BitMixedSignednessAccelerated",
+          &properties->integerDotProduct32BitMixedSignednessAccelerated) &&
+      visitor->Visit("integerDotProduct64BitUnsignedAccelerated",
+                     &properties->integerDotProduct64BitUnsignedAccelerated) &&
+      visitor->Visit("integerDotProduct64BitSignedAccelerated",
+                     &properties->integerDotProduct64BitSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProduct64BitMixedSignednessAccelerated",
+          &properties->integerDotProduct64BitMixedSignednessAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating8BitUnsignedAccelerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating8BitSignedAccelerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating8BitSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerate"
+          "d",
+          &properties
+               ->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerat"
+          "ed",
+          &properties
+               ->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerate"
+          "d",
+          &properties
+               ->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAc"
+          "celerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating16BitUnsignedAccelerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating16BitSignedAccelerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating16BitSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerat"
+          "ed",
+          &properties
+               ->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating32BitUnsignedAccelerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating32BitSignedAccelerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating32BitSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerat"
+          "ed",
+          &properties
+               ->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating64BitUnsignedAccelerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating64BitSignedAccelerated",
+          &properties
+               ->integerDotProductAccumulatingSaturating64BitSignedAccelerated) &&
+      visitor->Visit(
+          "integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerat"
+          "ed",
+          &properties
+               ->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated) &&
+      visitor->Visit("storageTexelBufferOffsetAlignmentBytes",
+                     &properties->storageTexelBufferOffsetAlignmentBytes) &&
+      visitor->Visit(
+          "storageTexelBufferOffsetSingleTexelAlignment",
+          &properties->storageTexelBufferOffsetSingleTexelAlignment) &&
+      visitor->Visit("uniformTexelBufferOffsetAlignmentBytes",
+                     &properties->uniformTexelBufferOffsetAlignmentBytes) &&
+      visitor->Visit(
+          "uniformTexelBufferOffsetSingleTexelAlignment",
+          &properties->uniformTexelBufferOffsetSingleTexelAlignment) &&
+      visitor->Visit("maxBufferSize", &properties->maxBufferSize);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVulkan13Features* features) {
+  return
+
+      visitor->Visit("robustImageAccess", &features->robustImageAccess) &&
+      visitor->Visit("inlineUniformBlock", &features->inlineUniformBlock) &&
+      visitor->Visit(
+          "descriptorBindingInlineUniformBlockUpdateAfterBind",
+          &features->descriptorBindingInlineUniformBlockUpdateAfterBind) &&
+      visitor->Visit("pipelineCreationCacheControl",
+                     &features->pipelineCreationCacheControl) &&
+      visitor->Visit("privateData", &features->privateData) &&
+      visitor->Visit("shaderDemoteToHelperInvocation",
+                     &features->shaderDemoteToHelperInvocation) &&
+      visitor->Visit("shaderTerminateInvocation",
+                     &features->shaderTerminateInvocation) &&
+      visitor->Visit("subgroupSizeControl", &features->subgroupSizeControl) &&
+      visitor->Visit("computeFullSubgroups", &features->computeFullSubgroups) &&
+      visitor->Visit("synchronization2", &features->synchronization2) &&
+      visitor->Visit("textureCompressionASTC_HDR",
+                     &features->textureCompressionASTC_HDR) &&
+      visitor->Visit("shaderZeroInitializeWorkgroupMemory",
+                     &features->shaderZeroInitializeWorkgroupMemory) &&
+      visitor->Visit("dynamicRendering", &features->dynamicRendering) &&
+      visitor->Visit("shaderIntegerDotProduct",
+                     &features->shaderIntegerDotProduct) &&
+      visitor->Visit("maintenance4", &features->maintenance4);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVulkan14Properties* properties) {
+  return
+
+      visitor->Visit("lineSubPixelPrecisionBits",
+                     &properties->lineSubPixelPrecisionBits) &&
+      visitor->Visit("maxVertexAttribDivisor",
+                     &properties->maxVertexAttribDivisor) &&
+      visitor->Visit("supportsNonZeroFirstInstance",
+                     &properties->supportsNonZeroFirstInstance) &&
+      visitor->Visit("maxPushDescriptors", &properties->maxPushDescriptors) &&
+      visitor->Visit(
+          "dynamicRenderingLocalReadDepthStencilAttachments",
+          &properties->dynamicRenderingLocalReadDepthStencilAttachments) &&
+      visitor->Visit(
+          "dynamicRenderingLocalReadMultisampledAttachments",
+          &properties->dynamicRenderingLocalReadMultisampledAttachments) &&
+      visitor->Visit(
+          "earlyFragmentMultisampleCoverageAfterSampleCounting",
+          &properties->earlyFragmentMultisampleCoverageAfterSampleCounting) &&
+      visitor->Visit(
+          "earlyFragmentSampleMaskTestBeforeSampleCounting",
+          &properties->earlyFragmentSampleMaskTestBeforeSampleCounting) &&
+      visitor->Visit("depthStencilSwizzleOneSupport",
+                     &properties->depthStencilSwizzleOneSupport) &&
+      visitor->Visit("polygonModePointSize",
+                     &properties->polygonModePointSize) &&
+      visitor->Visit(
+          "nonStrictSinglePixelWideLinesUseParallelogram",
+          &properties->nonStrictSinglePixelWideLinesUseParallelogram) &&
+      visitor->Visit("nonStrictWideLinesUseParallelogram",
+                     &properties->nonStrictWideLinesUseParallelogram) &&
+      visitor->Visit("blockTexelViewCompatibleMultipleLayers",
+                     &properties->blockTexelViewCompatibleMultipleLayers) &&
+      visitor->Visit("maxCombinedImageSamplerDescriptorCount",
+                     &properties->maxCombinedImageSamplerDescriptorCount) &&
+      visitor->Visit("fragmentShadingRateClampCombinerInputs",
+                     &properties->fragmentShadingRateClampCombinerInputs) &&
+      visitor->Visit("defaultRobustnessStorageBuffers",
+                     &properties->defaultRobustnessStorageBuffers) &&
+      visitor->Visit("defaultRobustnessUniformBuffers",
+                     &properties->defaultRobustnessUniformBuffers) &&
+      visitor->Visit("defaultRobustnessVertexInputs",
+                     &properties->defaultRobustnessVertexInputs) &&
+      visitor->Visit("defaultRobustnessImages",
+                     &properties->defaultRobustnessImages) &&
+      visitor->Visit("copySrcLayoutCount", &properties->copySrcLayoutCount) &&
+      visitor->VisitArray("pCopySrcLayouts", properties->copySrcLayoutCount,
+                          &properties->pCopySrcLayouts) &&
+      visitor->Visit("copyDstLayoutCount", &properties->copyDstLayoutCount) &&
+      visitor->VisitArray("pCopyDstLayouts", properties->copyDstLayoutCount,
+                          &properties->pCopyDstLayouts) &&
+      visitor->Visit("optimalTilingLayoutUUID",
+                     &properties->optimalTilingLayoutUUID) &&
+      visitor->Visit("identicalMemoryTypeRequirements",
+                     &properties->identicalMemoryTypeRequirements);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceVulkan14Features* features) {
+  return
+
+      visitor->Visit("globalPriorityQuery", &features->globalPriorityQuery) &&
+      visitor->Visit("shaderSubgroupRotate", &features->shaderSubgroupRotate) &&
+      visitor->Visit("shaderSubgroupRotateClustered",
+                     &features->shaderSubgroupRotateClustered) &&
+      visitor->Visit("shaderFloatControls2", &features->shaderFloatControls2) &&
+      visitor->Visit("shaderExpectAssume", &features->shaderExpectAssume) &&
+      visitor->Visit("rectangularLines", &features->rectangularLines) &&
+      visitor->Visit("bresenhamLines", &features->bresenhamLines) &&
+      visitor->Visit("smoothLines", &features->smoothLines) &&
+      visitor->Visit("stippledRectangularLines",
+                     &features->stippledRectangularLines) &&
+      visitor->Visit("stippledBresenhamLines",
+                     &features->stippledBresenhamLines) &&
+      visitor->Visit("stippledSmoothLines", &features->stippledSmoothLines) &&
+      visitor->Visit("vertexAttributeInstanceRateDivisor",
+                     &features->vertexAttributeInstanceRateDivisor) &&
+      visitor->Visit("vertexAttributeInstanceRateZeroDivisor",
+                     &features->vertexAttributeInstanceRateZeroDivisor) &&
+      visitor->Visit("indexTypeUint8", &features->indexTypeUint8) &&
+      visitor->Visit("dynamicRenderingLocalRead",
+                     &features->dynamicRenderingLocalRead) &&
+      visitor->Visit("maintenance5", &features->maintenance5) &&
+      visitor->Visit("maintenance6", &features->maintenance6) &&
+      visitor->Visit("pipelineProtectedAccess",
+                     &features->pipelineProtectedAccess) &&
+      visitor->Visit("pipelineRobustness", &features->pipelineRobustness) &&
+      visitor->Visit("hostImageCopy", &features->hostImageCopy);
+}
+
+template <typename Visitor>
+inline bool Iterate(Visitor* visitor,
+                    VkPhysicalDeviceDriverProperties* properties) {
+  return
+
+      visitor->Visit("driverID", &properties->driverID) &&
+      visitor->Visit("driverName", &properties->driverName) &&
+      visitor->Visit("driverInfo", &properties->driverInfo) &&
+      visitor->Visit("conformanceVersion", &properties->conformanceVersion);
 }
 
 template <typename Visitor>
@@ -1154,39 +1929,6 @@
 }
 
 template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkQueueFamilyProperties* properties) {
-  return
-    visitor->Visit("queueFlags", &properties->queueFlags) &&
-    visitor->Visit("queueCount", &properties->queueCount) &&
-    visitor->Visit("timestampValidBits", &properties->timestampValidBits) &&
-    visitor->Visit("minImageTransferGranularity", &properties->minImageTransferGranularity);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkExtensionProperties* properties) {
-  return
-    visitor->Visit("extensionName", &properties->extensionName) &&
-    visitor->Visit("specVersion", &properties->specVersion);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkLayerProperties* properties) {
-  return
-    visitor->Visit("layerName", &properties->layerName) &&
-    visitor->Visit("specVersion", &properties->specVersion) &&
-    visitor->Visit("implementationVersion", &properties->implementationVersion) &&
-    visitor->Visit("description", &properties->description);
-}
-
-template <typename Visitor>
-inline bool Iterate(Visitor* visitor, VkFormatProperties* properties) {
-  return
-    visitor->Visit("linearTilingFeatures", &properties->linearTilingFeatures) &&
-    visitor->Visit("optimalTilingFeatures", &properties->optimalTilingFeatures) &&
-    visitor->Visit("bufferFeatures", &properties->bufferFeatures);
-}
-
-template <typename Visitor>
 inline bool Iterate(Visitor* visitor, VkJsonLayer* layer) {
   return visitor->Visit("properties", &layer->properties) &&
          visitor->Visit("extensions", &layer->extensions);
@@ -1211,6 +1953,7 @@
       ret &= visitor->Visit("core13", &device->core13);
       FALLTHROUGH_INTENDED;
     case VK_API_VERSION_1_2:
+      ret &= visitor->Visit("core11", &device->core11);
       ret &= visitor->Visit("core12", &device->core12);
       FALLTHROUGH_INTENDED;
     case VK_API_VERSION_1_1:
@@ -1223,17 +1966,17 @@
           visitor->Visit("idProperties", &device->id_properties) &&
           visitor->Visit("maintenance3Properties",
                          &device->maintenance3_properties) &&
-          visitor->Visit("16bitStorageFeatures",
-                         &device->bit16_storage_features) &&
           visitor->Visit("multiviewFeatures", &device->multiview_features) &&
-          visitor->Visit("variablePointerFeatures",
-                         &device->variable_pointer_features) &&
+          visitor->Visit("variablePointersFeatures",
+                         &device->variable_pointers_features) &&
           visitor->Visit("protectedMemoryFeatures",
                          &device->protected_memory_features) &&
           visitor->Visit("samplerYcbcrConversionFeatures",
                          &device->sampler_ycbcr_conversion_features) &&
           visitor->Visit("shaderDrawParameterFeatures",
                          &device->shader_draw_parameter_features) &&
+          visitor->Visit("bit16StorageFeatures",
+                         &device->bit16_storage_features) &&
           visitor->Visit("externalFenceProperties",
                          &device->external_fence_properties) &&
           visitor->Visit("externalSemaphoreProperties",
@@ -1247,21 +1990,90 @@
              visitor->Visit("extensions", &device->extensions) &&
              visitor->Visit("layers", &device->layers) &&
              visitor->Visit("formats", &device->formats);
-      if (device->ext_driver_properties.reported) {
-        ret &= visitor->Visit("VK_KHR_driver_properties",
-                            &device->ext_driver_properties);
-      }
-      if (device->ext_variable_pointer_features.reported) {
+
+      if (device->khr_variable_pointers.reported) {
         ret &= visitor->Visit("VK_KHR_variable_pointers",
-                            &device->ext_variable_pointer_features);
+                              &device->khr_variable_pointers);
       }
-      if (device->ext_image_2d_view_of_3d_features.reported) {
-        ret &= visitor->Visit("VK_EXT_image_2d_view_of_3d",
-                              &device->ext_image_2d_view_of_3d_features);
-      }
-      if (device->ext_shader_float16_int8_features.reported) {
+      if (device->khr_shader_float16_int8.reported) {
         ret &= visitor->Visit("VK_KHR_shader_float16_int8",
-                              &device->ext_shader_float16_int8_features);
+                              &device->khr_shader_float16_int8);
+      }
+      if (device->ext_image_2d_view_of_3d.reported) {
+        ret &= visitor->Visit("VK_EXT_image_2d_view_of_3d",
+                              &device->ext_image_2d_view_of_3d);
+      }
+      if (device->ext_custom_border_color.reported) {
+        ret &= visitor->Visit("VK_EXT_custom_border_color",
+                              &device->ext_custom_border_color);
+      }
+      if (device->ext_primitive_topology_list_restart.reported) {
+        ret &= visitor->Visit("VK_EXT_primitive_topology_list_restart",
+                              &device->ext_primitive_topology_list_restart);
+      }
+      if (device->ext_provoking_vertex.reported) {
+        ret &= visitor->Visit("VK_EXT_provoking_vertex",
+                              &device->ext_provoking_vertex);
+      }
+      if (device->khr_index_type_uint8.reported) {
+        ret &= visitor->Visit("VK_KHR_index_type_uint8",
+                              &device->khr_index_type_uint8);
+      }
+      if (device->ext_index_type_uint8.reported) {
+        ret &= visitor->Visit("VK_EXT_index_type_uint8",
+                              &device->ext_index_type_uint8);
+      }
+      if (device->khr_vertex_attribute_divisor.reported) {
+        ret &= visitor->Visit("VK_KHR_vertex_attribute_divisor",
+                              &device->khr_vertex_attribute_divisor);
+      }
+      if (device->ext_vertex_attribute_divisor.reported) {
+        ret &= visitor->Visit("VK_EXT_vertex_attribute_divisor",
+                              &device->ext_vertex_attribute_divisor);
+      }
+      if (device->ext_transform_feedback.reported) {
+        ret &= visitor->Visit("VK_EXT_transform_feedback",
+                              &device->ext_transform_feedback);
+      }
+      if (device->khr_shader_subgroup_uniform_control_flow.reported) {
+        ret &=
+            visitor->Visit("VK_KHR_shader_subgroup_uniform_control_flow",
+                           &device->khr_shader_subgroup_uniform_control_flow);
+      }
+      if (device->khr_shader_subgroup_extended_types.reported) {
+        ret &= visitor->Visit("VK_KHR_shader_subgroup_extended_types",
+                              &device->khr_shader_subgroup_extended_types);
+      }
+      if (device->khr_8bit_storage.reported) {
+        ret &= visitor->Visit("VK_KHR_8bit_storage", &device->khr_8bit_storage);
+      }
+      if (device->khr_shader_integer_dot_product.reported) {
+        ret &= visitor->Visit("VK_KHR_shader_integer_dot_product",
+                              &device->khr_shader_integer_dot_product);
+      }
+      if (device->img_relaxed_line_rasterization.reported) {
+        ret &= visitor->Visit("VK_IMG_relaxed_line_rasterization",
+                              &device->img_relaxed_line_rasterization);
+      }
+      if (device->khr_line_rasterization.reported) {
+        ret &= visitor->Visit("VK_KHR_line_rasterization",
+                              &device->khr_line_rasterization);
+      }
+      if (device->ext_line_rasterization.reported) {
+        ret &= visitor->Visit("VK_EXT_line_rasterization",
+                              &device->ext_line_rasterization);
+      }
+      if (device->ext_primitives_generated_query.reported) {
+        ret &= visitor->Visit("VK_EXT_primitives_generated_query",
+                              &device->ext_primitives_generated_query);
+      }
+      if (device->khr_shader_float_controls.reported) {
+        ret &= visitor->Visit("VK_KHR_shader_float_controls",
+                              &device->khr_shader_float_controls);
+      }
+      if (device->khr_driver_properties.reported) {
+        ret &= visitor->Visit("VK_KHR_driver_properties",
+                              &device->khr_driver_properties);
       }
   }
   return ret;
@@ -1319,7 +2131,9 @@
   return Json::Value(string);
 }
 
-template <typename T, typename = EnableForEnum<T>, typename = void,
+template <typename T,
+          typename = EnableForEnum<T>,
+          typename = void,
           typename = void>
 inline Json::Value ToJsonValue(const T& value) {
   return Json::Value(static_cast<double>(value));
@@ -1328,7 +2142,8 @@
 template <typename T>
 inline Json::Value ArrayToJsonValue(uint32_t count, const T* values) {
   Json::Value array(Json::arrayValue);
-  for (unsigned int i = 0; i < count; ++i) array.append(ToJsonValue(values[i]));
+  for (unsigned int i = 0; i < count; ++i)
+    array.append(ToJsonValue(values[i]));
   return array;
 }
 
@@ -1360,7 +2175,8 @@
 template <typename F, typename S>
 inline Json::Value ToJsonValue(const std::map<F, S>& value) {
   Json::Value array(Json::arrayValue);
-  for (auto& kv : value) array.append(ToJsonValue(kv));
+  for (auto& kv : value)
+    array.append(ToJsonValue(kv));
   return array;
 }
 
@@ -1370,7 +2186,8 @@
 
   ~JsonWriterVisitor() {}
 
-  template <typename T> bool Visit(const char* key, const T* value) {
+  template <typename T>
+  bool Visit(const char* key, const T* value) {
     object_[key] = ToJsonValue(*value);
     return true;
   }
@@ -1383,7 +2200,7 @@
   }
 
   template <typename T>
-  bool VisitArray(const char* key, uint32_t count, const T *value) {
+  bool VisitArray(const char* key, uint32_t count, const T* value) {
     object_[key] = ArrayToJsonValue(count, *value);
     return true;
   }
@@ -1410,7 +2227,8 @@
 bool AsValue(Json::Value* json_value, T* t);
 
 inline bool AsValue(Json::Value* json_value, int32_t* value) {
-  if (json_value->type() != Json::realValue) return false;
+  if (json_value->type() != Json::realValue)
+    return false;
   double d = json_value->asDouble();
   if (!IsIntegral(d) ||
       d < static_cast<double>(std::numeric_limits<int32_t>::min()) ||
@@ -1421,14 +2239,16 @@
 }
 
 inline bool AsValue(Json::Value* json_value, uint64_t* value) {
-  if (json_value->type() != Json::stringValue) return false;
+  if (json_value->type() != Json::stringValue)
+    return false;
   int result =
       std::sscanf(json_value->asString().c_str(), "0x%016" PRIx64, value);
   return result == 1;
 }
 
 inline bool AsValue(Json::Value* json_value, uint32_t* value) {
-  if (json_value->type() != Json::realValue) return false;
+  if (json_value->type() != Json::realValue)
+    return false;
   double d = json_value->asDouble();
   if (!IsIntegral(d) || d < 0.0 ||
       d > static_cast<double>(std::numeric_limits<uint32_t>::max()))
@@ -1447,7 +2267,8 @@
 }
 
 inline bool AsValue(Json::Value* json_value, float* value) {
-  if (json_value->type() != Json::realValue) return false;
+  if (json_value->type() != Json::realValue)
+    return false;
   *value = static_cast<float>(json_value->asDouble());
   return true;
 }
@@ -1456,7 +2277,8 @@
   uint32_t value = 0;
   if (!AsValue(json_value, &value))
     return false;
-  if (!EnumTraits<VkImageLayout>::exist(value)) return false;
+  if (!EnumTraits<VkImageLayout>::exist(value))
+    return false;
   *t = static_cast<VkImageLayout>(value);
   return true;
 }
@@ -1466,7 +2288,8 @@
   if (json_value->type() != Json::arrayValue || json_value->size() != count)
     return false;
   for (uint32_t i = 0; i < count; ++i) {
-    if (!AsValue(&(*json_value)[i], values + i)) return false;
+    if (!AsValue(&(*json_value)[i], values + i))
+      return false;
   }
   return true;
 }
@@ -1478,12 +2301,13 @@
 
 template <size_t N>
 inline bool AsValue(Json::Value* json_value, char (*value)[N]) {
-  if (json_value->type() != Json::stringValue) return false;
+  if (json_value->type() != Json::stringValue)
+    return false;
   size_t len = json_value->asString().length();
   if (len >= N)
     return false;
   memcpy(*value, json_value->asString().c_str(), len);
-  memset(*value + len, 0, N-len);
+  memset(*value + len, 0, N - len);
   return true;
 }
 
@@ -1491,15 +2315,17 @@
 inline bool AsValue(Json::Value* json_value, T* t) {
   uint32_t value = 0;
   if (!AsValue(json_value, &value))
-      return false;
-  if (!EnumTraits<T>::exist(value)) return false;
+    return false;
+  if (!EnumTraits<T>::exist(value))
+    return false;
   *t = static_cast<T>(value);
   return true;
 }
 
 template <typename T>
 inline bool AsValue(Json::Value* json_value, std::vector<T>* value) {
-  if (json_value->type() != Json::arrayValue) return false;
+  if (json_value->type() != Json::arrayValue)
+    return false;
   int size = json_value->size();
   value->resize(size);
   return AsArray(json_value, size, value->data());
@@ -1515,11 +2341,13 @@
 
 template <typename F, typename S>
 inline bool AsValue(Json::Value* json_value, std::map<F, S>* value) {
-  if (json_value->type() != Json::arrayValue) return false;
+  if (json_value->type() != Json::arrayValue)
+    return false;
   int size = json_value->size();
   for (int i = 0; i < size; ++i) {
     std::pair<F, S> elem;
-    if (!AsValue(&(*json_value)[i], &elem)) return false;
+    if (!AsValue(&(*json_value)[i], &elem))
+      return false;
     if (!value->insert(elem).second)
       return false;
   }
@@ -1527,7 +2355,9 @@
 }
 
 template <typename T>
-bool ReadValue(Json::Value* object, const char* key, T* value,
+bool ReadValue(Json::Value* object,
+               const char* key,
+               T* value,
                std::string* errors) {
   Json::Value json_value = (*object)[key];
   if (!json_value) {
@@ -1535,7 +2365,8 @@
       *errors = std::string(key) + " missing.";
     return false;
   }
-  if (AsValue(&json_value, value)) return true;
+  if (AsValue(&json_value, value))
+    return true;
   if (errors)
     *errors = std::string("Wrong type for ") + std::string(key) + ".";
   return false;
@@ -1551,7 +2382,8 @@
   JsonReaderVisitor(Json::Value* object, std::string* errors)
       : object_(object), errors_(errors) {}
 
-  template <typename T> bool Visit(const char* key, T* value) const {
+  template <typename T>
+  bool Visit(const char* key, T* value) const {
     return ReadValue(object_, key, value, errors_);
   }
 
@@ -1565,27 +2397,28 @@
         *errors_ = std::string(key) + " missing.";
       return false;
     }
-    if (AsArray(&json_value, count, *value)) return true;
+    if (AsArray(&json_value, count, *value))
+      return true;
     if (errors_)
       *errors_ = std::string("Wrong type for ") + std::string(key) + ".";
     return false;
   }
 
   template <typename T>
-  bool VisitArray(const char* key, uint32_t count, T *value) {
+  bool VisitArray(const char* key, uint32_t count, T* value) {
     Json::Value json_value = (*object_)[key];
     if (!json_value) {
       if (errors_)
         *errors_ = std::string(key) + " missing.";
       return false;
     }
-    if (AsArray(&json_value, count, *value)) return true;
+    if (AsArray(&json_value, count, *value))
+      return true;
     if (errors_)
       *errors_ = std::string("Wrong type for ") + std::string(key) + ".";
     return false;
   }
 
-
  private:
   Json::Value* object_;
   std::string* errors_;
@@ -1593,21 +2426,21 @@
 
 template <typename T, typename /*= EnableForStruct<T>*/>
 bool AsValue(Json::Value* json_value, T* t) {
-  if (json_value->type() != Json::objectValue) return false;
+  if (json_value->type() != Json::objectValue)
+    return false;
   JsonReaderVisitor visitor(json_value, nullptr);
   return VisitForRead(&visitor, t);
 }
 
-
-template <typename T> std::string VkTypeToJson(const T& t) {
+template <typename T>
+std::string VkTypeToJson(const T& t) {
   JsonWriterVisitor visitor;
   VisitForWrite(&visitor, t);
   return visitor.get_object().toStyledString();
 }
 
-template <typename T> bool VkTypeFromJson(const std::string& json,
-                                          T* t,
-                                          std::string* errors) {
+template <typename T>
+bool VkTypeFromJson(const std::string& json, T* t, std::string* errors) {
   *t = T();
   Json::Value object(Json::objectValue);
   Json::CharReaderBuilder builder;
diff --git a/vulkan/vkjson/vkjson.h b/vulkan/vkjson/vkjson.h
index 87a76c1..d74644c 100644
--- a/vulkan/vkjson/vkjson.h
+++ b/vulkan/vkjson/vkjson.h
@@ -21,8 +21,8 @@
 #ifndef VKJSON_H_
 #define VKJSON_H_
 
-#include <vulkan/vulkan.h>
 #include <string.h>
+#include <vulkan/vulkan.h>
 
 #include <map>
 #include <string>
@@ -38,8 +38,222 @@
   std::vector<VkExtensionProperties> extensions;
 };
 
-struct VkJsonExtDriverProperties {
-  VkJsonExtDriverProperties() {
+struct VkJsonKHRVariablePointers {
+  VkJsonKHRVariablePointers() {
+    reported = false;
+    memset(&variable_pointer_features_khr, 0,
+           sizeof(VkPhysicalDeviceVariablePointerFeaturesKHR));
+    memset(&variable_pointers_features_khr, 0,
+           sizeof(VkPhysicalDeviceVariablePointersFeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features_khr;
+  VkPhysicalDeviceVariablePointersFeaturesKHR variable_pointers_features_khr;
+};
+
+struct VkJsonKHRShaderFloat16Int8 {
+  VkJsonKHRShaderFloat16Int8() {
+    reported = false;
+    memset(&shader_float16_int8_features_khr, 0,
+           sizeof(VkPhysicalDeviceShaderFloat16Int8FeaturesKHR));
+    memset(&float16_int8_features_khr, 0,
+           sizeof(VkPhysicalDeviceFloat16Int8FeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_float16_int8_features_khr;
+  VkPhysicalDeviceFloat16Int8FeaturesKHR float16_int8_features_khr;
+};
+
+struct VkJsonExtImage2dViewOf3d {
+  VkJsonExtImage2dViewOf3d() {
+    reported = false;
+    memset(&image_2d_view_of_3d_features_ext, 0,
+           sizeof(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDeviceImage2DViewOf3DFeaturesEXT image_2d_view_of_3d_features_ext;
+};
+
+struct VkJsonExtCustomBorderColor {
+  VkJsonExtCustomBorderColor() {
+    reported = false;
+    memset(&custom_border_color_features_ext, 0,
+           sizeof(VkPhysicalDeviceCustomBorderColorFeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDeviceCustomBorderColorFeaturesEXT custom_border_color_features_ext;
+};
+
+struct VkJsonExtPrimitiveTopologyListRestart {
+  VkJsonExtPrimitiveTopologyListRestart() {
+    reported = false;
+    memset(&primitive_topology_list_restart_features_ext, 0,
+           sizeof(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
+      primitive_topology_list_restart_features_ext;
+};
+
+struct VkJsonExtProvokingVertex {
+  VkJsonExtProvokingVertex() {
+    reported = false;
+    memset(&provoking_vertex_features_ext, 0,
+           sizeof(VkPhysicalDeviceProvokingVertexFeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDeviceProvokingVertexFeaturesEXT provoking_vertex_features_ext;
+};
+
+struct VkJsonKHRIndexTypeUint8 {
+  VkJsonKHRIndexTypeUint8() {
+    reported = false;
+    memset(&index_type_uint8_features_khr, 0,
+           sizeof(VkPhysicalDeviceIndexTypeUint8FeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceIndexTypeUint8FeaturesKHR index_type_uint8_features_khr;
+};
+
+struct VkJsonExtIndexTypeUint8 {
+  VkJsonExtIndexTypeUint8() {
+    reported = false;
+    memset(&index_type_uint8_features_ext, 0,
+           sizeof(VkPhysicalDeviceIndexTypeUint8FeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDeviceIndexTypeUint8FeaturesEXT index_type_uint8_features_ext;
+};
+
+struct VkJsonKHRVertexAttributeDivisor {
+  VkJsonKHRVertexAttributeDivisor() {
+    reported = false;
+    memset(&vertex_attribute_divisor_features_khr, 0,
+           sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR
+      vertex_attribute_divisor_features_khr;
+};
+
+struct VkJsonExtVertexAttributeDivisor {
+  VkJsonExtVertexAttributeDivisor() {
+    reported = false;
+    memset(&vertex_attribute_divisor_features_ext, 0,
+           sizeof(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT
+      vertex_attribute_divisor_features_ext;
+};
+
+struct VkJsonExtTransformFeedback {
+  VkJsonExtTransformFeedback() {
+    reported = false;
+    memset(&transform_feedback_features_ext, 0,
+           sizeof(VkPhysicalDeviceTransformFeedbackFeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDeviceTransformFeedbackFeaturesEXT transform_feedback_features_ext;
+};
+
+struct VkJsonKHRShaderSubgroupUniformControlFlow {
+  VkJsonKHRShaderSubgroupUniformControlFlow() {
+    reported = false;
+    memset(&shader_subgroup_uniform_control_flow_features_khr, 0,
+           sizeof(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
+      shader_subgroup_uniform_control_flow_features_khr;
+};
+
+struct VkJsonKHRShaderSubgroupExtendedTypes {
+  VkJsonKHRShaderSubgroupExtendedTypes() {
+    reported = false;
+    memset(&shader_subgroup_extended_types_features_khr, 0,
+           sizeof(VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR
+      shader_subgroup_extended_types_features_khr;
+};
+
+struct VkJsonKHR8bitStorage {
+  VkJsonKHR8bitStorage() {
+    reported = false;
+    memset(&bit8_storage_features_khr, 0,
+           sizeof(VkPhysicalDevice8BitStorageFeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDevice8BitStorageFeaturesKHR bit8_storage_features_khr;
+};
+
+struct VkJsonKHRShaderIntegerDotProduct {
+  VkJsonKHRShaderIntegerDotProduct() {
+    reported = false;
+    memset(&shader_integer_dot_product_features_khr, 0,
+           sizeof(VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR
+      shader_integer_dot_product_features_khr;
+};
+
+struct VkJsonIMGRelaxedLineRasterization {
+  VkJsonIMGRelaxedLineRasterization() {
+    reported = false;
+    memset(&relaxed_line_rasterization_features_img, 0,
+           sizeof(VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG));
+  }
+  bool reported;
+  VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG
+      relaxed_line_rasterization_features_img;
+};
+
+struct VkJsonKHRLineRasterization {
+  VkJsonKHRLineRasterization() {
+    reported = false;
+    memset(&line_rasterization_features_khr, 0,
+           sizeof(VkPhysicalDeviceLineRasterizationFeaturesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceLineRasterizationFeaturesKHR line_rasterization_features_khr;
+};
+
+struct VkJsonExtLineRasterization {
+  VkJsonExtLineRasterization() {
+    reported = false;
+    memset(&line_rasterization_features_ext, 0,
+           sizeof(VkPhysicalDeviceLineRasterizationFeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDeviceLineRasterizationFeaturesEXT line_rasterization_features_ext;
+};
+
+struct VkJsonExtPrimitivesGeneratedQuery {
+  VkJsonExtPrimitivesGeneratedQuery() {
+    reported = false;
+    memset(&primitives_generated_query_features_ext, 0,
+           sizeof(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT));
+  }
+  bool reported;
+  VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
+      primitives_generated_query_features_ext;
+};
+
+struct VkJsonKHRShaderFloatControls {
+  VkJsonKHRShaderFloatControls() {
+    reported = false;
+    memset(&float_controls_properties_khr, 0,
+           sizeof(VkPhysicalDeviceFloatControlsPropertiesKHR));
+  }
+  bool reported;
+  VkPhysicalDeviceFloatControlsPropertiesKHR float_controls_properties_khr;
+};
+
+struct VkJsonKHRDriverProperties {
+  VkJsonKHRDriverProperties() {
     reported = false;
     memset(&driver_properties_khr, 0,
            sizeof(VkPhysicalDeviceDriverPropertiesKHR));
@@ -48,34 +262,9 @@
   VkPhysicalDeviceDriverPropertiesKHR driver_properties_khr;
 };
 
-struct VkJsonExtVariablePointerFeatures {
-  VkJsonExtVariablePointerFeatures() {
-    reported = false;
-    memset(&variable_pointer_features_khr, 0,
-           sizeof(VkPhysicalDeviceVariablePointerFeaturesKHR));
-  }
-  bool reported;
-  VkPhysicalDeviceVariablePointerFeaturesKHR variable_pointer_features_khr;
-};
-
-struct VkJsonExtImage2DViewOf3DFeatures {
-  VkJsonExtImage2DViewOf3DFeatures() {
-    reported = false;
-    memset(&image_2D_view_of_3D_features_EXT, 0,
-           sizeof(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT));
-  }
-  bool reported;
-  VkPhysicalDeviceImage2DViewOf3DFeaturesEXT image_2D_view_of_3D_features_EXT;
-};
-
-struct VkJsonExtShaderFloat16Int8Features {
-  VkJsonExtShaderFloat16Int8Features() {
-    reported = false;
-    memset(&shader_float16_int8_features_khr, 0,
-           sizeof(VkPhysicalDeviceShaderFloat16Int8FeaturesKHR));
-  }
-  bool reported;
-  VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_float16_int8_features_khr;
+struct VkJsonCore11 {
+  VkPhysicalDeviceVulkan11Properties properties;
+  VkPhysicalDeviceVulkan11Features features;
 };
 
 struct VkJsonCore12 {
@@ -109,29 +298,48 @@
     memset(&bit16_storage_features, 0,
            sizeof(VkPhysicalDevice16BitStorageFeatures));
     memset(&multiview_features, 0, sizeof(VkPhysicalDeviceMultiviewFeatures));
-    memset(&variable_pointer_features, 0,
-           sizeof(VkPhysicalDeviceVariablePointerFeatures));
+    memset(&variable_pointers_features, 0,
+           sizeof(VkPhysicalDeviceVariablePointersFeatures));
     memset(&protected_memory_features, 0,
            sizeof(VkPhysicalDeviceProtectedMemoryFeatures));
     memset(&sampler_ycbcr_conversion_features, 0,
            sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
     memset(&shader_draw_parameter_features, 0,
            sizeof(VkPhysicalDeviceShaderDrawParameterFeatures));
+    memset(&core11, 0, sizeof(VkJsonCore11));
     memset(&core12, 0, sizeof(VkJsonCore12));
     memset(&core13, 0, sizeof(VkJsonCore13));
     memset(&core14, 0, sizeof(VkJsonCore14));
   }
+  VkJsonKHRVariablePointers khr_variable_pointers;
+  VkJsonKHRShaderFloat16Int8 khr_shader_float16_int8;
+  VkJsonExtImage2dViewOf3d ext_image_2d_view_of_3d;
+  VkJsonExtCustomBorderColor ext_custom_border_color;
+  VkJsonExtPrimitiveTopologyListRestart ext_primitive_topology_list_restart;
+  VkJsonExtProvokingVertex ext_provoking_vertex;
+  VkJsonKHRIndexTypeUint8 khr_index_type_uint8;
+  VkJsonExtIndexTypeUint8 ext_index_type_uint8;
+  VkJsonKHRVertexAttributeDivisor khr_vertex_attribute_divisor;
+  VkJsonExtVertexAttributeDivisor ext_vertex_attribute_divisor;
+  VkJsonExtTransformFeedback ext_transform_feedback;
+  VkJsonKHRShaderSubgroupUniformControlFlow
+      khr_shader_subgroup_uniform_control_flow;
+  VkJsonKHRShaderSubgroupExtendedTypes khr_shader_subgroup_extended_types;
+  VkJsonKHR8bitStorage khr_8bit_storage;
+  VkJsonKHRShaderIntegerDotProduct khr_shader_integer_dot_product;
+  VkJsonIMGRelaxedLineRasterization img_relaxed_line_rasterization;
+  VkJsonKHRLineRasterization khr_line_rasterization;
+  VkJsonExtLineRasterization ext_line_rasterization;
+  VkJsonExtPrimitivesGeneratedQuery ext_primitives_generated_query;
+  VkJsonKHRShaderFloatControls khr_shader_float_controls;
+  VkJsonKHRDriverProperties khr_driver_properties;
+  VkJsonCore11 core11;
+  VkJsonCore12 core12;
+  VkJsonCore13 core13;
+  VkJsonCore14 core14;
   VkPhysicalDeviceProperties properties;
   VkPhysicalDeviceFeatures features;
-  VkJsonExtDriverProperties ext_driver_properties;
-  VkJsonExtVariablePointerFeatures ext_variable_pointer_features;
-  VkJsonExtImage2DViewOf3DFeatures ext_image_2d_view_of_3d_features;
-  VkJsonExtShaderFloat16Int8Features ext_shader_float16_int8_features;
   VkPhysicalDeviceMemoryProperties memory;
-  std::vector<VkQueueFamilyProperties> queues;
-  std::vector<VkExtensionProperties> extensions;
-  std::vector<VkLayerProperties> layers;
-  std::map<VkFormat, VkFormatProperties> formats;
   VkPhysicalDeviceSubgroupProperties subgroup_properties;
   VkPhysicalDevicePointClippingProperties point_clipping_properties;
   VkPhysicalDeviceMultiviewProperties multiview_properties;
@@ -139,18 +347,19 @@
   VkPhysicalDeviceMaintenance3Properties maintenance3_properties;
   VkPhysicalDevice16BitStorageFeatures bit16_storage_features;
   VkPhysicalDeviceMultiviewFeatures multiview_features;
-  VkPhysicalDeviceVariablePointerFeatures variable_pointer_features;
+  VkPhysicalDeviceVariablePointersFeatures variable_pointers_features;
   VkPhysicalDeviceProtectedMemoryFeatures protected_memory_features;
   VkPhysicalDeviceSamplerYcbcrConversionFeatures
       sampler_ycbcr_conversion_features;
   VkPhysicalDeviceShaderDrawParameterFeatures shader_draw_parameter_features;
+  std::vector<VkQueueFamilyProperties> queues;
+  std::vector<VkExtensionProperties> extensions;
+  std::vector<VkLayerProperties> layers;
+  std::map<VkFormat, VkFormatProperties> formats;
   std::map<VkExternalFenceHandleTypeFlagBits, VkExternalFenceProperties>
       external_fence_properties;
   std::map<VkExternalSemaphoreHandleTypeFlagBits, VkExternalSemaphoreProperties>
       external_semaphore_properties;
-  VkJsonCore12 core12;
-  VkJsonCore13 core13;
-  VkJsonCore14 core14;
 };
 
 struct VkJsonDeviceGroup {
@@ -204,4 +413,4 @@
   return VkJsonDeviceFromJson(json, properties, errors);
 }
 
-#endif  // VKJSON_H_
+#endif  // VKJSON_H_
\ No newline at end of file
diff --git a/vulkan/vkjson/vkjson_instance.cc b/vulkan/vkjson/vkjson_instance.cc
index 04bb446..22b3204 100644
--- a/vulkan/vkjson/vkjson_instance.cc
+++ b/vulkan/vkjson/vkjson_instance.cc
@@ -79,13 +79,25 @@
       nullptr,
       {},
   };
-  if (HasExtension("VK_KHR_driver_properties", device.extensions)) {
-    device.ext_driver_properties.reported = true;
-    device.ext_driver_properties.driver_properties_khr.sType =
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR;
-    device.ext_driver_properties.driver_properties_khr.pNext = properties.pNext;
-    properties.pNext = &device.ext_driver_properties.driver_properties_khr;
+
+  if (HasExtension("VK_KHR_shader_float_controls", device.extensions)) {
+    device.khr_shader_float_controls.reported = true;
+    device.khr_shader_float_controls.float_controls_properties_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES;
+    device.khr_shader_float_controls.float_controls_properties_khr.pNext =
+        properties.pNext;
+    properties.pNext =
+        &device.khr_shader_float_controls.float_controls_properties_khr;
   }
+
+  if (HasExtension("VK_KHR_driver_properties", device.extensions)) {
+    device.khr_driver_properties.reported = true;
+    device.khr_driver_properties.driver_properties_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES;
+    device.khr_driver_properties.driver_properties_khr.pNext = properties.pNext;
+    properties.pNext = &device.khr_driver_properties.driver_properties_khr;
+  }
+
   vkGetPhysicalDeviceProperties2(physical_device, &properties);
   device.properties = properties.properties;
 
@@ -94,35 +106,215 @@
       nullptr,
       {},
   };
+
   if (HasExtension("VK_KHR_variable_pointers", device.extensions)) {
-    device.ext_variable_pointer_features.reported = true;
-    device.ext_variable_pointer_features.variable_pointer_features_khr.sType =
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR;
-    device.ext_variable_pointer_features.variable_pointer_features_khr.pNext =
+    device.khr_variable_pointers.reported = true;
+    device.khr_variable_pointers.variable_pointer_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES;
+    device.khr_variable_pointers.variable_pointer_features_khr.pNext =
         features.pNext;
     features.pNext =
-        &device.ext_variable_pointer_features.variable_pointer_features_khr;
+        &device.khr_variable_pointers.variable_pointer_features_khr;
+    device.khr_variable_pointers.variable_pointers_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES;
+    device.khr_variable_pointers.variable_pointers_features_khr.pNext =
+        features.pNext;
+    features.pNext =
+        &device.khr_variable_pointers.variable_pointers_features_khr;
   }
-  if (HasExtension("VK_EXT_image_2d_view_of_3d", device.extensions)) {
-    device.ext_image_2d_view_of_3d_features.reported = true;
-    device.ext_image_2d_view_of_3d_features.image_2D_view_of_3D_features_EXT
-        .sType =
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT;
-    device.ext_image_2d_view_of_3d_features.image_2D_view_of_3D_features_EXT
-        .pNext = features.pNext;
-    features.pNext = &device.ext_image_2d_view_of_3d_features
-                          .image_2D_view_of_3D_features_EXT;
-  }
+
   if (HasExtension("VK_KHR_shader_float16_int8", device.extensions)) {
-    device.ext_shader_float16_int8_features.reported = true;
-    device.ext_shader_float16_int8_features.shader_float16_int8_features_khr
-        .sType =
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR;
-    device.ext_shader_float16_int8_features.shader_float16_int8_features_khr
-        .pNext = features.pNext;
-    features.pNext = &device.ext_shader_float16_int8_features
-                          .shader_float16_int8_features_khr;
+    device.khr_shader_float16_int8.reported = true;
+    device.khr_shader_float16_int8.shader_float16_int8_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
+    device.khr_shader_float16_int8.shader_float16_int8_features_khr.pNext =
+        features.pNext;
+    features.pNext =
+        &device.khr_shader_float16_int8.shader_float16_int8_features_khr;
+    device.khr_shader_float16_int8.float16_int8_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
+    device.khr_shader_float16_int8.float16_int8_features_khr.pNext =
+        features.pNext;
+    features.pNext = &device.khr_shader_float16_int8.float16_int8_features_khr;
   }
+
+  if (HasExtension("VK_EXT_image_2d_view_of_3d", device.extensions)) {
+    device.ext_image_2d_view_of_3d.reported = true;
+    device.ext_image_2d_view_of_3d.image_2d_view_of_3d_features_ext.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT;
+    device.ext_image_2d_view_of_3d.image_2d_view_of_3d_features_ext.pNext =
+        features.pNext;
+    features.pNext =
+        &device.ext_image_2d_view_of_3d.image_2d_view_of_3d_features_ext;
+  }
+
+  if (HasExtension("VK_EXT_custom_border_color", device.extensions)) {
+    device.ext_custom_border_color.reported = true;
+    device.ext_custom_border_color.custom_border_color_features_ext.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT;
+    device.ext_custom_border_color.custom_border_color_features_ext.pNext =
+        features.pNext;
+    features.pNext =
+        &device.ext_custom_border_color.custom_border_color_features_ext;
+  }
+
+  if (HasExtension("VK_EXT_primitive_topology_list_restart",
+                   device.extensions)) {
+    device.ext_primitive_topology_list_restart.reported = true;
+    device.ext_primitive_topology_list_restart
+        .primitive_topology_list_restart_features_ext.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT;
+    device.ext_primitive_topology_list_restart
+        .primitive_topology_list_restart_features_ext.pNext = features.pNext;
+    features.pNext = &device.ext_primitive_topology_list_restart
+                          .primitive_topology_list_restart_features_ext;
+  }
+
+  if (HasExtension("VK_EXT_provoking_vertex", device.extensions)) {
+    device.ext_provoking_vertex.reported = true;
+    device.ext_provoking_vertex.provoking_vertex_features_ext.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT;
+    device.ext_provoking_vertex.provoking_vertex_features_ext.pNext =
+        features.pNext;
+    features.pNext = &device.ext_provoking_vertex.provoking_vertex_features_ext;
+  }
+
+  if (HasExtension("VK_KHR_index_type_uint8", device.extensions)) {
+    device.khr_index_type_uint8.reported = true;
+    device.khr_index_type_uint8.index_type_uint8_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES;
+    device.khr_index_type_uint8.index_type_uint8_features_khr.pNext =
+        features.pNext;
+    features.pNext = &device.khr_index_type_uint8.index_type_uint8_features_khr;
+  }
+
+  if (HasExtension("VK_EXT_index_type_uint8", device.extensions)) {
+    device.ext_index_type_uint8.reported = true;
+    device.ext_index_type_uint8.index_type_uint8_features_ext.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES;
+    device.ext_index_type_uint8.index_type_uint8_features_ext.pNext =
+        features.pNext;
+    features.pNext = &device.ext_index_type_uint8.index_type_uint8_features_ext;
+  }
+
+  if (HasExtension("VK_KHR_vertex_attribute_divisor", device.extensions)) {
+    device.khr_vertex_attribute_divisor.reported = true;
+    device.khr_vertex_attribute_divisor.vertex_attribute_divisor_features_khr
+        .sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES;
+    device.khr_vertex_attribute_divisor.vertex_attribute_divisor_features_khr
+        .pNext = features.pNext;
+    features.pNext = &device.khr_vertex_attribute_divisor
+                          .vertex_attribute_divisor_features_khr;
+  }
+
+  if (HasExtension("VK_EXT_vertex_attribute_divisor", device.extensions)) {
+    device.ext_vertex_attribute_divisor.reported = true;
+    device.ext_vertex_attribute_divisor.vertex_attribute_divisor_features_ext
+        .sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES;
+    device.ext_vertex_attribute_divisor.vertex_attribute_divisor_features_ext
+        .pNext = features.pNext;
+    features.pNext = &device.ext_vertex_attribute_divisor
+                          .vertex_attribute_divisor_features_ext;
+  }
+
+  if (HasExtension("VK_EXT_transform_feedback", device.extensions)) {
+    device.ext_transform_feedback.reported = true;
+    device.ext_transform_feedback.transform_feedback_features_ext.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
+    device.ext_transform_feedback.transform_feedback_features_ext.pNext =
+        features.pNext;
+    features.pNext =
+        &device.ext_transform_feedback.transform_feedback_features_ext;
+  }
+
+  if (HasExtension("VK_KHR_shader_subgroup_uniform_control_flow",
+                   device.extensions)) {
+    device.khr_shader_subgroup_uniform_control_flow.reported = true;
+    device.khr_shader_subgroup_uniform_control_flow
+        .shader_subgroup_uniform_control_flow_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR;
+    device.khr_shader_subgroup_uniform_control_flow
+        .shader_subgroup_uniform_control_flow_features_khr.pNext =
+        features.pNext;
+    features.pNext = &device.khr_shader_subgroup_uniform_control_flow
+                          .shader_subgroup_uniform_control_flow_features_khr;
+  }
+
+  if (HasExtension("VK_KHR_shader_subgroup_extended_types",
+                   device.extensions)) {
+    device.khr_shader_subgroup_extended_types.reported = true;
+    device.khr_shader_subgroup_extended_types
+        .shader_subgroup_extended_types_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES;
+    device.khr_shader_subgroup_extended_types
+        .shader_subgroup_extended_types_features_khr.pNext = features.pNext;
+    features.pNext = &device.khr_shader_subgroup_extended_types
+                          .shader_subgroup_extended_types_features_khr;
+  }
+
+  if (HasExtension("VK_KHR_8bit_storage", device.extensions)) {
+    device.khr_8bit_storage.reported = true;
+    device.khr_8bit_storage.bit8_storage_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
+    device.khr_8bit_storage.bit8_storage_features_khr.pNext = features.pNext;
+    features.pNext = &device.khr_8bit_storage.bit8_storage_features_khr;
+  }
+
+  if (HasExtension("VK_KHR_shader_integer_dot_product", device.extensions)) {
+    device.khr_shader_integer_dot_product.reported = true;
+    device.khr_shader_integer_dot_product
+        .shader_integer_dot_product_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES;
+    device.khr_shader_integer_dot_product
+        .shader_integer_dot_product_features_khr.pNext = features.pNext;
+    features.pNext = &device.khr_shader_integer_dot_product
+                          .shader_integer_dot_product_features_khr;
+  }
+
+  if (HasExtension("VK_IMG_relaxed_line_rasterization", device.extensions)) {
+    device.img_relaxed_line_rasterization.reported = true;
+    device.img_relaxed_line_rasterization
+        .relaxed_line_rasterization_features_img.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG;
+    device.img_relaxed_line_rasterization
+        .relaxed_line_rasterization_features_img.pNext = features.pNext;
+    features.pNext = &device.img_relaxed_line_rasterization
+                          .relaxed_line_rasterization_features_img;
+  }
+
+  if (HasExtension("VK_KHR_line_rasterization", device.extensions)) {
+    device.khr_line_rasterization.reported = true;
+    device.khr_line_rasterization.line_rasterization_features_khr.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES;
+    device.khr_line_rasterization.line_rasterization_features_khr.pNext =
+        features.pNext;
+    features.pNext =
+        &device.khr_line_rasterization.line_rasterization_features_khr;
+  }
+
+  if (HasExtension("VK_EXT_line_rasterization", device.extensions)) {
+    device.ext_line_rasterization.reported = true;
+    device.ext_line_rasterization.line_rasterization_features_ext.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES;
+    device.ext_line_rasterization.line_rasterization_features_ext.pNext =
+        features.pNext;
+    features.pNext =
+        &device.ext_line_rasterization.line_rasterization_features_ext;
+  }
+
+  if (HasExtension("VK_EXT_primitives_generated_query", device.extensions)) {
+    device.ext_primitives_generated_query.reported = true;
+    device.ext_primitives_generated_query
+        .primitives_generated_query_features_ext.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT;
+    device.ext_primitives_generated_query
+        .primitives_generated_query_features_ext.pNext = features.pNext;
+    features.pNext = &device.ext_primitives_generated_query
+                          .primitives_generated_query_features_ext;
+  }
+
   vkGetPhysicalDeviceFeatures2(physical_device, &features);
   device.features = features.features;
 
@@ -194,20 +386,15 @@
 
     vkGetPhysicalDeviceProperties2(physical_device, &properties);
 
-    device.bit16_storage_features.sType =
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES;
-    device.bit16_storage_features.pNext = features.pNext;
-    features.pNext = &device.bit16_storage_features;
-
     device.multiview_features.sType =
         VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
     device.multiview_features.pNext = features.pNext;
     features.pNext = &device.multiview_features;
 
-    device.variable_pointer_features.sType =
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES;
-    device.variable_pointer_features.pNext = features.pNext;
-    features.pNext = &device.variable_pointer_features;
+    device.variable_pointers_features.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
+    device.variable_pointers_features.pNext = features.pNext;
+    features.pNext = &device.variable_pointers_features;
 
     device.protected_memory_features.sType =
         VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
@@ -220,10 +407,15 @@
     features.pNext = &device.sampler_ycbcr_conversion_features;
 
     device.shader_draw_parameter_features.sType =
-        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES;
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
     device.shader_draw_parameter_features.pNext = features.pNext;
     features.pNext = &device.shader_draw_parameter_features;
 
+    device.bit16_storage_features.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES;
+    device.bit16_storage_features.pNext = features.pNext;
+    features.pNext = &device.bit16_storage_features;
+
     vkGetPhysicalDeviceFeatures2(physical_device, &features);
 
     VkPhysicalDeviceExternalFenceInfo external_fence_info = {
@@ -271,6 +463,11 @@
   }
 
   if (device.properties.apiVersion >= VK_API_VERSION_1_2) {
+    device.core11.properties.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES;
+    device.core11.properties.pNext = properties.pNext;
+    properties.pNext = &device.core11.properties;
+
     device.core12.properties.sType =
         VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES;
     device.core12.properties.pNext = properties.pNext;
@@ -278,6 +475,11 @@
 
     vkGetPhysicalDeviceProperties2(physical_device, &properties);
 
+    device.core11.features.sType =
+        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
+    device.core11.features.pNext = features.pNext;
+    features.pNext = &device.core11.features;
+
     device.core12.features.sType =
         VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
     device.core12.features.pNext = features.pNext;
@@ -337,7 +539,8 @@
       return VkJsonInstance();
     instance.layers.reserve(count);
     for (auto& layer : layers) {
-      instance.layers.push_back(VkJsonLayer{layer, std::vector<VkExtensionProperties>()});
+      instance.layers.push_back(
+          VkJsonLayer{layer, std::vector<VkExtensionProperties>()});
       if (!EnumerateExtensions(layer.layerName,
                                &instance.layers.back().extensions))
         return VkJsonInstance();
