diff options
Diffstat (limited to 'codegen/vulkan/xml/registry.rnc')
-rw-r--r-- | codegen/vulkan/xml/registry.rnc | 610 |
1 files changed, 0 insertions, 610 deletions
diff --git a/codegen/vulkan/xml/registry.rnc b/codegen/vulkan/xml/registry.rnc deleted file mode 100644 index ad645c04..00000000 --- a/codegen/vulkan/xml/registry.rnc +++ /dev/null @@ -1,610 +0,0 @@ -# Copyright 2013-2021 The Khronos Group Inc. -# -# SPDX-License-Identifier: Apache-2.0 - -# Relax NG schema for Khronos Vulkan API Registry XML -# -# See https://www.khronos.org/vulkan/ -# -# This definition is subject to change (mostly in the form of additions) - -namespace xsd = "http://www.w3.org/2001/XMLSchema-datatypes" - -# Toplevel is a <registry> tag. -# May be led by an optional <comment> tag containing e.g. copyrights. -start = element registry { - ( - element comment { text } ? | - Platforms * | - Tags * | - Types * | - Enums * | - Commands * | - Feature * | - Extensions * | - SpirvExtensions * | - SpirvCapabilities * - ) * -} - -# <platforms> defines a group of platform names -Platforms = element platforms { - Comment ? , - Platform * -} - -# <platform> defines a single platform name. -# name - string name of the platform, used as part of extension names -# protect - preprocessor symbol to include platform headers from <vulkan.h> -# comment - platform description -Platform = element platform { - attribute name { text } , - attribute protect { text } , - Comment -} - -# <tags> defines a group of author tags -Tags = element tags { - Comment ? , - Tag * -} - -# <tag> defines a single author tag. -# name - name of the tag -# author - name of the author (usually a company or project name) -# contact - contact responsible for the tag (name and contact information) -Tag = element tag { - attribute name { text } , - attribute author { text } , - attribute contact { text } -} - -# <types> defines a group of types -Types = element types { - Comment ? , - ( - Type | - element comment { text } - ) * -} - -# <type> defines a single type. It is usually a C typedef but -# may contain arbitrary C code. -# name - name of this type, if not present in the <name> tag -# api - matches a <feature> api attribute, if present -# alias - name of a type this type aliases -# requires - name of another type definition required by this one -# bitvalues - for a *Flags type, name of an enum definition that -# defines the valid values for parameters of that type -# name - name of the type being defined -# category - if present, 'enum' indicates a matching <enums> -# block to generate an enumerated type for, and 'struct' -# causes special interpretation of the contents of the type -# tag including ... TBD ... -# Other allowed values are 'include', 'define', 'handle' and 'bitmask', -# which don't change syntactic interpretation but allow organization in -# the generated header. -# parent - only applicable if category is 'handle'. Notes another type with -# the 'handle' category that acts as a parent object for this type. -# returnedonly - only applicable if category is 'struct'. Notes that this -# struct is going to be filled in by the API, rather than an application -# filling it out and passing it to the API. -# structextends - only applicable if category is 'struct'. Lists parent -# structures which this structure may extend via the pNext chain -# of the parent. -# When present it suppresses generation of automatic validity for the -# pNext member of that structure, and instead the structure is added -# to pNext chain validity for the parent structures it extends. -# allowduplicate - only applicable if category is 'struct'. pNext can include -# multiple structures of this type. -# objtypeenum - name of VK_OBJECT_TYPE_* API enumerant which corresponds -# to this type. Currently only specified for category="handle" types. -# comment - descriptive text with no semantic meaning -# For types without a category, contents include -# <apientry /> - substitutes for an APIENTRY-style macro on output -# <name> - contains name of the type being defined -# <type> - contains name of types used to define this type. There -# may be multiple imbedded <type> tags -# For types with category 'enum', contents should be empty -# For types with category 'struct', contents should be one or more -# <member> - like <param> for a struct or union member -# len - if the member is an array, len may be one or more of the following -# things, separated by commas (one for each array indirection): another -# member of that struct, 'null-terminated' for a string, '1' to indicate it's -# just a pointer (used for nested pointers), or a latex equation (prefixed with -# 'latexmath:') -# altlen - if len has latexmath equations, this contains equivalent C99 -# expressions separated by commas. -# externsync - denotes that the member should be externally synchronized -# when accessed by Vulkan -# optional - whether this value can be omitted by providing NULL (for -# pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values) -# selector - for a union member, identifies a separate enum member that -# selects which of the union's members are valid -# selection - for a member of a union, identifies an enum value indicating the member is valid -# noautovalidity - tag stating that no automatic validity language should be generated -# values - comma-separated list of legal values, usually used only for sType enums -# limittype - only applicable for members of VkPhysicalDeviceProperties and -# VkPhysicalDeviceProperties2, their substrucutres, and extensions. -# Specifies the type of a device limit. -# Valid values: 'min', 'max', 'bitmask', 'range', 'struct', 'noauto' -# objecttype - only applicable for members representing a handle as -# a uint64_t value. Specifies the name of another member which is -# a VkObjectType or VkDebugReportObjectTypeEXT value specifying -# the type of object the handle references. -# <comment> - containing arbitrary text (unused) -# -# *** There's a problem here: I'm not sure how to represent the <type> -# syntax where it may contain arbitrarily interleaved text, <type>, and -# <enum> child tags. This allows only the syntax -# text <type>name</type> text <enum>name</enum> text -# where <type> and <enum> are both optional and occur in the specified -# order, which might eventually be a problem. -Type = element type { - attribute api { text } ? , - attribute alias { text } ? , - attribute requires { text } ? , - attribute bitvalues { text } ? , - attribute name { TypeName } ? , - attribute category { text } ? , - attribute parent { TypeName } ? , - attribute returnedonly { text } ? , - attribute structextends { text } ? , - attribute allowduplicate { text } ? , - attribute objtypeenum { text } ? , - Comment ? , - ( - ( - ( text , - element type { text } * - ) * , - element apientry { text } ? , - ( text , - element type { text } * - ) * , - element name { TypeName } ? , - ( text , - element type { text } * - ) * - ) | - ( - element member { - attribute len { text } ? , - attribute altlen { text } ? , - attribute externsync { text } ? , - attribute optional { text } ? , - attribute selector { text } ? , - attribute selection { EnumName } ? , - attribute noautovalidity { text } ? , - attribute values { text } ? , - attribute limittype { text } ? , - attribute objecttype { text } ? , - mixed { - element type { TypeName } ? , - element name { text } ? , - element enum { EnumName } ? , - element comment { text } ? - } - } | - element comment { text } - ) * - ) -} - -# <enums> defines a group of enumerants -# name - identifies a type name associated with this group. Should -# match a <type> name to trigger generation of the type. -# start, end - beginning and end of a numeric range -# vendor - owner of the numeric range -# type - 'enum' or 'bitmask', if present -# bitwidth - bit width of the enum value type. -# comment - descriptive text with no semantic meaning -Enums = element enums { - attribute name { text } ? , - attribute type { text } ? , - attribute start { Integer } ? , - attribute end { Integer } ? , - attribute bitwidth { Integer } ? , - Vendor ? , - Comment ? , - ( - Enum | - Unused | - element comment { text} - ) * -} - -# <enum> defines or references a single enumerant. There are two places it -# can be used: in an <enums> block, providing a global definition which -# may later be required by a feature or extension; or in a feature or -# extension, defining an enumerant specific to that feature. The second -# form has more possible attributes. Some combinations of attributes are -# nonsensical in on or the other place, but these are not detected by the -# validator. -# -# Ways to specify the enumerant value: -# value - integer (including hex) value of the enumerant -# bitpos - integer bit position of the enumerant in a bitmask -# [extnumber], offset, [dir] - integer extension number specifying a -# base block value (inherited from surrounding <extension> if -# not specified); integer offset in that block; and direction -# of offset ('-' for negative, positive if not specified). -# alias - name of another enum this is an alias of -# -# value and bitpos allow, and extnumber/offset/dir require: -# extends - type name of the enumerant being extended -# -# Other attributes: -# api - matches a <feature> api attribute, if present -# type - 'uint32_t', 'uint64_t', or 'float', if present. There are -# certain conditions under which the tag must be present, or absent, -# but they are context-dependent and difficult to express in the -# RNC syntax. -# name - enumerant name -# alias - another enumerant this is semantically identical to -# protect - additional #ifdef symbol to place around the enum -# comment - descriptive text with no semantic meaning -Enum = element enum { - ( - ( - ( - attribute value { Integer } & - attribute extends { TypeName } ? - ) | - ( - attribute bitpos { Integer } & - attribute extends { TypeName } ? - ) | - ( - attribute extnumber { Integer } ? & - attribute offset { Integer } & - attribute dir { text } ? & - attribute extends { TypeName } - ) | - ( - attribute extends { TypeName } ? & - attribute alias { TypeName } - ) - ) ? & - attribute protect { text } ? & - attribute api { text } ? & - attribute type { TypeSuffix } ? & - attribute name { text } & - Comment ? - ) -} - -# <unused> defines a range of enumerants not currently being used -# start, end - beginning and end of an unused numeric range -# vendor - unused -# comment - descriptive text with no semantic meaning -Unused = element unused { - attribute start { Integer } , - attribute end { Integer } ? , - Vendor ? , - Comment ? -} - -# <commands> defines a group of commands -Commands = element commands { - Comment ? , - Command * -} - -# <command> defines a single command -# -# There are two forms of the tag. -# -# The first only has 'name' and 'alias' attributes, and no contents. -# It defines a command alias. -# -# The second fully defines a command, and has the following structure: -# The possible attributes are not described in this comment block yet, but -# are in readme.pdf. The "prefix" and "suffix" attributes are currently -# present only in the OpenCL XML registry, where they are currently unused. -# -# <proto> is the C function prototype, including the return type -# <param> are function parameters, in order -# len - if the member is an array, len may be one or more of the following -# things, separated by commas (one for each array indirection): another -# member of that struct, 'null-terminated' for a string, '1' to indicate it's -# just a pointer (used for nested pointers), or a latex equation (prefixed with -# 'latexmath:') -# altlen - if len has latexmath equations, this contains equivalent C99 -# expressions separated by commas. -# externsync - denotes that the member should be externally synchronized -# when accessed by Vulkan -# optional - whether this value can be omitted by providing NULL (for -# pointers), VK_NULL_HANDLE (for handles) or 0 (for bitmasks/values) -# selector - for a union parameter, identifies a separate enum parameter that -# selects which of the union's members are valid -# noautovalidity - tag stating that no automatic validity language should be generated -# objecttype - only applicable for parameters representing a handle as -# a uint64_t value. Specifies the name of another parameter which is -# a VkObjectType or VkDebugReportObjectTypeEXT value specifying -# the type of object the handle references. -# <type> is a <type> name, if present -# <name> is the function / parameter name, if present (normally should -# be, except for void parameters). -# The textual contents of <proto> and <param> should be legal C -# for those parts of a function declaration. -# <alias> - denotes function aliasing, if present -# name - name of aliased function -# <description> - unused text -# <implicitexternsyncparams> are spec-language descriptions of -# objects that are not parameters of the command, but -# are related to them and also require external synchronization. -Command = element command { - ( attribute name { text } , - attribute alias { text } ) | - ( - attribute queues { text } ? , - attribute successcodes { text } ? , - attribute errorcodes { text } ? , - attribute renderpass { text } ? , - attribute cmdbufferlevel { text } ? , - attribute prefix { text } ? , - attribute suffix { text } ? , - Comment ? , - element proto { - mixed { - element type { TypeName } ? , - element name { text } - } - } , - element param { - attribute len { text } ? , - attribute altlen { text } ? , - attribute externsync { text } ? , - attribute optional { text } ? , - attribute selector { text } ? , - attribute noautovalidity { text } ? , - attribute objecttype { text } ? , - mixed { - element type { TypeName } ? , - element name { text } ? - } - } * , - ( - element alias { - Name - } ? & - element description { - text - } ? & - element implicitexternsyncparams { - element param { text } * - } ? - ) - ) -} - -# Each <feature> defines the interface of an API version (e.g. OpenGL 1.2) -# api - API tag (e.g. 'gl', 'gles2', etc. - used internally, not -# necessarily an actual API name -# name - version name (C preprocessor name, e.g. GL_VERSION_4_2) -# number - version number, e.g. 4.2 -# protect - additional #ifdef symbol to place around the feature -# sortorder - order relative to other features, default 0 -# <require> / <remove> contains features to require or remove in -# this version -# profile - only require/remove when generated profile matches -# comment - descriptive text with no semantic meaning -Feature = element feature { - attribute api { text } , - Name , - attribute number { xsd:float } , - attribute protect { text } ? , - attribute sortorder { xsd:integer } ?, - Comment ? , - ( - element require { - ProfileName ? , - ExtensionName ? , - Comment ? , - ( - InterfaceElement | - element comment { text } - ) * - } | - element remove { - ProfileName ? , - Comment ? , - ( - InterfaceElement | - element comment { text } - ) * - } - ) * -} - -Extensions = element extensions { - Comment ? , - Extension * -} - -# Defines the interface of an API <extension>. Like a <feature> -# tag, but with slightly different attributes: -# api - regexp pattern matching one or more API tags, indicating -# which APIs the extension is known to work with. The only -# syntax supported is <name>{|<name>}* and each name must -# exactly match an API being generated (implicit ^$ surrounding). -# name - extension name string -# number - extension number (positive integer, should be unique) -# sortorder - order relative to other extensions, default 0 -# protect - C preprocessor symbol to conditionally define the interface -# platform - should be one of the platform names defined in the -# <platform> tag. Currently unused. -# author - name of the author (usually a company or project name) -# contact - contact responsible for the tag (name and contact information) -# type - 'device' or 'instance', if present -# requires - commas-separated list of extension names required by this -# extension -# requiresCore - core version of Vulkan required by the extension, e.g. -# "1.1". Defaults to "1.0". -# supported - profile name(s) supporting this extension, e.g. 'vulkan' -# or 'disabled' to never generate output. -# promotedto - Vulkan version or a name of an extension that this -# extension was promoted to; e.g. 'VK_VERSION_1_1', or -# 'VK_KHR_draw_indirect_county' -# deprecatedby - Vulkan version or a name of an extension that deprecates -# this extension. It may be empty string. -# e.g. 'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or '' -# obsoletedby - Vulkan version or a name of an extension that obsoletes -# this extension. It may be empty string. -# e.g. 'VK_VERSION_1_1', or 'VK_EXT_debug_utils', or '' -# provisional - 'true' if this extension is released provisionally -# specialuse - contains one or more tokens separated by commas, indicating -# a special purpose of the extension. Tokens may include 'cadsupport', -# 'd3demulation', 'devtools', 'debugging', and 'glemulation'. Others -# may be added in the future. -# In addition, <require> / <remove> tags also support an api attribute: -# api - only require/remove these features for the matching API. -# Not a regular expression. -Extension = element extension { - Name , - attribute number { Integer } ? , - attribute sortorder { xsd:integer } ?, - attribute protect { text } ? , - attribute platform { text } ? , - attribute author { text } ? , - attribute contact { text } ? , - attribute type { text } ? , - attribute requires { text } ? , - attribute requiresCore { text } ? , - attribute supported { StringGroup } ? , - attribute promotedto { text } ? , - attribute deprecatedby { text } ? , - attribute obsoletedby { text } ? , - attribute provisional { text } ? , - attribute specialuse { text } ? , - Comment ? , - ( - element require { - attribute api { text } ? , - ProfileName ? , - ExtensionName ? , - FeatureName ? , - Comment ? , - ( - InterfaceElement | - element comment { text } - ) * - } | - element remove { - attribute api { text } ? , - ProfileName ? , - Comment ? , - ( - InterfaceElement | - element comment { text } - ) * - } - ) * -} - -# Each <spirvextension> define a SPIR-V extension that can be used in the API. -# Each <spirvcapability> define a SPIR-V capability that can be used in the API. -# Contains information to both generate table in spec as well as validation -# what needs to be enabled be used in Vulkan -SpirvExtensions = element spirvextensions { - Comment ? , - SpirvExtension * -} - -SpirvExtension = element spirvextension { - Name , - Enable * -} - -SpirvCapabilities = element spirvcapabilities { - Comment ? , - SpirvCapability * -} - -SpirvCapability = element spirvcapability { - Name , - Enable * -} - -# <enable> defines a way to enable the parent element in the API. -# If anyone of the <enable> elements are valid then the parent element -# can be used. -# -# There are four forms of the tag. -# -# The first only has the minimal version of Vulkan of the application -# -# The second only has a single Vulkan extension that must be enabled -# -# The third has a single Vulkan feature with the struct where it is from -# -# The forth has a property struct, the member field in it, and the value -# that must be present -# -# To make scripting easier, each <enable> has a require attribute to map -# to the asciidoctor conditional logic in the spec. For version and -# extension attribute variations, there is no need for the require attribute -# since it is a redundant 1:1 mapping. -# -# The 'alias' attribute is used in cases where the anchor link can't be -# propertly resolved and needs a manual name to link to -Enable = element enable { - ( - attribute version { text } ) | - ( - attribute extension { text } ) | - ( - attribute struct { text }, - attribute feature { text }, - attribute requires { text }, - attribute alias { text } ? ) | - ( - attribute property { text }, - attribute member { text }, - attribute value { text }, - attribute requires { text } ? ) -} - -# Contents of a <require> / <remove> tag, defining a group -# of features to require or remove. -# <type> / <enum> / <command> all have attributes -# name - feature name which must match -InterfaceElement = - element type { - Name , - Comment ? - } | - Enum | - element command { - Name , - Comment ? - } - -# Integers are allowed to be either decimal or C-hex (0x[0-9A-F]+), but -# XML Schema types don't seem to support hex notation, so we use this -# as a placeholder. -Integer = text - -# EnumName is an compile-time constant name -EnumName = text - -# TypeName is an argument/return value C type name -TypeName = text - -# TypeSuffix is a C numeric type suffix, e.g. 'u' or 'ull' -TypeSuffix = text - -# StringGroup is a regular expression with an implicit -# '^(' and ')$' bracketing it. -StringGroup = text - -# Repeatedly used attributes -ProfileName = attribute profile { text } -ExtensionName = attribute extension { text } -FeatureName = attribute feature { text } -Vendor = attribute vendor { text } -Comment = attribute comment { text } -Name = attribute name { text } - - |