From 5f56d6708bfd5d90d32ea301d7ca0f792efed9eb Mon Sep 17 00:00:00 2001 From: Charles Giessen Date: Tue, 8 Aug 2023 15:32:20 -0600 Subject: [PATCH] Add JSON Schemas for Driver and Layer Manifests The JSON Schema format allows for automatic validation of a given manifest file. This enhances the ability for layer and driver developers to check that their manifest files are correct, as well as clarifying the exact format that the loader expects manifest files to be in. These files will be available inside the repo for reference, but the primary location they will be made available from is: https://schema.khornos.org/vulkan/ Each version of the Driver and Layer Manifest formats have their own schema, allowing verification of whichever version the driver or layer intends to use. --- docs/LoaderDriverInterface.md | 29 ++- docs/LoaderLayerInterface.md | 48 +++- schemas/driver_manifest_1_0_0.json | 38 +++ schemas/driver_manifest_1_0_1.json | 45 ++++ schemas/layer_manifest_1_0_0.json | 215 ++++++++++++++++ schemas/layer_manifest_1_0_1.json | 256 +++++++++++++++++++ schemas/layer_manifest_1_1_0.json | 256 +++++++++++++++++++ schemas/layer_manifest_1_1_1.json | 317 ++++++++++++++++++++++++ schemas/layer_manifest_1_1_2.json | 330 +++++++++++++++++++++++++ schemas/layer_manifest_1_2_0.json | 377 ++++++++++++++++++++++++++++ schemas/layer_manifest_1_2_1.json | 383 +++++++++++++++++++++++++++++ 11 files changed, 2290 insertions(+), 4 deletions(-) create mode 100644 schemas/driver_manifest_1_0_0.json create mode 100644 schemas/driver_manifest_1_0_1.json create mode 100644 schemas/layer_manifest_1_0_0.json create mode 100644 schemas/layer_manifest_1_0_1.json create mode 100644 schemas/layer_manifest_1_1_0.json create mode 100644 schemas/layer_manifest_1_1_1.json create mode 100644 schemas/layer_manifest_1_1_2.json create mode 100644 schemas/layer_manifest_1_2_0.json create mode 100644 schemas/layer_manifest_1_2_1.json diff --git a/docs/LoaderDriverInterface.md b/docs/LoaderDriverInterface.md index fd865a324..74a159867 100644 --- a/docs/LoaderDriverInterface.md +++ b/docs/LoaderDriverInterface.md @@ -42,6 +42,7 @@ - [Using Pre-Production ICDs or Software Drivers](#using-pre-production-icds-or-software-drivers) - [Driver Discovery on Android](#driver-discovery-on-android) - [Driver Manifest File Format](#driver-manifest-file-format) + - [JSON Schema for Driver Manifest Files](#json-schema-for-driver-manifest-files) - [Driver Manifest File Versions](#driver-manifest-file-versions) - [Driver Manifest File Version 1.0.0](#driver-manifest-file-version-100) - [Driver Manifest File Version 1.0.1](#driver-manifest-file-version-101) @@ -715,15 +716,36 @@ Here is an example driver JSON Manifest file: } ``` +### JSON Schema for Driver Manifest Files + +The Driver Manifest file can be validated against the provided JSON Schema files. +This offers a quick way to check that the manifest file matches the format the +loader expects. + +While the schema files are located in the repo, it is best to reference the web +URL `https://schema.khronos.org/vulkan/driver_manifest_X_Y_Z.json` +where `X`, `Y`, and `Z` correspond to the file_format_version used by the manifest. + +For example, a manifest of version 1.0.1 should use the following: + +```json +{ + "$schema":"https://schema.khronos.org/vulkan/driver_manifest_1_0_1.json", + "file_format_version" : "1.0.1", + ... +``` + + + @@ -731,6 +753,7 @@ Here is an example driver JSON Manifest file:
NOTE: Even though this is labelled ICD it is historical and just as accurate to use for other drivers. + @@ -743,6 +766,7 @@ Here is an example driver JSON Manifest file: There are no rules about the name of the driver's shared library file other than it should end with the appropriate suffix (".DLL" on Windows, ".so" on Linux and ".dylib" on macOS). + @@ -751,6 +775,7 @@ Here is an example driver JSON Manifest file: Allows the loader to quickly determine if the architecture of the driver matches that of the running application.
The only valid values are "32" and "64". + @@ -763,12 +788,14 @@ Here is an example driver JSON Manifest file: queried by the user using the vkGetPhysicalDeviceProperties API call.
For example: 1.0.33. + +
Field Name Field ValueJSON Type
"file_format_version" The JSON format major.minor.patch version number of this file.
Supported versions are: 1.0.0 and 1.0.1.
string
"ICD" object
"library_path"string
"library_arch"string
"api_version" string
"is_portability_driver" Defines whether the driver contains any VkPhysicalDevices which implement the VK_KHR_portability_subset extension.
boolean
@@ -798,7 +825,7 @@ they contain VkPhysicalDevices which support the VK_KHR_portability_subset extension. This is an optional field. Omitting the field has the same effect as setting the field to `false`. -Added the "library\_arch" field to the driver manifest to allow the loader to +Added the `library_arch` field to the driver manifest to allow the loader to quickly determine if the driver matches the architecture of the current running application. This field is optional. diff --git a/docs/LoaderLayerInterface.md b/docs/LoaderLayerInterface.md index 986910ce2..dde70e6f6 100644 --- a/docs/LoaderLayerInterface.md +++ b/docs/LoaderLayerInterface.md @@ -53,8 +53,9 @@ - [Creating New Dispatchable Objects](#creating-new-dispatchable-objects) - [Versioning and Activation Interactions](#versioning-and-activation-interactions) - [Layer Manifest File Format](#layer-manifest-file-format) + - [JSON Schema for Layer Manifest Files](#json-schema-for-layer-manifest-files) - [Layer Manifest File Version History](#layer-manifest-file-version-history) - - [Layer Manifest File Version 1.2.1](#layer-manifest-file-version-121) + - [Layer Manifest File Version 1.2.1](#layer-manifest-file-version-121) - [Layer Manifest File Version 1.2.0](#layer-manifest-file-version-120) - [Layer Manifest File Version 1.1.2](#layer-manifest-file-version-112) - [Layer Manifest File Version 1.1.1](#layer-manifest-file-version-111) @@ -1629,12 +1630,31 @@ Here's an example of a meta-layer manifest file: } ``` +### JSON Schema for Layer Manifest Files + +The Layer Manifest file can be validated against the provided JSON Schema files. +This offers a quick way to check that the manifest file matches the format the +loader expects. + +While the schema files are located in the repo, it is best to reference the web +URL `https://schema.khronos.org/vulkan/layer_manifest_X_Y_Z.json` +where `X`, `Y`, and `Z` correspond to the file_format_version used by the manifest. + +For example, a manifest of version 1.2.1 should use the following: + +```json +{ + "$schema":"https://schema.khronos.org/vulkan/layer_manifest_1_2_1.json", + "file_format_version" : "1.2.1", + ... +``` + @@ -1648,6 +1668,7 @@ Here's an example of a meta-layer manifest file: For example: 1.0.33. + @@ -1656,6 +1677,7 @@ Here's an example of a meta-layer manifest file: + @@ -1665,6 +1687,7 @@ Here's an example of a meta-layer manifest file: requested by the application. + @@ -1680,6 +1703,7 @@ Here's an example of a meta-layer manifest file: This field must not be present if "library_path" is defined. + @@ -1687,6 +1711,7 @@ Here's an example of a meta-layer manifest file: + @@ -1706,6 +1731,7 @@ Here's an example of a meta-layer manifest file: by the supported extension. + @@ -1722,6 +1748,7 @@ Here's an example of a meta-layer manifest file: set, the implicit layer is disabled. + @@ -1738,6 +1765,7 @@ Here's an example of a meta-layer manifest file: implicit layer(s). + @@ -1747,6 +1775,7 @@ Here's an example of a meta-layer manifest file: Supported versions are: 1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.1.2 and 1.2.0. + @@ -1759,6 +1788,7 @@ Here's an example of a meta-layer manifest file: name for `vkNegotiateLoaderLayerInterfaceVersion`. + @@ -1769,6 +1799,7 @@ Here's an example of a meta-layer manifest file: the loader and/or application can identify it properly. + @@ -1784,6 +1815,7 @@ Here's an example of a meta-layer manifest file: "specVersion" respectively. + @@ -1792,6 +1824,7 @@ Here's an example of a meta-layer manifest file: + @@ -1801,6 +1834,7 @@ Here's an example of a meta-layer manifest file: This requires a minimum Manifest file format version of 1.0.1. + @@ -1820,6 +1854,7 @@ Here's an example of a meta-layer manifest file: This field must not be present if "component_layers" is defined. + @@ -1829,6 +1864,9 @@ Here's an example of a meta-layer manifest file: Allows the loader to quickly determine if the architecture of the layer matches that of the running application.
The only valid values are "32" and "64". + + + @@ -1836,6 +1874,7 @@ Here's an example of a meta-layer manifest file: + @@ -1845,6 +1884,7 @@ Here's an example of a meta-layer manifest file: layers. + @@ -1861,6 +1901,7 @@ Here's an example of a meta-layer manifest file: more information. + @@ -1878,6 +1919,7 @@ Here's an example of a meta-layer manifest file: not found. + @@ -1885,10 +1927,10 @@ Here's an example of a meta-layer manifest file: ### Layer Manifest File Version History -The current highest supported Layer Manifest file format supported is 1.2.0. +The current highest supported Layer Manifest file format supported is 1.2.1. Information about each version is detailed in the following sub-sections: -### Layer Manifest File Version 1.2.1 +#### Layer Manifest File Version 1.2.1 Added the "library\_arch" field to the layer manifest to allow the loader to quickly determine if the layer matches the architecture of the current running diff --git a/schemas/driver_manifest_1_0_0.json b/schemas/driver_manifest_1_0_0.json new file mode 100644 index 000000000..64f26d050 --- /dev/null +++ b/schemas/driver_manifest_1_0_0.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/driver_manifest_1_0_0.json", + "title": "Vulkan Driver Manifest Version 1.0.0", + "description": "JSON Schema for Driver Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "properties": { + "file_format_version": { + "type": "string", + "pattern": "^1.0.0$" + }, + "ICD": { + "type": "object", + "properties": { + "library_path": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "library_arch": false, + "is_portability_driver": false + }, + "required": [ + "library_path", + "api_version" + ] + } + }, + "required": [ + "file_format_version", + "ICD" + ] +} diff --git a/schemas/driver_manifest_1_0_1.json b/schemas/driver_manifest_1_0_1.json new file mode 100644 index 000000000..2b0e441b5 --- /dev/null +++ b/schemas/driver_manifest_1_0_1.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/driver_manifest_1_0_1.json", + "title": "Vulkan Driver Manifest Version 1.0.1", + "description": "JSON Schema for Driver Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "properties": { + "file_format_version": { + "type": "string", + "pattern": "^1.0.1$" + }, + "ICD": { + "type": "object", + "properties": { + "library_path": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "library_arch": { + "enum": [ + "32", + "64" + ] + }, + "is_portability_driver": { + "type": "boolean" + } + }, + "required": [ + "library_path", + "api_version" + ] + } + }, + "required": [ + "file_format_version", + "ICD" + ] +} diff --git a/schemas/layer_manifest_1_0_0.json b/schemas/layer_manifest_1_0_0.json new file mode 100644 index 000000000..356d37b4e --- /dev/null +++ b/schemas/layer_manifest_1_0_0.json @@ -0,0 +1,215 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/layer_manifest_1_0_0.json", + "title": "Vulkan Layer Manifest Version 1.0.0", + "description": "JSON Schema for Layer Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layer": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + } + ] + }, + "layers": false + }, + "$defs": { + "file_version": { + "type": "string", + "pattern": "^1.0.0$" + }, + "regular_string": { + "type": "string" + }, + "vulkan_string": { + "type": "string", + "maxLength": 256, + "description": "Vulkan API strings may not exceed 256 characters in length" + }, + "supported_path_types": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "vulkan_api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "extension_array": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "spec_version": { + "type": "string" + }, + "entrypoints": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "spec_version" + ], + "additionalProperties": false + } + }, + "layer_type": { + "enum": [ + "INSTANCE", + "GLOBAL" + ] + }, + "architecture": { + "enum": [ + "32", + "64" + ] + }, + "environment_variable": { + "type": "object", + "patternProperties": { + "": { + "type": "string" + } + }, + "maxProperties": 1, + "additionalProperties": false + }, + "function_definitions": { + "type": "object", + "patternProperties": { + "": { + "type": "string" + } + } + }, + "vulkan_string_array": { + "type": "array", + "items": { + "$ref": "#/$defs/vulkan_string" + } + }, + "string_array": { + "type": "array", + "items": { + "type": "string" + } + }, + "explicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": false, + "disable_environment": false, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "library_path", + "implementation_version", + "description" + ] + }, + "implicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "library_path", + "api_version", + "implementation_version", + "description", + "disable_environment" + ] + } + } +} diff --git a/schemas/layer_manifest_1_0_1.json b/schemas/layer_manifest_1_0_1.json new file mode 100644 index 000000000..871cb3089 --- /dev/null +++ b/schemas/layer_manifest_1_0_1.json @@ -0,0 +1,256 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/layer_manifest_1_0_1.json", + "title": "Vulkan Layer Manifest Version 1.0.1", + "description": "JSON Schema for Layer Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "oneOf": [ + { + "$ref": "#/$defs/single_layer" + }, + { + "$ref": "#/$defs/layer_array" + } + ], + "$defs": { + "file_version": { + "type": "string", + "pattern": "^1.0.1$" + }, + "regular_string": { + "type": "string" + }, + "vulkan_string": { + "type": "string", + "maxLength": 256, + "description": "Vulkan API strings may not exceed 256 characters in length" + }, + "supported_path_types": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "vulkan_api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "extension_array": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "spec_version": { + "type": "string" + }, + "entrypoints": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "spec_version" + ], + "additionalProperties": false + } + }, + "layer_type": { + "enum": [ + "INSTANCE", + "GLOBAL" + ] + }, + "architecture": { + "enum": [ + "32", + "64" + ] + }, + "environment_variable": { + "type": "object", + "patternProperties": { + "": { + "type": "string" + } + }, + "maxProperties": 1, + "additionalProperties": false + }, + "function_definitions": { + "type": "object", + "patternProperties": { + "^$": { + "type": "string" + } + } + }, + "vulkan_string_array": { + "type": "array", + "items": { + "$ref": "#/$defs/vulkan_string" + } + }, + "string_array": { + "type": "array", + "items": { + "type": "string" + } + }, + "explicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": false, + "disable_environment": false, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "library_path", + "implementation_version", + "description" + ] + }, + "implicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "library_path", + "api_version", + "implementation_version", + "description", + "disable_environment" + ] + }, + "single_layer": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layer": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + } + ] + }, + "layers": false + }, + "required": [ + "file_format_version", + "layer" + ] + }, + "layer_array": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layers": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + } + ] + } + }, + "layer": false + }, + "required": [ + "file_format_version", + "layers" + ] + } + } +} diff --git a/schemas/layer_manifest_1_1_0.json b/schemas/layer_manifest_1_1_0.json new file mode 100644 index 000000000..e238b1830 --- /dev/null +++ b/schemas/layer_manifest_1_1_0.json @@ -0,0 +1,256 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/layer_manifest_1_1_0.json", + "title": "Vulkan Layer Manifest Version 1.1.0", + "description": "JSON Schema for Layer Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "oneOf": [ + { + "$ref": "#/$defs/single_layer" + }, + { + "$ref": "#/$defs/layer_array" + } + ], + "$defs": { + "file_version": { + "type": "string", + "pattern": "^1.1.0$" + }, + "regular_string": { + "type": "string" + }, + "vulkan_string": { + "type": "string", + "maxLength": 256, + "description": "Vulkan API strings may not exceed 256 characters in length" + }, + "supported_path_types": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "vulkan_api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "extension_array": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "spec_version": { + "type": "string" + }, + "entrypoints": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "spec_version" + ], + "additionalProperties": false + } + }, + "layer_type": { + "enum": [ + "INSTANCE", + "GLOBAL" + ] + }, + "architecture": { + "enum": [ + "32", + "64" + ] + }, + "environment_variable": { + "type": "object", + "patternProperties": { + "": { + "type": "string" + } + }, + "maxProperties": 1, + "additionalProperties": false + }, + "function_definitions": { + "type": "object", + "patternProperties": { + "^$": { + "type": "string" + } + } + }, + "vulkan_string_array": { + "type": "array", + "items": { + "$ref": "#/$defs/vulkan_string" + } + }, + "string_array": { + "type": "array", + "items": { + "type": "string" + } + }, + "explicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": false, + "disable_environment": false, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "library_path", + "implementation_version", + "description" + ] + }, + "implicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "library_path", + "api_version", + "implementation_version", + "description", + "disable_environment" + ] + }, + "single_layer": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layer": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + } + ] + }, + "layers": false + }, + "required": [ + "file_format_version", + "layer" + ] + }, + "layer_array": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layers": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + } + ] + } + }, + "layer": false + }, + "required": [ + "file_format_version", + "layers" + ] + } + } +} diff --git a/schemas/layer_manifest_1_1_1.json b/schemas/layer_manifest_1_1_1.json new file mode 100644 index 000000000..9f7896dca --- /dev/null +++ b/schemas/layer_manifest_1_1_1.json @@ -0,0 +1,317 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/layer_manifest_1_1_1.json", + "title": "Vulkan Layer Manifest Version 1.1.1", + "description": "JSON Schema for Layer Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "oneOf": [ + { + "$ref": "#/$defs/single_layer" + }, + { + "$ref": "#/$defs/layer_array" + } + ], + "$defs": { + "file_version": { + "type": "string", + "pattern": "^1.1.1$" + }, + "regular_string": { + "type": "string" + }, + "vulkan_string": { + "type": "string", + "maxLength": 256, + "description": "Vulkan API strings may not exceed 256 characters in length" + }, + "supported_path_types": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "vulkan_api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "extension_array": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "spec_version": { + "type": "string" + }, + "entrypoints": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "spec_version" + ], + "additionalProperties": false + } + }, + "layer_type": { + "enum": [ + "INSTANCE", + "GLOBAL" + ] + }, + "architecture": { + "enum": [ + "32", + "64" + ] + }, + "environment_variable": { + "type": "object", + "patternProperties": { + "": { + "type": "string" + } + }, + "maxProperties": 1, + "additionalProperties": false + }, + "function_definitions": { + "type": "object", + "patternProperties": { + "^$": { + "type": "string" + } + } + }, + "vulkan_string_array": { + "type": "array", + "items": { + "$ref": "#/$defs/vulkan_string" + } + }, + "string_array": { + "type": "array", + "items": { + "type": "string" + } + }, + "explicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": false, + "disable_environment": false, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "library_path", + "implementation_version", + "description" + ] + }, + "implicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "library_path", + "api_version", + "implementation_version", + "description", + "disable_environment" + ] + }, + "meta_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "component_layers": { + "$ref": "#/$defs/vulkan_string_array" + }, + "blacklisted_layers": { + "$ref": "#/$defs/vulkan_string_array" + }, + "app_keys": { + "$ref": "#/$defs/string_array" + }, + "override_paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "library_path": false, + "pre_instance_functions": false, + "functions": false, + "instance_extensions": false, + "device_extensions": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "implementation_version", + "description", + "component_layers" + ] + }, + "single_layer": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layer": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + }, + { + "$ref": "#/$defs/meta_layer" + } + ] + }, + "layers": false + }, + "required": [ + "file_format_version", + "layer" + ] + }, + "layer_array": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layers": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + }, + { + "$ref": "#/$defs/meta_layer" + } + ] + } + }, + "layer": false + }, + "required": [ + "file_format_version", + "layers" + ] + } + } +} diff --git a/schemas/layer_manifest_1_1_2.json b/schemas/layer_manifest_1_1_2.json new file mode 100644 index 000000000..4b1ea0889 --- /dev/null +++ b/schemas/layer_manifest_1_1_2.json @@ -0,0 +1,330 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/layer_manifest_1_1_2.json", + "title": "Vulkan Layer Manifest Version 1.1.2", + "description": "JSON Schema for Layer Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "oneOf": [ + { + "$ref": "#/$defs/single_layer" + }, + { + "$ref": "#/$defs/layer_array" + } + ], + "$defs": { + "file_version": { + "type": "string", + "pattern": "^1.1.2$" + }, + "regular_string": { + "type": "string" + }, + "vulkan_string": { + "type": "string", + "maxLength": 256, + "description": "Vulkan API strings may not exceed 256 characters in length" + }, + "supported_path_types": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "vulkan_api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "extension_array": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "spec_version": { + "type": "string" + }, + "entrypoints": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "spec_version" + ], + "additionalProperties": false + } + }, + "layer_type": { + "enum": [ + "INSTANCE", + "GLOBAL" + ] + }, + "architecture": { + "enum": [ + "32", + "64" + ] + }, + "environment_variable": { + "type": "object", + "patternProperties": { + "": { + "type": "string" + } + }, + "maxProperties": 1, + "additionalProperties": false + }, + "function_definitions": { + "type": "object", + "patternProperties": { + "^$": { + "type": "string" + } + } + }, + "vulkan_string_array": { + "type": "array", + "items": { + "$ref": "#/$defs/vulkan_string" + } + }, + "string_array": { + "type": "array", + "items": { + "type": "string" + } + }, + "explicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": false, + "disable_environment": false, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "library_path", + "implementation_version", + "description" + ] + }, + "implicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "pre_instance_functions": { + "type": "object", + "properties": { + "vkEnumerateInstanceExtensionProperties": { + "type": "string" + }, + "vkEnumerateInstanceLayerProperties": { + "type": "string" + }, + "vkEnumerateInstanceVersion": { + "type": "string" + } + } + }, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "library_path", + "api_version", + "implementation_version", + "description", + "disable_environment" + ] + }, + "meta_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "component_layers": { + "$ref": "#/$defs/vulkan_string_array" + }, + "blacklisted_layers": { + "$ref": "#/$defs/vulkan_string_array" + }, + "app_keys": { + "$ref": "#/$defs/string_array" + }, + "override_paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "library_path": false, + "pre_instance_functions": false, + "functions": false, + "instance_extensions": false, + "device_extensions": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "implementation_version", + "description", + "component_layers" + ] + }, + "single_layer": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layer": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + }, + { + "$ref": "#/$defs/meta_layer" + } + ] + }, + "layers": false + }, + "required": [ + "file_format_version", + "layer" + ] + }, + "layer_array": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layers": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + }, + { + "$ref": "#/$defs/meta_layer" + } + ] + } + }, + "layer": false + }, + "required": [ + "file_format_version", + "layers" + ] + } + } +} diff --git a/schemas/layer_manifest_1_2_0.json b/schemas/layer_manifest_1_2_0.json new file mode 100644 index 000000000..b177b1bc0 --- /dev/null +++ b/schemas/layer_manifest_1_2_0.json @@ -0,0 +1,377 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/layer_manifest_1_2_0.json", + "title": "Vulkan Layer Manifest Version 1.2.0", + "description": "JSON Schema for Layer Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "oneOf": [ + { + "$ref": "#/$defs/single_layer" + }, + { + "$ref": "#/$defs/layer_array" + } + ], + "$defs": { + "file_version": { + "type": "string", + "pattern": "^1.2.0$" + }, + "regular_string": { + "type": "string" + }, + "vulkan_string": { + "type": "string", + "maxLength": 256, + "description": "Vulkan API strings may not exceed 256 characters in length" + }, + "supported_path_types": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "vulkan_api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "extension_array": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "spec_version": { + "type": "string" + }, + "entrypoints": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "spec_version" + ], + "additionalProperties": false + } + }, + "layer_type": { + "enum": [ + "INSTANCE", + "GLOBAL" + ] + }, + "architecture": { + "enum": [ + "32", + "64" + ] + }, + "environment_variable": { + "type": "object", + "patternProperties": { + "": { + "type": "string" + } + }, + "maxProperties": 1, + "additionalProperties": false + }, + "function_definitions": { + "type": "object", + "patternProperties": { + "^$": { + "type": "string" + } + } + }, + "vulkan_string_array": { + "type": "array", + "items": { + "$ref": "#/$defs/vulkan_string" + } + }, + "string_array": { + "type": "array", + "items": { + "type": "string" + } + }, + "development_status": { + "enum": [ + "ALPHA", + "BETA", + "STABLE", + "DEPRECATED" + ] + }, + "explicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "introduction": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "platforms": { + "$ref": "#/$defs/string_array" + }, + "status": { + "$ref": "#/$defs/development_status" + }, + "enable_environment": false, + "disable_environment": false, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "library_path", + "implementation_version", + "description" + ] + }, + "implicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "pre_instance_functions": { + "type": "object", + "properties": { + "vkEnumerateInstanceExtensionProperties": { + "type": "string" + }, + "vkEnumerateInstanceLayerProperties": { + "type": "string" + }, + "vkEnumerateInstanceVersion": { + "type": "string" + } + } + }, + "introduction": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "platforms": { + "$ref": "#/$defs/string_array" + }, + "status": { + "$ref": "#/$defs/development_status" + }, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "library_path", + "api_version", + "implementation_version", + "description", + "disable_environment" + ] + }, + "meta_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "component_layers": { + "$ref": "#/$defs/vulkan_string_array" + }, + "blacklisted_layers": { + "$ref": "#/$defs/vulkan_string_array" + }, + "app_keys": { + "$ref": "#/$defs/string_array" + }, + "override_paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "introduction": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "platforms": { + "$ref": "#/$defs/string_array" + }, + "status": { + "$ref": "#/$defs/development_status" + }, + "library_path": false, + "pre_instance_functions": false, + "functions": false, + "instance_extensions": false, + "device_extensions": false, + "library_arch": false + }, + "required": [ + "name", + "type", + "api_version", + "implementation_version", + "description", + "component_layers" + ] + }, + "single_layer": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layer": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + }, + { + "$ref": "#/$defs/meta_layer" + } + ] + }, + "layers": false + }, + "required": [ + "file_format_version", + "layer" + ] + }, + "layer_array": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layers": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + }, + { + "$ref": "#/$defs/meta_layer" + } + ] + } + }, + "layer": false + }, + "required": [ + "file_format_version", + "layers" + ] + } + } +} diff --git a/schemas/layer_manifest_1_2_1.json b/schemas/layer_manifest_1_2_1.json new file mode 100644 index 000000000..5789df30b --- /dev/null +++ b/schemas/layer_manifest_1_2_1.json @@ -0,0 +1,383 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "id": "https://schema.khronos.org/vulkan/layer_manifest_1_2_1.json", + "title": "Vulkan Layer Manifest Version 1.2.1", + "description": "JSON Schema for Layer Manifest files for the Vulkan Loader", + "type": "object", + "additionalProperties": true, + "oneOf": [ + { + "$ref": "#/$defs/single_layer" + }, + { + "$ref": "#/$defs/layer_array" + } + ], + "$defs": { + "file_version": { + "type": "string", + "pattern": "^1.2.1$" + }, + "regular_string": { + "type": "string" + }, + "vulkan_string": { + "type": "string", + "maxLength": 256, + "description": "Vulkan API strings may not exceed 256 characters in length" + }, + "supported_path_types": { + "type": "string", + "description": "Path validation is not feasible to validate with regex since valid paths are different per platform" + }, + "vulkan_api_version": { + "type": "string", + "pattern": "^[0-9]*\\.[0-9]*\\.[0-9]*$|^[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*$", + "description": "Matches 3 and 4 component versions" + }, + "extension_array": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "spec_version": { + "type": "string" + }, + "entrypoints": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "spec_version" + ], + "additionalProperties": false + } + }, + "layer_type": { + "enum": [ + "INSTANCE", + "GLOBAL" + ] + }, + "architecture": { + "enum": [ + "32", + "64" + ] + }, + "environment_variable": { + "type": "object", + "patternProperties": { + "": { + "type": "string" + } + }, + "maxProperties": 1, + "additionalProperties": false + }, + "function_definitions": { + "type": "object", + "patternProperties": { + "^$": { + "type": "string" + } + } + }, + "vulkan_string_array": { + "type": "array", + "items": { + "$ref": "#/$defs/vulkan_string" + } + }, + "string_array": { + "type": "array", + "items": { + "type": "string" + } + }, + "development_status": { + "enum": [ + "ALPHA", + "BETA", + "STABLE", + "DEPRECATED" + ] + }, + "explicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "library_arch": { + "$ref": "#/$defs/architecture" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "introduction": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "platforms": { + "$ref": "#/$defs/string_array" + }, + "status": { + "$ref": "#/$defs/development_status" + }, + "enable_environment": false, + "disable_environment": false, + "pre_instance_functions": false, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false + }, + "required": [ + "name", + "type", + "api_version", + "library_path", + "implementation_version", + "description" + ] + }, + "implicit_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_path": { + "$ref": "#/$defs/supported_path_types" + }, + "library_arch": { + "$ref": "#/$defs/architecture" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "functions": { + "$ref": "#/$defs/function_definitions" + }, + "instance_extensions": { + "$ref": "#/$defs/extension_array" + }, + "device_extensions": { + "$ref": "#/$defs/extension_array" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "pre_instance_functions": { + "type": "object", + "properties": { + "vkEnumerateInstanceExtensionProperties": { + "type": "string" + }, + "vkEnumerateInstanceLayerProperties": { + "type": "string" + }, + "vkEnumerateInstanceVersion": { + "type": "string" + } + } + }, + "introduction": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "platforms": { + "$ref": "#/$defs/string_array" + }, + "status": { + "$ref": "#/$defs/development_status" + }, + "component_layers": false, + "blacklisted_layers": false, + "app_keys": false, + "override_paths": false + }, + "required": [ + "name", + "type", + "library_path", + "api_version", + "implementation_version", + "description", + "disable_environment" + ] + }, + "meta_layer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/$defs/vulkan_string" + }, + "type": { + "$ref": "#/$defs/layer_type" + }, + "library_arch": { + "$ref": "#/$defs/architecture" + }, + "api_version": { + "$ref": "#/$defs/vulkan_api_version" + }, + "implementation_version": { + "type": "string" + }, + "description": { + "$ref": "#/$defs/vulkan_string" + }, + "enable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "disable_environment": { + "$ref": "#/$defs/environment_variable" + }, + "component_layers": { + "$ref": "#/$defs/vulkan_string_array" + }, + "blacklisted_layers": { + "$ref": "#/$defs/vulkan_string_array" + }, + "app_keys": { + "$ref": "#/$defs/string_array" + }, + "override_paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "introduction": { + "type": "string" + }, + "url": { + "type": "string", + "format": "uri" + }, + "platforms": { + "$ref": "#/$defs/string_array" + }, + "status": { + "$ref": "#/$defs/development_status" + }, + "library_path": false, + "pre_instance_functions": false, + "functions": false, + "instance_extensions": false, + "device_extensions": false + }, + "required": [ + "name", + "type", + "api_version", + "implementation_version", + "description", + "component_layers" + ] + }, + "single_layer": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layer": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + }, + { + "$ref": "#/$defs/meta_layer" + } + ] + }, + "layers": false + }, + "required": [ + "file_format_version", + "layer" + ] + }, + "layer_array": { + "type": "object", + "properties": { + "file_format_version": { + "$ref": "#/$defs/file_version" + }, + "layers": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/$defs/explicit_layer" + }, + { + "$ref": "#/$defs/implicit_layer" + }, + { + "$ref": "#/$defs/meta_layer" + } + ] + } + }, + "layer": false + }, + "required": [ + "file_format_version", + "layers" + ] + } + } +}
JSON Node Description and Notes RestrictionsJSON Type Parent Introspection Query
Nonestring "layer"/"layers" vkEnumerateInstanceLayerProperties
List of paths to executables that the meta-layer applies to. Meta-layers Onlyarray of strings "layer"/"layers" N/A
Meta-layers Onlyarray of strings "layer"/"layers" N/A
Meta-layers Onlyarray of strings "layer"/"layers" N/A
"description" A high-level description of the layer and its intended use. Nonestring "layer"/"layers" vkEnumerateInstanceLayerProperties
Nonearray "layer"/"layers" vkEnumerateDeviceExtensionProperties
Implicit Layers Onlyobject "layer"/"layers" N/A
Implicit Layers Onlyobject "layer"/"layers" N/A
Nonestring None N/A
Noneobject "layer"/"layers" vkGet*ProcAddr
Nonestring "layer"/"layers" vkEnumerateInstanceLayerProperties
Nonearray "layer"/"layers" vkEnumerateInstanceExtensionProperties
The identifier used to group a single layer's information together. Noneobject None vkEnumerateInstanceLayerProperties
Noneobject None vkEnumerateInstanceLayerProperties
Not Valid For Meta-layersstring "layer"/"layers" N/A
Not Valid For Meta-layersstring"layer"/"layers" N/A
"name" The string used to uniquely identify this layer to applications. Nonestring "layer"/"layers" vkEnumerateInstanceLayerProperties
Meta-layers Onlyarray of strings "layer"/"layers" N/A
Implicit Layers Onlyobject "layer"/"layers" vkEnumerateInstance*Properties
Nonestring "layer"/"layers" vkEnumerate*LayerProperties