{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "https://schema.khronos.org/vulkan/devsim_1_2_0.json#",
    "title": "JSON schema for Vulkan device simulation layer configuration file",
    "description": "Schema for Vulkan 1.2 data structures, as used to configure the device simulation layer.",
    "type": "object",
    "additionalProperties": true,

    "definitions": {
        "$schema": {"type": "string", "format": "uri"},
        "uint8_t": {"type": "integer", "minimum": 0, "maximum": 255},
        "int32_t": {"type": "integer", "minimum": -2147483648, "maximum": 2147483647},
        "uint32_t": {"type": "integer", "minimum": 0, "maximum": 4294967295},
        "uint64_t": {"type": "integer"},
        "float": {"type": "number"},
        "size_t": {"$ref": "#/definitions/uint32_t"},
        "enum": {"$ref": "#/definitions/int32_t"},
        "VkBool32": {"$ref": "#/definitions/uint32_t"},
        "VkDeviceSize": {"$ref": "#/definitions/uint64_t"},
        "VkFlags": {"$ref": "#/definitions/uint32_t"},
        "VkFormatFeatureFlags": {"$ref": "#/definitions/VkFlags"},
        "VkMemoryHeapFlags": {"$ref": "#/definitions/VkFlags"},
        "VkMemoryPropertyFlags": {"$ref": "#/definitions/VkFlags"},
        "VkQueueFlags": {"$ref": "#/definitions/VkFlags"},
        "VkSampleCountFlags": {"$ref": "#/definitions/VkFlags"},
        "VkPhysicalDeviceType": {"$ref": "#/definitions/enum"},
        "VkPointClippingBehavior": {"$ref": "#/definitions/enum"},
        "VkResolveModeFlags": {"$ref": "#/definitions/enum"},
        "VkShaderFloatControlsIndependence": {"$ref": "#/definitions/enum"},
        "VkFormat": {"$ref": "#/definitions/enum"},
        "VkPhysicalDeviceLimits": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "maxImageDimension1D": {"$ref": "#/definitions/uint32_t"},
                "maxImageDimension2D": {"$ref": "#/definitions/uint32_t"},
                "maxImageDimension3D": {"$ref": "#/definitions/uint32_t"},
                "maxImageDimensionCube": {"$ref": "#/definitions/uint32_t"},
                "maxImageArrayLayers": {"$ref": "#/definitions/uint32_t"},
                "maxTexelBufferElements": {"$ref": "#/definitions/uint32_t"},
                "maxUniformBufferRange": {"$ref": "#/definitions/uint32_t"},
                "maxStorageBufferRange": {"$ref": "#/definitions/uint32_t"},
                "maxPushConstantsSize": {"$ref": "#/definitions/uint32_t"},
                "maxMemoryAllocationCount": {"$ref": "#/definitions/uint32_t"},
                "maxSamplerAllocationCount": {"$ref": "#/definitions/uint32_t"},
                "bufferImageGranularity": {"$ref": "#/definitions/VkDeviceSize"},
                "sparseAddressSpaceSize": {"$ref": "#/definitions/VkDeviceSize"},
                "maxBoundDescriptorSets": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorSamplers": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorUniformBuffers": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorStorageBuffers": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorSampledImages": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorStorageImages": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorInputAttachments": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageResources": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetSamplers": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUniformBuffers": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUniformBuffersDynamic": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetStorageBuffers": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetStorageBuffersDynamic": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetSampledImages": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetStorageImages": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetInputAttachments": {"$ref": "#/definitions/uint32_t"},
                "maxVertexInputAttributes": {"$ref": "#/definitions/uint32_t"},
                "maxVertexInputBindings": {"$ref": "#/definitions/uint32_t"},
                "maxVertexInputAttributeOffset": {"$ref": "#/definitions/uint32_t"},
                "maxVertexInputBindingStride": {"$ref": "#/definitions/uint32_t"},
                "maxVertexOutputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxTessellationGenerationLevel": {"$ref": "#/definitions/uint32_t"},
                "maxTessellationPatchSize": {"$ref": "#/definitions/uint32_t"},
                "maxTessellationControlPerVertexInputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxTessellationControlPerVertexOutputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxTessellationControlPerPatchOutputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxTessellationControlTotalOutputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxTessellationEvaluationInputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxTessellationEvaluationOutputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxGeometryShaderInvocations": {"$ref": "#/definitions/uint32_t"},
                "maxGeometryInputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxGeometryOutputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxGeometryOutputVertices": {"$ref": "#/definitions/uint32_t"},
                "maxGeometryTotalOutputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxFragmentInputComponents": {"$ref": "#/definitions/uint32_t"},
                "maxFragmentOutputAttachments": {"$ref": "#/definitions/uint32_t"},
                "maxFragmentDualSrcAttachments": {"$ref": "#/definitions/uint32_t"},
                "maxFragmentCombinedOutputResources": {"$ref": "#/definitions/uint32_t"},
                "maxComputeSharedMemorySize": {"$ref": "#/definitions/uint32_t"},
                "maxComputeWorkGroupCount": {"type": "array", "minItems": 3, "maxItems": 3, "items": {"$ref": "#/definitions/uint32_t"}},
                "maxComputeWorkGroupInvocations": {"$ref": "#/definitions/uint32_t"},
                "maxComputeWorkGroupSize": {"type": "array", "minItems": 3, "maxItems": 3, "items": {"$ref": "#/definitions/uint32_t"}},
                "subPixelPrecisionBits": {"$ref": "#/definitions/uint32_t"},
                "subTexelPrecisionBits": {"$ref": "#/definitions/uint32_t"},
                "mipmapPrecisionBits": {"$ref": "#/definitions/uint32_t"},
                "maxDrawIndexedIndexValue": {"$ref": "#/definitions/uint32_t"},
                "maxDrawIndirectCount": {"$ref": "#/definitions/uint32_t"},
                "maxSamplerLodBias": {"$ref": "#/definitions/float"},
                "maxSamplerAnisotropy": {"$ref": "#/definitions/float"},
                "maxViewports": {"$ref": "#/definitions/uint32_t"},
                "maxViewportDimensions": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"$ref": "#/definitions/uint32_t"}},
                "viewportBoundsRange": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"$ref": "#/definitions/float"}},
                "viewportSubPixelBits": {"$ref": "#/definitions/uint32_t"},
                "minMemoryMapAlignment": {"$ref": "#/definitions/size_t"},
                "minTexelBufferOffsetAlignment": {"$ref": "#/definitions/VkDeviceSize"},
                "minUniformBufferOffsetAlignment": {"$ref": "#/definitions/VkDeviceSize"},
                "minStorageBufferOffsetAlignment": {"$ref": "#/definitions/VkDeviceSize"},
                "minTexelOffset": {"$ref": "#/definitions/int32_t"},
                "maxTexelOffset": {"$ref": "#/definitions/uint32_t"},
                "minTexelGatherOffset": {"$ref": "#/definitions/int32_t"},
                "maxTexelGatherOffset": {"$ref": "#/definitions/uint32_t"},
                "minInterpolationOffset": {"$ref": "#/definitions/float"},
                "maxInterpolationOffset": {"$ref": "#/definitions/float"},
                "subPixelInterpolationOffsetBits": {"$ref": "#/definitions/uint32_t"},
                "maxFramebufferWidth": {"$ref": "#/definitions/uint32_t"},
                "maxFramebufferHeight": {"$ref": "#/definitions/uint32_t"},
                "maxFramebufferLayers": {"$ref": "#/definitions/uint32_t"},
                "framebufferColorSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "framebufferDepthSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "framebufferStencilSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "framebufferNoAttachmentsSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "maxColorAttachments": {"$ref": "#/definitions/uint32_t"},
                "sampledImageColorSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "sampledImageIntegerSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "sampledImageDepthSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "sampledImageStencilSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "storageImageSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"},
                "maxSampleMaskWords": {"$ref": "#/definitions/uint32_t"},
                "timestampComputeAndGraphics": {"$ref": "#/definitions/VkBool32"},
                "timestampPeriod": {"$ref": "#/definitions/float"},
                "maxClipDistances": {"$ref": "#/definitions/uint32_t"},
                "maxCullDistances": {"$ref": "#/definitions/uint32_t"},
                "maxCombinedClipAndCullDistances": {"$ref": "#/definitions/uint32_t"},
                "discreteQueuePriorities": {"$ref": "#/definitions/uint32_t"},
                "pointSizeRange": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"$ref": "#/definitions/float"}},
                "lineWidthRange": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"$ref": "#/definitions/float"}},
                "pointSizeGranularity": {"$ref": "#/definitions/float"},
                "lineWidthGranularity": {"$ref": "#/definitions/float"},
                "strictLines": {"$ref": "#/definitions/VkBool32"},
                "standardSampleLocations": {"$ref": "#/definitions/VkBool32"},
                "optimalBufferCopyOffsetAlignment": {"$ref": "#/definitions/VkDeviceSize"},
                "optimalBufferCopyRowPitchAlignment": {"$ref": "#/definitions/VkDeviceSize"},
                "nonCoherentAtomSize": {"$ref": "#/definitions/VkDeviceSize"}
            }
        },
        "VkPhysicalDeviceSparseProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "residencyStandard2DBlockShape": {"$ref": "#/definitions/VkBool32"},
                "residencyStandard2DMultisampleBlockShape": {"$ref": "#/definitions/VkBool32"},
                "residencyStandard3DBlockShape": {"$ref": "#/definitions/VkBool32"},
                "residencyAlignedMipSize": {"$ref": "#/definitions/VkBool32"},
                "residencyNonResidentStrict": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "apiVersion": {"$ref": "#/definitions/uint32_t"},
                "driverVersion": {"$ref": "#/definitions/uint32_t"},
                "vendorID": {"$ref": "#/definitions/uint32_t"},
                "deviceID": {"$ref": "#/definitions/uint32_t"},
                "deviceType": {"$ref": "#/definitions/VkPhysicalDeviceType"},
                "deviceName": {"type": "string", "maxLength": 255},
                "pipelineCacheUUID": {"type": "array", "minItems": 16, "maxItems": 16, "items": {"$ref": "#/definitions/uint8_t"}},
                "limits": {"$ref": "#/definitions/VkPhysicalDeviceLimits"},
                "sparseProperties": {"$ref": "#/definitions/VkPhysicalDeviceSparseProperties"}
            }
        },
        "VkPhysicalDeviceDepthStencilResolveProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "supportedDepthResolveModes": {"$ref": "#/definitions/VkResolveModeFlags"},
                "supportedStencilResolveModes": {"$ref": "#/definitions/VkResolveModeFlags"},
                "independentResolveNone": {"$ref": "#/definitions/VkBool32"},
                "independentResolve": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceDescriptorIndexingProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "maxUpdateAfterBindDescriptorsInAllPools": {"$ref": "#/definitions/uint32_t"},
                "shaderUniformBufferArrayNonUniformIndexingNative": {"$ref": "#/definitions/VkBool32"},
                "shaderSampledImageArrayNonUniformIndexingNative": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageBufferArrayNonUniformIndexingNative": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageImageArrayNonUniformIndexingNative": {"$ref": "#/definitions/VkBool32"},
                "shaderInputAttachmentArrayNonUniformIndexingNative": {"$ref": "#/definitions/VkBool32"},
                "robustBufferAccessUpdateAfterBind": {"$ref": "#/definitions/VkBool32"},
                "quadDivergentImplicitLod": {"$ref": "#/definitions/VkBool32"},
                "maxPerStageDescriptorUpdateAfterBindSamplers": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorUpdateAfterBindUniformBuffers": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorUpdateAfterBindStorageBuffers": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorUpdateAfterBindSampledImages": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorUpdateAfterBindStorageImages": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageDescriptorUpdateAfterBindInputAttachments": {"$ref": "#/definitions/uint32_t"},
                "maxPerStageUpdateAfterBindResources": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUpdateAfterBindSamplers": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUpdateAfterBindUniformBuffers": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUpdateAfterBindUniformBuffersDynamic": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUpdateAfterBindStorageBuffers": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUpdateAfterBindStorageBuffersDynamic": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUpdateAfterBindSampledImages": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUpdateAfterBindStorageImages": {"$ref": "#/definitions/uint32_t"},
                "maxDescriptorSetUpdateAfterBindInputAttachments": {"$ref": "#/definitions/uint32_t"}

            }
        },
        "VkPhysicalDeviceFloatControlsProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "denormBehaviorIndependence": {"$ref": "#/definitions/VkShaderFloatControlsIndependence"},
                "roundingModeIndependence": {"$ref": "#/definitions/VkShaderFloatControlsIndependence"},
                "shaderSignedZeroInfNanPreserveFloat16": {"$ref": "#/definitions/VkBool32"},
                "shaderSignedZeroInfNanPreserveFloat32": {"$ref": "#/definitions/VkBool32"},
                "shaderSignedZeroInfNanPreserveFloat64": {"$ref": "#/definitions/VkBool32"},
                "shaderDenormPreserveFloat16": {"$ref": "#/definitions/VkBool32"},
                "shaderDenormPreserveFloat32": {"$ref": "#/definitions/VkBool32"},
                "shaderDenormPreserveFloat64": {"$ref": "#/definitions/VkBool32"},
                "shaderDenormFlushToZeroFloat16": {"$ref": "#/definitions/VkBool32"},
                "shaderDenormFlushToZeroFloat32": {"$ref": "#/definitions/VkBool32"},
                "shaderDenormFlushToZeroFloat64": {"$ref": "#/definitions/VkBool32"},
                "shaderRoundingModeRTEFloat16": {"$ref": "#/definitions/VkBool32"},
                "shaderRoundingModeRTEFloat32": {"$ref": "#/definitions/VkBool32"},
                "shaderRoundingModeRTEFloat64": {"$ref": "#/definitions/VkBool32"},
                "shaderRoundingModeRTZFloat16": {"$ref": "#/definitions/VkBool32"},
                "shaderRoundingModeRTZFloat32": {"$ref": "#/definitions/VkBool32"},
                "shaderRoundingModeRTZFloat64": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceMaintenance3Properties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "maxPerSetDescriptors": {"$ref": "#/definitions/uint32_t"},
                "maxMemoryAllocationSize" : {"$ref": "#/definitions/VkDeviceSize"}
            }
        },
        "VkPhysicalDeviceMultiviewProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "maxMultiviewViewCount": {"$ref": "#/definitions/uint32_t"},
                "maxMultiviewInstanceIndex" : {"$ref": "#/definitions/uint32_t"}
            }
        },
        "VkPhysicalDevicePointClippingProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "pointClippingBehavior": {"$ref": "#/definitions/VkPointClippingBehavior"}
            }
        },
        "VkPhysicalDeviceProtectedMemoryProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "protectedNoFault": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceSamplerFilterMinmaxProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "filterMinmaxSingleComponentFormats": {"$ref": "#/definitions/VkBool32"},
                "filterMinmaxImageComponentMapping": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceTimelineSemaphoreProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "maxTimelineSemaphoreValueDifference": {"$ref": "#/definitions/uint64_t"}
            }
        },
        "VkPhysicalDeviceFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "robustBufferAccess": {"$ref": "#/definitions/VkBool32"},
                "fullDrawIndexUint32": {"$ref": "#/definitions/VkBool32"},
                "imageCubeArray": {"$ref": "#/definitions/VkBool32"},
                "independentBlend": {"$ref": "#/definitions/VkBool32"},
                "geometryShader": {"$ref": "#/definitions/VkBool32"},
                "tessellationShader": {"$ref": "#/definitions/VkBool32"},
                "sampleRateShading": {"$ref": "#/definitions/VkBool32"},
                "dualSrcBlend": {"$ref": "#/definitions/VkBool32"},
                "logicOp": {"$ref": "#/definitions/VkBool32"},
                "multiDrawIndirect": {"$ref": "#/definitions/VkBool32"},
                "drawIndirectFirstInstance": {"$ref": "#/definitions/VkBool32"},
                "depthClamp": {"$ref": "#/definitions/VkBool32"},
                "depthBiasClamp": {"$ref": "#/definitions/VkBool32"},
                "fillModeNonSolid": {"$ref": "#/definitions/VkBool32"},
                "depthBounds": {"$ref": "#/definitions/VkBool32"},
                "wideLines": {"$ref": "#/definitions/VkBool32"},
                "largePoints": {"$ref": "#/definitions/VkBool32"},
                "alphaToOne": {"$ref": "#/definitions/VkBool32"},
                "multiViewport": {"$ref": "#/definitions/VkBool32"},
                "samplerAnisotropy": {"$ref": "#/definitions/VkBool32"},
                "textureCompressionETC2": {"$ref": "#/definitions/VkBool32"},
                "textureCompressionASTC_LDR": {"$ref": "#/definitions/VkBool32"},
                "textureCompressionBC": {"$ref": "#/definitions/VkBool32"},
                "occlusionQueryPrecise": {"$ref": "#/definitions/VkBool32"},
                "pipelineStatisticsQuery": {"$ref": "#/definitions/VkBool32"},
                "vertexPipelineStoresAndAtomics": {"$ref": "#/definitions/VkBool32"},
                "fragmentStoresAndAtomics": {"$ref": "#/definitions/VkBool32"},
                "shaderTessellationAndGeometryPointSize": {"$ref": "#/definitions/VkBool32"},
                "shaderImageGatherExtended": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageImageExtendedFormats": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageImageMultisample": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageImageReadWithoutFormat": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageImageWriteWithoutFormat": {"$ref": "#/definitions/VkBool32"},
                "shaderUniformBufferArrayDynamicIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderSampledImageArrayDynamicIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageBufferArrayDynamicIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageImageArrayDynamicIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderClipDistance": {"$ref": "#/definitions/VkBool32"},
                "shaderCullDistance": {"$ref": "#/definitions/VkBool32"},
                "shaderFloat64": {"$ref": "#/definitions/VkBool32"},
                "shaderInt64": {"$ref": "#/definitions/VkBool32"},
                "shaderInt16": {"$ref": "#/definitions/VkBool32"},
                "shaderResourceResidency": {"$ref": "#/definitions/VkBool32"},
                "shaderResourceMinLod": {"$ref": "#/definitions/VkBool32"},
                "sparseBinding": {"$ref": "#/definitions/VkBool32"},
                "sparseResidencyBuffer": {"$ref": "#/definitions/VkBool32"},
                "sparseResidencyImage2D": {"$ref": "#/definitions/VkBool32"},
                "sparseResidencyImage3D": {"$ref": "#/definitions/VkBool32"},
                "sparseResidency2Samples": {"$ref": "#/definitions/VkBool32"},
                "sparseResidency4Samples": {"$ref": "#/definitions/VkBool32"},
                "sparseResidency8Samples": {"$ref": "#/definitions/VkBool32"},
                "sparseResidency16Samples": {"$ref": "#/definitions/VkBool32"},
                "sparseResidencyAliased": {"$ref": "#/definitions/VkBool32"},
                "variableMultisampleRate": {"$ref": "#/definitions/VkBool32"},
                "inheritedQueries": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDevice16BitStorageFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "storageBuffer16BitAccess": {"$ref": "#/definitions/VkBool32"},
                "uniformAndStorageBuffer16BitAccess": {"$ref": "#/definitions/VkBool32"},
                "storagePushConstant16": {"$ref": "#/definitions/VkBool32"},
                "storageInputOutput16": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDevice8BitStorageFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "storageBuffer8BitAccess": {"$ref": "#/definitions/VkBool32"},
                "uniformAndStorageBuffer8BitAccess": {"$ref": "#/definitions/VkBool32"},
                "storagePushConstant8": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceDescriptorIndexingFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "shaderInputAttachmentArrayDynamicIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderUniformTexelBufferArrayDynamicIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageTexelBufferArrayDynamicIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderUniformBufferArrayNonUniformIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderSampledImageArrayNonUniformIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageBufferArrayNonUniformIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageImageArrayNonUniformIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderInputAttachmentArrayNonUniformIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderUniformTexelBufferArrayNonUniformIndexing": {"$ref": "#/definitions/VkBool32"},
                "shaderStorageTexelBufferArrayNonUniformIndexing": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingUniformBufferUpdateAfterBind": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingSampledImageUpdateAfterBind": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingStorageImageUpdateAfterBind": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingStorageBufferUpdateAfterBind": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingUniformTexelBufferUpdateAfterBind": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingStorageTexelBufferUpdateAfterBind": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingUpdateUnusedWhilePending": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingPartiallyBound": {"$ref": "#/definitions/VkBool32"},
                "descriptorBindingVariableDescriptorCount": {"$ref": "#/definitions/VkBool32"},
                "runtimeDescriptorArray": {"$ref": "#/definitions/VkBool32"}

            }
        },
        "VkPhysicalDeviceHostQueryResetFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "hostQueryReset": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceImagelessFramebufferFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "imagelessFramebuffer": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceMultiviewFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "multiview": {"$ref": "#/definitions/VkBool32"},
                "multiviewGeometryShader": {"$ref": "#/definitions/VkBool32"},
                "multiviewTessellationShader": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceProtectedMemoryFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "protectedMemory": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceSamplerYcbcrConversionFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "samplerYcbcrConversion": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceScalarBlockLayoutFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "scalarBlockLayout": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "separateDepthStencilLayouts": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceShaderAtomicInt64Features": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "shaderBufferInt64Atomics": {"$ref": "#/definitions/VkBool32"},
                "shaderSharedInt64Atomics": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceShaderDrawParametersFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "shaderDrawParameters": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceShaderFloat16Int8Features": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "shaderFloat16": {"$ref": "#/definitions/VkBool32"},
                "shaderInt8": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "shaderSubgroupExtendedTypes": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceTimelineSemaphoreFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "timelineSemaphore": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceUniformBufferStandardLayoutFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "uniformBufferStandardLayout": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceVariablePointersFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "variablePointersStorageBuffer": {"$ref": "#/definitions/VkBool32"},
                "variablePointers": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkPhysicalDeviceVulkanMemoryModelFeatures": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "vulkanMemoryModel": {"$ref": "#/definitions/VkBool32"},
                "vulkanMemoryModelDeviceScope": {"$ref": "#/definitions/VkBool32"},
                "vulkanMemoryModelAvailabilityVisibilityChains": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "VkExtensionProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "extensionName": {"type": "string", "maxLength": 255},
                "specVersion": {"$ref": "#/definitions/uint32_t"}
            }
        },
        "VkLayerProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "layerName": {"type": "string", "maxLength": 255},
                "specVersion": {"$ref": "#/definitions/uint32_t"},
                "implementationVersion": {"$ref": "#/definitions/uint32_t"},
                "description": {"type": "string", "maxLength": 255}
            }
        },
        "VkMemoryType": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "propertyFlags": {"$ref": "#/definitions/VkMemoryPropertyFlags"},
                "heapIndex": {"$ref": "#/definitions/uint32_t"}
            }
        },
        "VkMemoryHeap": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "size": {"$ref": "#/definitions/VkDeviceSize"},
                "flags": {"$ref": "#/definitions/VkMemoryHeapFlags"}
            }
        },
        "VkPhysicalDeviceMemoryProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "memoryTypes": {"type": "array", "maxItems": 32, "items": {"$ref": "#/definitions/VkMemoryType"}},
                "memoryHeaps": {"type": "array", "maxItems": 16, "items": {"$ref": "#/definitions/VkMemoryHeap"}}
            }
        },
        "VkExtent3D": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "width": {"$ref": "#/definitions/uint32_t"},
                "height": {"$ref": "#/definitions/uint32_t"},
                "depth": {"$ref": "#/definitions/uint32_t"}
            }
        },
        "VkFormatProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "formatID": {"$ref": "#/definitions/VkFormat"},
                "linearTilingFeatures": {"$ref": "#/definitions/VkFormatFeatureFlags"},
                "optimalTilingFeatures": {"$ref": "#/definitions/VkFormatFeatureFlags"},
                "bufferFeatures": {"$ref": "#/definitions/VkFormatFeatureFlags"}
            }
        },
        "VkQueueFamilyProperties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "queueFlags": {"$ref": "#/definitions/VkQueueFlags"},
                "queueCount": {"$ref": "#/definitions/uint32_t"},
                "timestampValidBits": {"$ref": "#/definitions/uint32_t"},
                "minImageTransferGranularity": {"$ref": "#/definitions/VkExtent3D"}
            }
        },
        "Vulkan12Features": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "samplerMirrorClampToEdge": {"$ref": "#/definitions/VkBool32"},
                "shaderOutputViewportIndex": {"$ref": "#/definitions/VkBool32"},
                "shaderOutputLayer": {"$ref": "#/definitions/VkBool32"},
                "subgroupBroadcastDynamicId": {"$ref": "#/definitions/VkBool32"},
                "drawIndirectCount": {"$ref": "#/definitions/VkBool32"},
                "descriptorIndexing": {"$ref": "#/definitions/VkBool32"},
                "samplerFilterMinmax": {"$ref": "#/definitions/VkBool32"}
            }
        },
        "Vulkan12Properties": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "framebufferIntegerColorSampleCounts": {"$ref": "#/definitions/VkSampleCountFlags"}
            }
        }
    },

    "required": ["$schema"],
    "properties": {
        "$schema": {"$ref": "#/definitions/$schema"},
        "VkPhysicalDeviceProperties": {"$ref": "#/definitions/VkPhysicalDeviceProperties"},
        "VkPhysicalDeviceDepthStencilResolveProperties": {"$ref": "#/definitions/VkPhysicalDeviceDepthStencilResolveProperties"},
        "VkPhysicalDeviceDescriptorIndexingProperties": {"$ref": "#/definitions/VkPhysicalDeviceDescriptorIndexingProperties"},
        "VkPhysicalDeviceFloatControlsProperties": {"$ref": "#/definitions/VkPhysicalDeviceFloatControlsProperties"},
        "VkPhysicalDeviceMaintenance3Properties": {"$ref": "#/definitions/VkPhysicalDeviceMaintenance3Properties"},
        "VkPhysicalDeviceMultiviewProperties": {"$ref": "#/definitions/VkPhysicalDeviceMultiviewProperties"},
        "VkPhysicalDevicePointClippingProperties": {"$ref": "#/definitions/VkPhysicalDevicePointClippingProperties"},
        "VkPhysicalDeviceProtectedMemoryProperties": {"$ref": "#/definitions/VkPhysicalDeviceProtectedMemoryProperties"},
        "VkPhysicalDeviceSamplerFilterMinmaxProperties": {"$ref": "#/definitions/VkPhysicalDeviceSamplerFilterMinmaxProperties"},
        "VkPhysicalDeviceTimelineSemaphoreProperties": {"$ref": "#/definitions/VkPhysicalDeviceTimelineSemaphoreProperties"},
        "VkPhysicalDeviceFeatures": {"$ref": "#/definitions/VkPhysicalDeviceFeatures"},
        "VkPhysicalDevice16BitStorageFeatures": {"$ref": "#/definitions/VkPhysicalDevice16BitStorageFeatures"},
        "VkPhysicalDevice8BitStorageFeatures": {"$ref": "#/definitions/VkPhysicalDevice8BitStorageFeatures"},
        "VkPhysicalDeviceDescriptorIndexingFeatures": {"$ref": "#/definitions/VkPhysicalDeviceDescriptorIndexingFeatures"},
        "VkPhysicalDeviceHostQueryResetFeatures": {"$ref": "#/definitions/VkPhysicalDeviceHostQueryResetFeatures"},
        "VkPhysicalDeviceImagelessFramebufferFeatures": {"$ref": "#/definitions/VkPhysicalDeviceImagelessFramebufferFeatures"},
        "VkPhysicalDeviceMultiviewFeatures": {"$ref": "#/definitions/VkPhysicalDeviceMultiviewFeatures"},
        "VkPhysicalDeviceProtectedMemoryFeatures": {"$ref": "#/definitions/VkPhysicalDeviceProtectedMemoryFeatures"},
        "VkPhysicalDeviceSamplerYcbcrConversionFeatures": {"$ref": "#/definitions/VkPhysicalDeviceSamplerYcbcrConversionFeatures"},
        "VkPhysicalDeviceScalarBlockLayoutFeatures": {"$ref": "#/definitions/VkPhysicalDeviceScalarBlockLayoutFeatures"},
        "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures": {"$ref": "#/definitions/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures"},
        "VkPhysicalDeviceShaderAtomicInt64Features": {"$ref": "#/definitions/VkPhysicalDeviceShaderAtomicInt64Features"},
        "VkPhysicalDeviceShaderDrawParametersFeatures": {"$ref": "#/definitions/VkPhysicalDeviceShaderDrawParametersFeatures"},
        "VkPhysicalDeviceShaderFloat16Int8Features": {"$ref": "#/definitions/VkPhysicalDeviceShaderFloat16Int8Features"},
        "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures": {"$ref": "#/definitions/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures"},
        "VkPhysicalDeviceTimelineSemaphoreFeatures": {"$ref": "#/definitions/VkPhysicalDeviceTimelineSemaphoreFeatures"},
        "VkPhysicalDeviceUniformBufferStandardLayoutFeatures": {"$ref": "#/definitions/VkPhysicalDeviceUniformBufferStandardLayoutFeatures"},
        "VkPhysicalDeviceVariablePointersFeatures": {"$ref": "#/definitions/VkPhysicalDeviceVariablePointersFeatures"},
        "VkPhysicalDeviceVulkanMemoryModelFeatures": {"$ref": "#/definitions/VkPhysicalDeviceVulkanMemoryModelFeatures"},
        "VkPhysicalDeviceMemoryProperties": {"$ref": "#/definitions/VkPhysicalDeviceMemoryProperties"},
        "Vulkan12Features": {"$ref": "#/definitions/Vulkan12Features"},
        "Vulkan12Properties": {"$ref": "#/definitions/Vulkan12Properties"},
        "ArrayOfVkExtensionProperties": { "type": "array", "uniqueItems": true, "items": {"$ref": "#/definitions/VkExtensionProperties"} },
        "ArrayOfVkLayerProperties": { "type": "array", "uniqueItems": true, "items": {"$ref": "#/definitions/VkLayerProperties"} },
        "ArrayOfVkQueueFamilyProperties": { "type": "array", "uniqueItems": true, "items": {"$ref": "#/definitions/VkQueueFamilyProperties"} },
        "ArrayOfVkFormatProperties": { "type": "array", "uniqueItems": true, "items": {"$ref": "#/definitions/VkFormatProperties"} },
        "properties": {"type": "null"},
        "features": {"type": "null"},
        "memory": {"type": "null"},
        "queues": {"type": "null"},
        "extensions": {"type": "null"},
        "layers": {"type": "null"},
        "formats": {"type": "null"},
        "comments": {"type": "object"}
    }
}