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", + ... +``` +
Field Name | Field Value | +JSON 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" | @@ -731,6 +753,7 @@ Here is an example driver JSON Manifest file:object | |
"library_path" | @@ -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). +string | |
"library_arch" | @@ -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.string | |
"api_version" | @@ -763,12 +788,14 @@ Here is an example driver JSON Manifest file: queried by the user using the vkGetPhysicalDeviceProperties API call.string | |
"is_portability_driver" | Defines whether the driver contains any VkPhysicalDevices which
implement the VK_KHR_portability_subset extension. |
+ boolean |
JSON Node | Description and Notes | Restrictions | +JSON Type | Parent | Introspection Query | None | +string | "layer"/"layers" | vkEnumerateInstanceLayerProperties | @@ -1656,6 +1677,7 @@ Here's an example of a meta-layer manifest file:List of paths to executables that the meta-layer applies to. | Meta-layers Only | +array of strings | "layer"/"layers" | N/A | @@ -1665,6 +1687,7 @@ Here's an example of a meta-layer manifest file: requested by the application.Meta-layers Only | +array of strings | "layer"/"layers" | N/A | @@ -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.Meta-layers Only | +array of strings | "layer"/"layers" | N/A | @@ -1687,6 +1711,7 @@ Here's an example of a meta-layer manifest file:"description" | A high-level description of the layer and its intended use. | None | +string | "layer"/"layers" | vkEnumerateInstanceLayerProperties | @@ -1706,6 +1731,7 @@ Here's an example of a meta-layer manifest file: by the supported extension.None | +array | "layer"/"layers" | vkEnumerateDeviceExtensionProperties | @@ -1722,6 +1748,7 @@ Here's an example of a meta-layer manifest file: set, the implicit layer is disabled.Implicit Layers Only | +object | "layer"/"layers" | N/A | @@ -1738,6 +1765,7 @@ Here's an example of a meta-layer manifest file: implicit layer(s).Implicit Layers Only | +object | "layer"/"layers" | N/A | @@ -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.None | +string | None | N/A | @@ -1759,6 +1788,7 @@ Here's an example of a meta-layer manifest file: name for `vkNegotiateLoaderLayerInterfaceVersion`.None | +object | "layer"/"layers" | vkGet*ProcAddr | @@ -1769,6 +1799,7 @@ Here's an example of a meta-layer manifest file: the loader and/or application can identify it properly.None | +string | "layer"/"layers" | vkEnumerateInstanceLayerProperties | @@ -1784,6 +1815,7 @@ Here's an example of a meta-layer manifest file: "specVersion" respectively.None | +array | "layer"/"layers" | vkEnumerateInstanceExtensionProperties | @@ -1792,6 +1824,7 @@ Here's an example of a meta-layer manifest file:The identifier used to group a single layer's information together. | None | +object | None | vkEnumerateInstanceLayerProperties | @@ -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.None | +object | None | vkEnumerateInstanceLayerProperties | @@ -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.Not Valid For Meta-layers | +string | "layer"/"layers" | N/A | @@ -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.Not Valid For Meta-layers | +string | +"layer"/"layers" | N/A |
---|---|---|---|---|---|
"name" | The string used to uniquely identify this layer to applications. | None | +string | "layer"/"layers" | vkEnumerateInstanceLayerProperties | Meta-layers Only | +array of strings | "layer"/"layers" | N/A | @@ -1861,6 +1901,7 @@ Here's an example of a meta-layer manifest file: more information.Implicit Layers Only | +object | "layer"/"layers" | vkEnumerateInstance*Properties | @@ -1878,6 +1919,7 @@ Here's an example of a meta-layer manifest file: not found.None | +string | "layer"/"layers" | vkEnumerate*LayerProperties | @@ -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" + ] + } + } +}