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